在 BigQuery 中使用 JOIN 过滤国家/地区
Posted
技术标签:
【中文标题】在 BigQuery 中使用 JOIN 过滤国家/地区【英文标题】:Filter country using a JOIN in BigQuery 【发布时间】:2020-07-22 08:32:19 【问题描述】:在 BQ 的预定查询中,我正在尝试使用外部 Google 表格(已制作表格)过滤国家/地区。该查询已经有来自其他两个表的连接。我想在 WHERE 语句中输入一个 SELECT 子句。
SELECT
DATE(e_time) AS date,
DATE(i_time) AS i_date,
DATE_DIFF(DATE(e_time),DATE(i_time),day) AS days_since_install,
country_code AS country,
FROM
`data.sessions`
WHERE
DATE(e_time)= DATE_SUB(CURRENT_DATE(), INTERVAL 2 day)
AND country_code = (
SELECT
country_code as country
FROM
`data.sessions` a
INNER JOIN
`data.country_filter` b
ON
string_field_0 = a.country_code)
我不断收到错误。关于我哪里出错的任何提示?预期的输出将是表 1 以及从表 b 中过滤的国家。提前谢谢你。
【问题讨论】:
分享样本数据和预期输出 你好 Zaynul。我编辑了帖子。谢谢! 轻松为您提供帮助,向我们展示一些示例表格和预期结果 - 全部为格式化文本,而不是图像。 (minimal reproducible example) 您好,我更新了帖子的信息!谢谢你:) 您遇到了什么错误?当我连接 Google Sheets 时,最常见的错误是权限错误,您需要在本地解决。 【参考方案1】:在您的查询中,您必须使用 in
SELECT
DATE(e_time) AS date,
DATE(i_time) AS i_date,
DATE_DIFF(DATE(e_time),DATE(i_time),day) AS days_since_install,
country_code AS country,
FROM
`data.sessions`
WHERE
DATE(e_time)= DATE_SUB(CURRENT_DATE(), INTERVAL 2 day)
AND country_code in(
SELECT
country_code as country
FROM
`data.sessions` a
INNER JOIN
`data.country_filter` b
ON
string_field_0 = a.country_code)
【讨论】:
其实有了IN,我就不用JOIN了。感谢您的帮助。以上是关于在 BigQuery 中使用 JOIN 过滤国家/地区的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery LEFT JOIN 一个表并根据条件过滤其数组元素
BigQuery 分区表在 _PARTITIONTIME 加入
Google BigQuery 要求 JOIN EACH,但我已经在使用它
bigQuery 和 GA-Premium 集成:从 GA 中的未过滤视图导出数据时,如何在 bigQuery 中使用 IP 过滤器(以排除内部流量)