元数据实例一则
寫的比較啰嗦,但是請仔細看完,看完后對于元數據你會很有底氣地說出來啥用。
我們老提元數據,元數據到底啥用?
各種抽象的概念撲面而來,下面用一個具體的實驗例子說清楚。
?
我們先說整個流程:
①Flink寫入ORC文件
②hive建表,指定hive存儲數據的文件路徑
③hive中的表格中的數據長時間更新,我們去讀hive的時候,其實是通過②中的文件路徑進行更新到最新數據的。
########################################################################################################################
具體操作步驟如下:
①Flink寫入ORC文件
②
CREATE EXTERNAL TABLE `example`(
? `axxsdf` string,
? `mydeailyTime` timestamp
? )
PARTITIONED by (
? `datetime` string
? )
STORED AS orcfile
LOCATION '/home/appleyuchi/example_file'
?
上面建hive表的元數據就是LOCATION '/home/appleyuchi/example_file'
?
| 操作 | 效果 |
| 建表后再導入特定路徑的數據 | 例如文件中數據導入到hive 后續這個文件再更新的話,mysql就不會動態同步更新了 |
| 建表的時候直接指定數據路徑(上面例子中采用的就是這種) | 建表時指定保存數據的文件所在的路徑, 那么這個文件更新的時候,hive表中也會同步更新 |
?
?
?
③經過長時間的數據插入,有一天,我們需要去hive中查詢,
我們顯然希望最新的數據,
這個時候,如果事先指定了元數據,hive就會去根據元數據(也就是上面LOCATIOn指定的路徑)來更新數據。
?
問題:
如果我在上面建立hive的時候不指定LOCATION,也就是我不用元數據,
而是建立hive表以后,再導入/home/appleyuchi/example_file中的數據可不可以?
答案當然是可以,但是,此時的導入數據是一次性的,當你更新/home/appleyuchi/example_file中的數據,甚至是刪除/home/appleyuchi/example_file這個文件,
你的hive表都不會同步更新。
?
另外從這里,我們也可以清晰地理解"external table"的含義。
也就是說hive的底層數據文件路徑,是手動指定的。
?
?
?
?
總結