BigQuery:联合两个基于联合 Google 电子表格的不同表

2024-02-11

我有两个不同的 Google 电子表格:

1 个有 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 value.

我使用的是标准 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逐个领域地进行研究,这并不是一个可观的方法。

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


您可以通过 UDF 传递行来处理列名称未按位置对齐或表之间的列数量不同的情况。这是一个例子:

CREATE TEMP FUNCTION CoerceRow(json_row STRING)
RETURNS STRUCT<Col1 STRING, Col2 STRING, Col3 STRING, Col4 STRING, Col5 STRING>
LANGUAGE js AS """
return JSON.parse(json_row);
""";

WITH table1 AS (
  SELECT "A" as Col5, "B" as Col3, "C" AS Col2
  UNION ALL
  SELECT "D" as Col5, "E" as Col3, "F" AS Col2
),

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
)
SELECT CoerceRow(json_row).*
FROM (
  SELECT TO_JSON_STRING(t1) AS json_row
  FROM table1 AS t1
  UNION ALL
  SELECT TO_JSON_STRING(t2) AS json_row
  FROM table2 AS t2
);
+------+------+------+------+------+
| Col1 | Col2 | Col3 | Col4 | Col5 |
+------+------+------+------+------+
| NULL | C    | B    | NULL | A    |
| NULL | F    | E    | NULL | D    |
| G    | H    | J    | K    | L    |
| M    | N    | O    | P    | Q    |
+------+------+------+------+------+

请注意,CoerceRow函数需要声明您想要在输出中显示的行类型。除此之外,被联合的表中的列只是按名称匹配。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BigQuery:联合两个基于联合 Google 电子表格的不同表 的相关文章

随机推荐

  • 将文件夹添加到收藏夹并更改文件夹图标 [Electron macOS]

    一周以来 我一直在寻找一种解决方案 将带有特定图标的文件夹添加到收藏夹侧边栏 就像 Dropbox 所做的那样 有什么解决方案可以用 Electron 或 Objective C 来做到这一点吗 到目前为止我发现了什么 自己拖放 filei
  • 每个数据组合的特殊组编号

    我想为每对行分配不同的组号 对于某些配对 分配唯一的编号作为组编号 edit 我们可以认为这些是成对存在于数据中的 如果这些对存在于行中 则为它们分配一个组号 直到出现下一对 因为真实数据中可能还有其他数据行 这是示例数据 names lt
  • Seaborn中轴标签的字体大小

    在seaborn中 如何仅更改x轴和y轴标签字体大小 有没有办法专门更改轴标签 而不是使用 设置上下文 方法 这是我的代码 def corrfunc x y kws r stats pearsonr x y 0 2 ax plt gca a
  • 当 return 语句和对象之间存在换行符时,Javascript 函数无法返回对象?

    这里是jsfiddle http jsfiddle net fzdQP 完整代码 function foo1 return msg hello1 function foo2 return msg hello2 output foo1 msg
  • 是否可以使用CSS取消文本大写,然后重新大写?

    我从外部来源收到了一段全部大写的文本 我希望它的第一个字母简单地大写 看来text transform capitalize不会将单词的其余部分取消大写 有没有办法不用JS就可以做到这一点 像这样的东西吗 http jsbin com ag
  • Rownum 语句返回与没有它时不同的行

    好吧 我有这个 select 语句 它返回担任职员的人数最少的部门编号 但由于数据库中的数据 它返回两个部门 当我添加 rownum 1 时 它给了我一个完全不同的部门编号 其中有最多的职员 我不知道为什么会这样做 感谢帮助 select
  • Gwt 列表框项目对对象的引用

    我有一个列表框 我想添加一些项目 只有将项目添加为字符串的方法 但是 我想使用字符串和对对象的引用向列表框添加一个项目 这样 如果在列表框中选择了某个项目 我也会获得对象引用 否则我必须始终以 equal 方式搜索正确的对象 因此还有什么选
  • 从地图创建字符串

    我目前正在开发一个项目 通过使用上下文无关语法规则 我将生成随机句子 现在 我正在创建一个函数 该函数将接受哈希值 并遍历它 选择正确的产生式来创建句子并将其作为字符串返回 例如 给定以下格式的哈希
  • 随着记录的增长,mongoldb 文档更新的性能下降

    我有一个 iOS 应用程序 它将批量数据发送到 API 端点 该端点将数据存储到 mongodb 数据库中 我的数据建模如下 id ObjectId device id Uuid rtfb status bool repetitions s
  • 如何从数据库插入图像?

    我想在我的报告的详细信息区域中插入数据库中的图像贾斯帕软件工作室 JPG 图像保存在 MySQL 中imgdata类型的longblob 我尝试将此表达式放入 Image 元素中 F imgdata MyUtil getInputStrea
  • 需要 Gradle 版本 1.10。当前版本是2.2.1。在安卓中

    我有一个使用 Android Studio 构建的 Android 项目 并尝试在我的 Android Studio 上导入并运行它 但在尝试同步项目时遇到以下错误 Failed to sync Gradle project project
  • 使用 java api 在 Elasticsearch 中创建索引并添加映射会导致缺少分析器错误

    代码是Scala 语言 它与Java 代码极其相似 我们的地图索引器用于创建索引的代码 https gist github com a16e5946b67c 6d12b2b8 https gist github com a16e5946b6
  • 包含子字符串列表中精确子字符串的字符串

    Scala 初学者在这里 我试图找到所有推文文本中至少包含关键字列表中的一个关键字 given 其中一条推文 case class Tweet user String text String retweets Int 举个例子Tweet u
  • 我如何在我的 Angular 2 项目中使用 daterangepicker js?

    我正在 Angular 2 项目中工作 想要集成 daterangepicker js 库来弹出日期范围选择器 如果您之前没有听说过 这里链接到图书馆http www daterangepicker com http www dateran
  • Redux Toolkit - 我无法更新 Slice 状态?

    我想更新状态并尝试了几种方法来做到这一点 但我不能 首先 我得到了一个problem https stackoverflow com questions 65764486 why reducer function return only p
  • SQL使用触发器进行约束

    我正在研究触发因素和约束因素 我有一个使用触发器的问题 说实话 我不太确定如何使用触发器 假设我们有一个教师表 这个教师表包含teacher id ssn first name last name class time 例如 teacher
  • R 使用 diff:二元运算符错误的非数字参数

    我们使用以下命令解析包含一些数字的 CSV 文件 tt lt read table test2 csv sep stringsAsFactors FALSE 它有效 印刷tt 1 产生一个很好的向量并且sd tt 1 是明智的 然而 当我们
  • 如何在 OpenCL 中验证波前/扭曲大小?

    我使用的是 AMD Radeon HD 7700 GPU 我想使用以下内核来验证波前尺寸是否为 64 kernel void kernel test warpsize global T dataSet uint size size t id
  • Twitter Bootstrap 中的数据切换属性

    什么是data toggleTwitter Bootstrap 中的属性有什么作用 我在 Bootstrap API 中找不到答案 我之前也看到过类似的问题 link https stackoverflow com questions 10
  • BigQuery:联合两个基于联合 Google 电子表格的不同表

    我有两个不同的 Google 电子表格 1 个有 4 列 Col1 Col2 Col5 Col6 ID1 A B C ID2 D E F 其中包含前一个文件的 4 列 以及另外 2 列 Col1 Col2 Col3 Col4 Col5 Co