在 BigQuery 中加入自身

Posted

技术标签:

【中文标题】在 BigQuery 中加入自身【英文标题】:Joining onto itself in BigQuery 【发布时间】:2020-11-23 12:53:24 【问题描述】:

我的这段代码可以在 mysql 中运行,但无法在 BigQuery 中运行。

select *
from table1 
left join table1 as table2
on table1.user_id = table2.user_id
and table1.date = table2.date - interval '1 day'

我可能在这里遗漏了一些基本的东西,但无法弄清楚。

【问题讨论】:

您是否收到错误消息?为什么引用 1 天? 是的,我在 BigQuery 中收到一条错误消息。语法错误:[10:58] 出现意外的关键字 INTERVAL 好的,请发表 语法错误:在 [10:58] 出现意外的关键字 INTERVAL BigQuery 似乎不支持 INTERVAL。尝试用 DATEADD() 替换。 【参考方案1】:

使用DATE_SUB() function

select *
from table1 
left join table1 as table2
on table1.user_id = table2.user_id
and table1.date = DATE_SUB(table2.date, interval 1 day);

PS。 INTERVAL 用户手册中未找到数据类型/说明符。 BigQuery - DATATYPES.

【讨论】:

【参考方案2】:

BigQuery 标准 SQL 现在支持 DATE arithmetic operators。

所以(假设 table1.datetable2.date 是日期类型)你可以像这样简单

select *
from table1 
left join table1 as table2
on table1.user_id = table2.user_id
and table1.date = table2.date - 1

【讨论】:

以上是关于在 BigQuery 中加入自身的主要内容,如果未能解决你的问题,请参考以下文章

在 BigQuery 中加入 2 列结构

BigQuery - 相关子查询取消嵌套数组不起作用

在bigquery中连接多个表

BigQuery 相关子查询 - 将数组转换为数组

为啥 Parquet 文件中的数据在 BigQuery 表中加载后与源数据不匹配

在BigQuery文件中加载列名称加载python