繁体   English   中英

Bigquery 连接 2 个表,id 从 4 列连接并动态创建一个新表

[英]Bigquery join 2 tables with id concated from 4 columns and create a new table dynamically

我在 Bigquery 中有两个来自两个不同数据源的表,比如说 x 和 y。 我想在 os_name、tracker_name、date、country 列上加入这两个表。 为此,我正在使用 concat 函数并像这样加入:

  full outer join x on concat(x.date,x.os_name,x.tracker_name, x.country) = concat(y.date,y.os_name,y.tracker_name,y.country_code)

作为查询结果,公共列也会被复制。 就像在结果中一样,有 os_name 和 os_name_1、country_code、country_code_1 等列。 我不想要那个。 最终列应如最终表架构中的示例所示。

我想返回双方的所有记录。 例如,如果表 y 中没有匹配项,则 y_install 和 y_purcase 将为 0,反之亦然。

X 表架构:

  • 操作系统名称,
  • 跟踪器名称,
  • 日期,
  • 国家
  • 安装
  • 购买

Y 表模式:

  • 操作系统名称,
  • 跟踪器名称,
  • 日期,
  • 国家,
  • y_install,
  • y_purchase

所需的最终表架构:

  • 操作系统名称,
  • 跟踪器名称,
  • 日期,
  • 国家
  • 安装
  • 购买,
  • y_install,
  • y_purchase

我将按给定的时间间隔安排查询并将结果写入目标表。

你能帮我解决这个问题吗?

关于最终表,我不明白你是想返回第一个 NON NULL 结果,还是想拥有一个数组,其中包含两个表的两个结果,以防两个表都是有效值。 在我的示例表中,您想要第 1,2 行(实际上是同一行)还是第 3 行?

行号 x_安装 y_install final_table_install
1个 23 50 23
2个 无效的 50 50
3个 23 50 [23,50]

事实证明,我想使用的是 union all。 首先,我将非公共列添加到两个表中,以便两个表的模式相等。 所以我能够使用 union all 垂直合并表。 无论如何,感谢您提供帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM