hadoop - 在Shark Hive中创建连接两个现有表的表

标签 hadoop hive hiveql apache-spark shark-sql

我有两个表oldTablenewTable,其内容为:
oldTable:

  key    value    volume
  ======================
  1      abc      10000
  2      def      5000
newTable:
  key    value    volume
  ======================
  1      abc      2000
  2      def      3000
  3      xyz      7000

我想创建一个新表,该表汇总两个表中的volume。也就是说,新表格应包含以下内容:
joined_table:
  key    value    volume
  ======================
  1      abc      12000
  2      def      8000
  3      xyz      7000

我尝试使用以下语句,但没有结果:
CREATE TABLE joined_table AS
SELECT key, value, volume
FROM (
    SELECT IF(oldTable.key != NULL, oldTable.key, newTable.key) AS key,
        IF(oldTable.value != NULL, oldTable.value, newTable.value) AS value,
        IF(oldTable.volume AND newTable.volume, oldTable.volume + newTable.volume,
    IF(oldTable.volume != NULL, oldTable.volume, newTable.volume)) AS volume
    FROM(
        SELECT oldTable.key, oldTable.value, oldTable.volume, newTable.key, newTable.value, newTable.volume
        FROM newTable FULL OUTER JOIN oldTable ON newTable.key = oldTable.key
    )alias
)anotherAlias;

但这给我说了Query returned non-zero code: 10, cause: FAILED: Error in semantic analysis: Ambiguous column reference key一个错误。

我尝试在上述查询中更改joined_table中的列名,但这给了我同样的错误。如何实现这一目标有帮助吗?

另外,有什么方法可以将结果覆盖到现有表中,比如oldTable而不是创建这个新表?

最佳答案

您在查询中使用的单词key是保留关键字。这可能是解析器抛出歧义错误的原因。您可以使用反勾号来避免解析器将其读取为保留文字。

CREATE TABLE joined_table AS
SELECT `key`, value, volume
FROM (
SELECT IF(oldTable.`key` != NULL, oldTable.`key`, newTable.`key`) AS `key`,
    IF(oldTable.value != NULL, oldTable.value, newTable.value) AS value,
    IF(oldTable.volume AND newTable.volume, oldTable.volume + newTable.volume,
IF(oldTable.volume != NULL, oldTable.volume, newTable.volume)) AS volume
FROM(
    SELECT oldTable.`key`, oldTable.value, oldTable.volume, newTable.`key`, newTable.value, newTable,volume
    FROM newTable FULL OUTER JOIN oldTable ON newTable.`key` = oldTable.`key`;
)alias
)anotherAlias;

关于hadoop - 在Shark Hive中创建连接两个现有表的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22525293/

相关文章:

python - 如何将 RDD 保存到单个 Parquet 文件?

sql - hadoop操作只写一行?

java - 在 avro 模式中使用 "default"

hive - 如何计算 Hive 中的中位数

hive - 在配置单元中连接字符串列

Hive - 分区列等于当前日期

azure - 由于 InconcientFSSStateException 导致 Hadoop Namenode 启动失败

java - ClassNotFoundException : org. apache.hive.jdbc.HiveDriver

hadoop - 在 hive 中的字符串中的某些字符后提取文本

hadoop - Hive 宏未返回预期结果