【问题标题】:In Hive, does "Load data local inpath" overwrite existing data or append?在 Hive 中,“加载数据本地路径”是否覆盖现有数据或追加?
【发布时间】:2011-07-29 13:22:09
【问题描述】:

我希望在 cron 上运行导入 Hive,并希望只使用

“将数据本地路径'/tmp/data/x'加载到表X中”到表中就足够了。

后续命令会覆盖表中已有的内容吗?还是会追加?

【问题讨论】:

    标签: hadoop hbase hdfs hive


    【解决方案1】:

    这个网站http://wiki.apache.org/hadoop/Hive/LanguageManual 是您与 Hive 打交道时的朋友。 :)

    地址加载数据到 Hive 的页面是http://wiki.apache.org/hadoop/Hive/LanguageManual/DML 该页面指出

    如果使用了 OVERWRITE 关键字,那么 目标表的内容(或 分区)将被删除并 替换为所引用的文件 文件路径。否则引用的文件 按文件路径将添加到 桌子。注意,如果目标表 (或分区)已经有一个文件 其名称与任何 文件路径中包含的文件名 - 然后 现有文件将被替换 使用新文件。

    在您的情况下,您没有使用 OVERWRITE 关键字,因此文件将被添加到表中。 (除非它们是相同的文件,在这种情况下它们会被覆盖)

    【讨论】:

    • 假设我每天都创建文件,例如20130808.csv 并且必须重新导入这一天的数据。那么我所要做的就是再次导入具有相同文件名 20130808.csv 的相同文件并将更新版本添加到表中?还是我必须通过某种查询自己删除行?
    • 只是为了更新,如果你们一次又一次地使用相同的文件加载,这将一次又一次地添加到表中,这并不是说你会得到覆盖文件是你要下次加载时使用相同的内容。请注意这一点。
    【解决方案2】:

    如果使用了 OVERWRITE 关键字,则目标表(或分区)的内容将被删除并替换为 filepath 所引用的文件;否则文件路径引用的文件将被添加到表中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 2022-01-01
      • 2018-03-05
      相关资源
      最近更新 更多