当前位置: 首页 > 面试题库 >

BigQuery:将两个基于联合Google Spreadsheet的不同表合并

谷彦君
2023-03-14
问题内容

我有两个不同的Google Spreadsheet:

一列四列

+------+------+------+------+
| 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值。

我正在使用standardSQL,这是可以用来生成示例数据的语句:

#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逐个字段明确地显示的示例中,这并不是一个相当好的方法。

有没有一种有效的方法可以连接这两个表?


问题答案:

有没有一种有效的方法可以连接这两个表?

#standardsQL
SELECT *, NULL AS Col5, NULL AS Col6 FROM table1
UNION ALL
SELECT * FROM table2

哟可以用你的例子检查一下

#standardsQL
WITH table1 AS (
  SELECT "ID1" AS Col1, "A" AS Col2, "B" AS Col3, "C" AS Col4 
  UNION ALL
  SELECT "ID2", "D", "E", "F"
),
table2 AS (
  SELECT "ID3" Col1, "G" AS Col2, "H" AS Col3, "J" AS Col4, "K" AS Col5, "L" AS Col6 
  UNION ALL
  SELECT "ID4", "M", "N", "O", "P", "Q" 
)
SELECT *, NULL AS Col5, NULL AS Col6 FROM table1
UNION ALL
SELECT * FROM table2


 类似资料:
  • 我正在尝试合并两个不同类型的列表。我得到了两个不同的API响应从改造在一个android应用程序,第一个列表是一个电影列表定义为 公共类列表{ 我通过以下操作成功地从API中检索到列表 然后,我尝试将一个类型列表和一个类型字符串列表组合起来,以创建一个新类ListingAndImage(字符串是一个URL,我将加载到imageview中) 我的问题是,哪种方式最好将这两个列表组合起来,形成一个列表

  • 问题内容: 我有两个表(表A和表B)。 它们具有不同的列数-假设表A具有更多列。 如何合并这两个表,并为表B没有的列获取空值? 问题答案: 为具有较少列的表添加额外的列作为null

  • 问题内容: 我正在尝试运行以下查询,但继续遇到相同的错误 查询失败错误:在第6行第33列遇到“”。 查询是: 从[Dataset1.1_0_MEMBER_GROUP]中 选择1_0_MEMBER_GROUP.User_Group, 1_0_MEMBER_GROUP.Member_ID, 1_4_MEMBER_TRAN_YEAR.MEMBER_UID 在1_0_MEMBER_GROUP_YEAR_M

  • 我对PostGIS(和一般数据库)完全陌生,因此如果我使用术语不正确,请道歉。 我有两个带有多线串几何的表,我想根据几何将一个字段从一个表复制到另一个表。几何不重叠,所以我想找到最接近的几何。我试过谷歌搜索,并找到了很多尝试的方法(ST_DISTANCE等),但是查询总是返回错误的结果(在地图上检查之后)。 e. g. g. 表1有要复制的字段,表2没有。我想遍历表2中的所有记录,并在表1中找到最

  • 问题内容: 我有桌子 表格1 和表2 我想将两个没有公用字段的表合并到一个表中,如下所示: 表3 即,就像将两个桌子并排放置。 我被卡住了!请帮忙! 问题答案: 为每个表中的每一行获取一个行号,然后使用这些行号进行完全连接: 这是假定SQL Server> = 2005。

  • 问题内容: 我有一堂课,有两个日期字段说: 我想根据日期对上述类别的列表进行排序,如果它们相等,则根据max(activation)和max(timeStamp)进行排序。 我尝试的代码如下所示,仅获取max(激活) 任何帮助将不胜感激。 谢谢 问题答案: 这样就可以了!