如何将新数据附加到现有的配置单元表

mar*_*jun 5 hadoop hive

如何将记录追加到现有的分区 Hive 表?例如,我有一个名为“ip_country”的现有外部表,数据集是 testdata1。如果数据集增长,比如我第二天的数据集是 testdata1 和 testdata2,那么如何将新数据即“testdata2”附加到“ip_country”配置单元表。

Par*_*hik 6

它可以通过几种方式实现(完全取决于您的要求)

  1. 如果您不打算覆盖分区中的现有记录(我的意思是您没有大的历史数据,比如 10 年的数据),那么 Insert Overwrite 可能适合。

INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1 FROM from_statement;

  1. 如果您不担心分区中的重复项,那么 Insert Into 可能适合(老实说,我不喜欢有重复记录)。

INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement;

  1. 如果你有历史数据和增量数据,那么历史数据可以插入一次,增量数据(根据你选择的频率每天/每周/每两周)可以使用插入覆盖插入

  • 美好的。因为,您需要每天刷新(仅前一天),然后假设您的表在日期列上进行分区,然后在每天刷新时,我们正在查看具有新数据的新分区。所以 INSERT INTO 就足够了。并且 INSERT OVERWRITE 也将做与 INSERT INTO 相同的事情(没有可覆盖的内容),因为它是每日刷新(仅 1 天)。 (2认同)
  • 嗯.. 据我所知,您的用例只有 3 种解决方案 1. 如果正在使用 INSERT INTO,那么您必须处理重复记录,因为您的分区列是国家/地区。2. 如果使用 INSERT OVERWRITE(我认为这最适合您的用例),则将发生删除然后插入。此外,删除记录然后插入不会有太多开销。3. 如果对以上两点都不满意,则必须将日期列引入表中并将其作为分区。在这种情况下,您可以使用 INSERT INTO。希望这对你有帮助:) (2认同)