BigQuery 中的查询抽样问题(标准 SQL)

Posted

技术标签:

【中文标题】BigQuery 中的查询抽样问题(标准 SQL)【英文标题】:Sampling issue with query in BigQuery (Standard SQL) 【发布时间】:2018-10-30 18:15:06 【问题描述】:

我一直在运行以下格式的查询

SELECT b.date as Date,COUNT(DISTINCT user_id) AS NewUsers FROM (
SELECT user_id,MIN(date) as min_date
FROM tableA
WHERE date >= '2018-10-10'
AND filter1 = "XYZ"
GROUP BY ) a
CROSS JOIN (
SELECT date FROM tableB
WHERE date >= '2018-10-19' AND date <= CURRENT_DATE()
GROUP BY 1) b
WHERE a.date >= DATE_SUB(b.date, INTERVAL 6 DAY) AND a.date <= b.date
GROUP BY 1

假设上面是result1

SELECT b.date as Date,COUNT(DISTINCT user_id) AS NewUsers FROM (
SELECT user_id,MIN(date) as min_date
FROM tableA
WHERE date >= '2018-07-10'
AND filter1 = "XYZ"
GROUP BY ) a
CROSS JOIN (
SELECT date FROM tableB
WHERE date >= '2018-07-19' AND date <= CURRENT_DATE()
GROUP BY 1) b
WHERE a.date >= DATE_SUB(b.date, INTERVAL 6 DAY) AND a.date <= b.date
GROUP BY 1

以上是result2

这里2018-07-19是发布日期。

由于我有直到 2018-10-19 的数据,我想从以后运行查询以优化查询的成本和数据消耗....但是有些方法,我得到的数据不正确。

但是,如果我从发布日期开始运行相同的查询,我会得到正确的结果。

我的意思是对应日期的 NewUsers from result1(比如日期 >= 2018-10-19)比 NewUsers from result2 多。

不知道,我错过了什么。

任何帮助将不胜感激。

谢谢

【问题讨论】:

【参考方案1】:

我认为 - 这是因为使用了 'MIN(date)' - 您会看到计数的变化,因为您限制了日期,因此那些在较早日期首次出现的用户 - 现在那些相同的“旧”用户被计为最近天 - 因此混乱

【讨论】:

以上是关于BigQuery 中的查询抽样问题(标准 SQL)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 BigQuery 标准 SQL 中查询 Bigtable 列值?

无法在 python 中对 bigquery 运行标准 SQL 查询

是否可以使用“$”装饰器访问标准 SQL 中的 BigQuery 分区?

标准 sql 中的 BigQuery 过滤记录

Google BigQuery 中的 TIMESTAMP 和标准 SQL

标准 SQL 查询在 BigQuery 中返回正确结果,但在 Data Studio 中不返回