此问题是the question最初关于在Google大查询中使用表名作为前缀重命名列名的情况。 长话短说,我需要连接两个具有确切名称的表并保留列的来源。
我了解到我可以使用,例如:
SELECT table_A , table_B
FROM table_A
FULL JOIN table_B
USING (KEY1, KEY2, KEY3)
此代码将生成一个包含列名的联接表,例如:google big query中的结果中的table_A.KEY1
,table_B.KEY1
。
但是我无法从联接表中取消选择某些列。例如,
WITH merged AS (
SELECT table_A , table_B
FROM table_A
FULL JOIN table_B
USING (KEY1, KEY2, KEY3)
)
SELECT * EXCEPT(table_A.KEY1, table_B.KEY1)
FROM merged
我收到了这个错误
语法错误:预期")"或","但得到了"。"
有人知道如何规避这个问题吗?先感谢您!
这种操作超出了将长表重塑为宽表的目的。 例如,我有一个长桌
KEY1 KEY2 KEY3 VALUE1 VALUE2 DOC_TYPE
1 2 3 A Q PAY
1 2 3 A Q INVOICE
2 3 4 D B PAY
2 3 4 D B INVOICE
并且理想情况下使用KEY1 KEY2 KEY3:
重塑到宽表中KEY1 KEY2 KEY3 VALUE1.pay VALUE2.pay VALUE1.inv VALUE2.inv
1 2 3 A Q A Q
2 3 4 D B D B
由于该表包含许多列。手动重命名所有这些都是不切实际的。我想知道Google大查询是否可以有一些捷径可以做到。
答案 0 :(得分:1)
WITH merged AS (
SELECT table_A , table_B
FROM table_A
FULL JOIN table_B
USING (KEY1, KEY2, KEY3)
)
SELECT
(SELECT AS STRUCT table_A.* EXCEPT(KEY1)) AS table_A,
(SELECT AS STRUCT table_B.* EXCEPT(KEY1)) AS table_B
FROM merged
答案 1 :(得分:1)
下面是BigQuery Standard SQL(我正在重新使用原始question and respective answer中的命名,以便保留上下文)
#standardSQL
SELECT
key1, key2, key3, key4,
(SELECT AS STRUCT inv.* EXCEPT(key1, key2, key3, key4)) inv,
(SELECT AS STRUCT prof.* EXCEPT(key1, key2, key3, key4)) prof
FROM inv FULL JOIN prof
USING (key1, key2, key3, key4)