【问题标题】:Insert data into selected columns in HIVE from another table将数据从另一个表插入 HIVE 中的选定列
【发布时间】:2015-03-26 15:12:26
【问题描述】:

我有 2 个配置单元表,一个有很多列和数据,另一个有一些匹配的列,一些不匹配。

我希望能够从第一个表中插入数据并指定要插入的列,例如:

表1(水果): 苹果 字符串橙子 字符串, 字符串葡萄 字符串, 猕猴桃 字符串;

表 2(水果和蔬菜): 字符串胡萝卜 字符串猕猴桃 字符串;

我想要一个接近以下内容的插入语句:

insert overwrite table fruitAndVeg x (x.Pears, x.kiwi) select y.Pears, y.kiwi from fruit y;

我知道下面的代码是可行的,但我的表中有更多数据,因此尝试指定列而不是手动插入空值或空字符串:

insert overwrite table fruitAndVeg select y.Pears, emptystring, y.kiwi from fruit y;

感谢任何帮助。

注意。如果这样更容易,也可以使用 Impala。

【问题讨论】:

  • 我不明白为什么你的第一个 SQL 还不够。

标签: insert hive impala


【解决方案1】:

使用插入覆盖时请小心,因为它会替换表中的任何现有数据。如您所说,其中一张表包含大量数据。

针对您的问题,您可以执行以下操作:

插入餐桌水果和蔬菜(梨、猕猴桃) 选择梨,猕猴桃 来自水果;

在 insert into 子句中注意梨和猕猴桃的大小写(首选小写),因为 Hive 区分大小写。

【讨论】:

  • 这在 Hive 中不起作用,因为它不允许指定要插入的列。
  • 我在 Hive 语言 DSL 页面上花费了很多时间,并且无法列出“插入覆盖”的列名。您提到的语法仅适用于 ACID 表,它与“插入覆盖”不兼容。
  • 这很奇怪。因为我在 hive 中有以这种格式运行的查询。我有一个包含 x 列的表,并且“插入表”语句指定了 x 列。我已经更改了几次列的顺序,但我的查询完美执行,并且输出格式符合我的预期。
  • @AlexeiOsipov 请参考:issues.apache.org/jira/browse/HIVE-9481
  • 我怀疑您在 Hive 中有“ACID”表。 HIVE-9481 描述了“插入”语句的更改。不是“插入覆盖”。
猜你喜欢
  • 2013-10-31
  • 2022-01-24
  • 2012-02-10
  • 1970-01-01
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 2019-02-20
相关资源
最近更新 更多