在 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 一个表并根据条件过滤其数组元素

Google BigQuery 上的最佳 JOIN 性能

BigQuery 分区表在 _PARTITIONTIME 加入

Google BigQuery 要求 JOIN EACH,但我已经在使用它

bigQuery 和 GA-Premium 集成:从 GA 中的未过滤视图导出数据时,如何在 bigQuery 中使用 IP 过滤器(以排除内部流量)

如何在 Bigquery 中结合 Cross Join 和 String Agg