我有两张table oldTable
以及 newTable
内容如下: oldTable
:
key value volume
======================
1 abc 10000
2 def 5000
``` `newTable` :
key value volume
1 abc 2000
2 def 3000
3 xyz 7000
我想创建一个新表来汇总 `volume` 两张table上都有。i、 例如,新表应包含以下内容: `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` 而不是创建一个新的?
2条答案
按热度按时间nbnkbykc1#
好 啊。我通过以下方法成功地完成了这一任务:
我仍然需要弄清楚如何在不创建新表的情况下更新现有表。
更新
INSERT OVERWRITE TABLE oldTable SELECT
... 对现有表执行更新。wxclj1h52#
这个词
key
您在查询中使用的是保留关键字。这可能是解析器抛出歧义错误的原因。您可以使用反勾号来避免解析器将其作为保留文本读取。