gpt4 book ai didi

hadoop - 通过将分区目录复制到仓库中来复制 Hive 管理的表

转载 作者:可可西里 更新时间:2023-11-01 16:29:25 28 4
gpt4 key购买 nike

我有一个包含 YEAR, MONTH, DAY 分区的现有分桶表,但我想通过 INGESTION_KEY 添加额外的分区,该列不存在于现有表。这是为了适应 future 的表插入,这样我就不必在每次提取该日期的数据时都OVERWRITE YEAR, MONTH, DAY 分区;我可以做一个简单的 INSERT INTO 并创建一个新的 INGESTION_KEY 分区。

我的新表中需要一年的数据才能开始,所以我想将现有表中一年的分区复制到新表中。与其对每个分区执行 Hive INSERT,我认为使用 distcp 将文件复制到 HDFS 中 Hive 仓库目录中新表的分区目录会更快,然后 ADD PARTITION 到新表。

所以,这就是我所做的一切:

hadoop distcp /apps/hive/warehouse/src_db.db/src_tbl/year=2017/month=02/day=06 /apps/hive/warehouse/dest_db.db/dest_tbl/year=2017/month=02/day=06/ingestion_key=123

hive -e "ALTER TABLE dest_tbl ADD PARTITION (year=2017,month=02,day=06,ingestion_key='123')"

两者都是托管表,新表dest_tblsrc_tbl由同一列聚簇到相同数量的桶中,唯一不同的是schema添加 INGESTION_KEY

到目前为止,我的 SELECT * FROM dest_tbl 显示新表中的所有内容看起来都很正常。所以我的问题是:这种方法有什么问题吗?以这种方式 INSERT 到托管的分桶表是否不好,或者如果没有对复制的数据进行转换,这是否是 INSERT 可接受的替代方案?

谢谢!!

最佳答案

虽然我更喜欢通过 Hive 查询复制只是为了在 Hive 中完成所有操作,但是使用其他工具复制数据文件是可以的,但是..

  • 有一个添加新分区元数据的专用命令,您可以使用它代替 alter table add partition..,它可以一次添加多个分区:

    MSCK REPAIR TABLE dest_tbl;
  • 继续使用 Hive 默认分区格式:partionKey=partitionValue

关于hadoop - 通过将分区目录复制到仓库中来复制 Hive 管理的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42070599/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com