hive备份分区表@2019-07-18
2019-07-18 本文已影响0人
dataHunter
网上搜索方案是:
https://www.cnblogs.com/cxzdy/p/4934849.html
- 创建新表,分区指向新路径
- 然后用hdfs copy 方式把老文件内容复制到新文件夹下
- 刷新新表元数据(MSCK REPAIR TABLE tableName)
可是,我用的是阿里的oss存储的文件。
所以网上第二步不可行。
所以,新方式
思路:
- 创建新表,分区指向新路径
- shell 循环调用 load inpath 'xxxxxxxxxxxxxxx' overwrite into table xxx partion (xxx);
dts="2019-07-05 2019-07-06"
for dt in $dts
do
# load data 方式
spark-sql --master yarn -e "load data inpath 'xxxxxxxxx/dt=${dt}' overwrite into table xxxxx partition (dt = '${dt}');"
# insert overwrite 方式
# spark-sql --master yarn -e "insert overwrite directory 'oss://xxxxx/${new_table}/dt=${dt}' select * from xxx.${old_table} where dt = '${dt}' ;"
done
考虑到load data 比 insert overwrite快,所以选了load data,但是load data后数据到了新目录,老目录下就没有了,慎用哦。如果不想这样就采用 insert overwrite方式。
另外用了 insert overwrite 也需要刷新元数据(MSCK REPAIR TABLE tableName)
nsert overwrite 方式 directory路径后也可以指定行分割符等。例:row format delimited fields terminated by '\001'