如何让Athena中已创建的分区表自动加载分区
外部分区表自动加载分区的实现方案
以下几种方案可以帮你摆脱手动执行LOAD PARTITION的麻烦:
开启Hive metastore自动分区检测
你可以通过设置Hive参数让元数据自动检测S3上的新分区:- 打开自动检测开关:
SET hive.metastore.partition.autodetect=true; - 配置检测间隔(单位秒,比如每5分钟检测一次):
SET hive.metastore.partition.autodetect.interval=300;
如果要全局生效,直接修改
hive-site.xml配置文件:<property> <name>hive.metastore.partition.autodetect</name> <value>true</value> </property> <property> <name>hive.metastore.partition.autodetect.interval</name> <value>300</value> </property>开启后,metastore会定期扫描表的S3存储路径,自动把新增的分区注册到元数据里。
- 打开自动检测开关:
定时执行MSCK REPAIR TABLE
如果自动检测的时效性不够,或者你的环境不支持上述参数,可以用定时任务定期执行分区修复命令。比如在Linux上用cron,每天凌晨2点同步一次:0 2 * * * hive -e "MSCK REPAIR TABLE my_table;"这个命令会自动对比S3上的目录和元数据中的分区,把缺失的分区添加进去。
云环境下的事件触发方案(以AWS为例)
要是你用的是AWS生态,可以给S3桶配置事件通知,当新的分区目录上传完成时,触发Lambda函数,在函数里执行ALTER TABLE my_table ADD PARTITION (date='xxxx-xx-xx')命令,实现近乎实时的分区加载。
内容的提问来源于stack exchange,提问作者Smasell
相关产品推荐
相关产品推荐

