通过将分区目录复制到仓库中来复制 Hive managed table
Copying Hive managed table by copying partition directories into warehouse
我有一个现有的分桶 table,它具有 YEAR, MONTH, DAY
分区,但我想通过 INGESTION_KEY
添加额外的分区,现有 [=] 中不存在的列39=]。这是为了适应未来的 table 插入,这样我就不必在每次为该日期摄取数据时都 OVERWRITE
一个 YEAR, MONTH, DAY
分区;我可以做一个简单的 INSERT INTO
并创建一个新的 INGESTION_KEY
分区。
我的新 table 需要一年的数据才能开始,所以我想将一年的分区从现有的 table 复制到新的 table。与其对每个分区都做一个 Hive INSERT
,我认为使用 distcp
将文件复制到 HDFS 中 Hive 仓库目录中新的 table 的分区目录会更快,然后 ADD PARTITION
到新的 table.
所以,这就是我所做的一切:
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')"
两者都被管理 tables,新的 table dest_tbl
被相同的列聚集到与 src_tbl
相同数量的桶中,并且唯一的架构的不同之处在于添加了 INGESTION_KEY
。
到目前为止,我的 SELECT * FROM dest_tbl
显示新 table 中的所有内容看起来都很正常。所以我的问题是:这种方法有什么问题吗?以这种方式 INSERT
到托管的、分桶的 table 是否不好,或者如果没有对复制的数据进行转换,这是 INSERT
的 acceptable 替代方案吗?
谢谢!!
虽然我更喜欢通过 Hive 查询复制只是为了在 Hive 中完成所有操作,但是使用其他工具复制数据文件是可以的,但是..
有一个添加新分区元数据的专用命令,你可以用它代替alter table add partition..
,它可以一次添加多个分区:
MSCK REPAIR TABLE dest_tbl;
继续使用 Hive 默认分区格式:partionKey=partitionValue
我有一个现有的分桶 table,它具有 YEAR, MONTH, DAY
分区,但我想通过 INGESTION_KEY
添加额外的分区,现有 [=] 中不存在的列39=]。这是为了适应未来的 table 插入,这样我就不必在每次为该日期摄取数据时都 OVERWRITE
一个 YEAR, MONTH, DAY
分区;我可以做一个简单的 INSERT INTO
并创建一个新的 INGESTION_KEY
分区。
我的新 table 需要一年的数据才能开始,所以我想将一年的分区从现有的 table 复制到新的 table。与其对每个分区都做一个 Hive INSERT
,我认为使用 distcp
将文件复制到 HDFS 中 Hive 仓库目录中新的 table 的分区目录会更快,然后 ADD PARTITION
到新的 table.
所以,这就是我所做的一切:
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')"
两者都被管理 tables,新的 table dest_tbl
被相同的列聚集到与 src_tbl
相同数量的桶中,并且唯一的架构的不同之处在于添加了 INGESTION_KEY
。
到目前为止,我的 SELECT * FROM dest_tbl
显示新 table 中的所有内容看起来都很正常。所以我的问题是:这种方法有什么问题吗?以这种方式 INSERT
到托管的、分桶的 table 是否不好,或者如果没有对复制的数据进行转换,这是 INSERT
的 acceptable 替代方案吗?
谢谢!!
虽然我更喜欢通过 Hive 查询复制只是为了在 Hive 中完成所有操作,但是使用其他工具复制数据文件是可以的,但是..
有一个添加新分区元数据的专用命令,你可以用它代替
alter table add partition..
,它可以一次添加多个分区:MSCK REPAIR TABLE dest_tbl;
继续使用 Hive 默认分区格式:
partionKey=partitionValue