hive备份分区表@2019-07-18

2019-07-18  本文已影响0人  dataHunter

网上搜索方案是:
https://www.cnblogs.com/cxzdy/p/4934849.html

  1. 创建新表,分区指向新路径
  2. 然后用hdfs copy 方式把老文件内容复制到新文件夹下
  3. 刷新新表元数据(MSCK REPAIR TABLE tableName)

可是,我用的是阿里的oss存储的文件。
所以网上第二步不可行。

所以,新方式

思路:

  1. 创建新表,分区指向新路径
  2. 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'

上一篇 下一篇

猜你喜欢

热点阅读