【发布时间】:2018-01-11 01:18:07
【问题描述】:
我有两个不同的 Google 电子表格:
一个有 4 列
+------+------+------+------+
| Col1 | Col2 | Col5 | Col6 |
+------+------+------+------+
| ID1 | A | B | C |
| ID2 | D | E | F |
+------+------+------+------+
一个包含上一个文件的 4 列,以及另外 2 个列
+------+------+------+------+------+------+
| Col1 | Col2 | Col3 | Col4 | Col5 | Col6 |
+------+------+------+------+------+------+
| ID3 | G | H | J | K | L |
| ID4 | M | N | O | P | Q |
+------+------+------+------+------+------+
我在 Google BigQuery 中将它们配置为联合源,现在我需要创建一个视图来连接两个表的数据。
两个表都有 Col1 列,其中包含一个 ID,此 ID 在所有表中是唯一的,不包含复制数据。
我要查找的结果表如下:
+------+------+------+------+------+------+
| Col1 | Col2 | Col3 | Col4 | Col5 | Col6 |
+------+------+------+------+------+------+
| ID1 | A | NULL | NULL | B | C |
| ID2 | D | NULL | NULL | E | F |
| ID3 | G | H | J | K | L |
| ID4 | M | N | O | P | Q |
+------+------+------+------+------+------+
对于第一个文件没有的列,我期待 NULL 值。
我使用的是标准 SQL,这里有一个语句可以用来生成示例数据:
#standardsQL
WITH table1 AS (
SELECT "A" as Col1, "B" as Col2, "C" AS Col3
UNION ALL
SELECT "D" as Col1, "E" as Col2, "F" AS Col3
),
table2 AS (
SELECT "G" as Col1, "H" as Col2, "J" AS Col3, "K" AS Col4, "L" AS Col5
UNION ALL
SELECT "M" as Col1, "N" as Col2, "O" AS Col3, "P" AS Col4, "Q" AS Col5
)
一个简单的UNION ALL 不起作用,因为表有不同的列
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
Error: Queries in UNION ALL have mismatched column count; query 1 has 3 columns, query 2 has 5 columns at [17:1]
通配符运算符不是一种合适的方式,因为联合来源不支持该方式
SELECT * FROM `table*`
Error: External tables cannot be queried through prefix
当然这是一个示例数据,只有 3-5 列,真实表有 20-40 列。因此,我需要逐个字段显式地 SELECT 的示例,这不是一个可观的方式。
有没有一种可行的方法来加入这两个表?
【问题讨论】:
标签: sql google-sheets google-bigquery bigquery-standard-sql