元数据实例一则
写的比较啰嗦,但是请仔细看完,看完后对于元数据你会很有底气地说出来啥用。
我们老提元数据,元数据到底啥用?
各种抽象的概念扑面而来,下面用一个具体的实验例子说清楚。
我们先说整个流程:
①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的底层数据文件路径,是手动指定的。