Sql 使用默认表名作为前缀连接表后,在SELECT EXCEPT()中索引列
这个问题是关于在google big query中使用表名作为前缀重命名列名的问题。 长话短说,我需要用确切的名称连接两个表,并保留列的起源 我学会了我可以使用,例如:Sql 使用默认表名作为前缀连接表后,在SELECT EXCEPT()中索引列,sql,google-bigquery,Sql,Google Bigquery,这个问题是关于在google big query中使用表名作为前缀重命名列名的问题。 长话短说,我需要用确切的名称连接两个表,并保留列的起源 我学会了我可以使用,例如: SELECT table_A , table_B FROM table_A FULL JOIN table_B USING (KEY1, KEY2, KEY3) 这段代码将生成一个具有列名的联接表,例如:table_a.KEY1,table_B.KEY1,在google big query的结果中 但是,我很难从联接表中取消选
SELECT table_A , table_B
FROM table_A
FULL JOIN table_B
USING (KEY1, KEY2, KEY3)
这段代码将生成一个具有列名的联接表,例如:table_a.KEY1
,table_B.KEY1
,在google big query的结果中
但是,我很难从联接表中取消选择某些列。比如说,
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 big query是否有一些快捷方式可以做到这一点。下面是BigQuery标准SQL(我正在重新使用您的原始名称以保留上下文)
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
下面是BigQuery标准SQL(我正在重新使用原始SQL的命名,以便保留上下文)
实际原因是什么?询问不仅仅是出于好奇,而是为了为你找到合适的解决方案。。。在你最初的问题中,你提到在那些表中有100多列——那么仅仅删除一列的实际用例是什么呢?谢谢!因此,我们的想法是将长表更改为宽表,然后在宽表上应用过滤算法。我会在问题中写更多的细节。我的理解是,3个键只是一个例子,实际上你有100个?正确的?所以你不想手动操作,就像你只需要三个键一样?对吗?有4个键,但值列是100+。其思想是使用4个键将值列移到一侧,以确保行不匹配。表中只有两种类型的文档。所以我想,如果我只是分成两个表并合并它们,那么在BQSQL中就更容易了?询问不仅仅是出于好奇,而是为了为你找到合适的解决方案。。。在你最初的问题中,你提到在那些表中有100多列——那么仅仅删除一列的实际用例是什么呢?谢谢!因此,我们的想法是将长表更改为宽表,然后在宽表上应用过滤算法。我会在问题中写更多的细节。我的理解是,3个键只是一个例子,实际上你有100个?正确的?所以你不想手动操作,就像你只需要三个键一样?对吗?有4个键,但值列是100+。其思想是使用4个键将值列移到一侧,以确保行不匹配。表中只有两种类型的文档。所以我想,如果我只是分成两个表并合并它们,在BQSQL中会更容易。
#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)