BigQuery 如何在时间范围内展平表集合后进行分组
BigQuery how to group by after flattening a collection of tables over timerange
我正在尝试执行以下操作:
- 使用
FROM TABLE_DATE_RANGE
在一个时间范围内合并表格
FLATTEN
那组数据
GROUP BY
列 X
- SELECT ColumnX、SUM(ColumnY)、SUM(ColumnZ) 仅针对唯一的 ColumnX 值。
这是我的查询要点:
SELECT
r.ColumnX
,SUM(r.ColumnY)
,SUM(r.ColumnZ)
FROM
(
SELECT *
FROM FLATTEN(
(
SELECT
ColumnX
,ColumnY
,ColumnZ
FROM TABLE_DATE_RANGE(projectx.events_,
TIMESTAMP('2015-09-01'), TIMESTAMP('2015-09-08'))), my_funky_object
)
WHERE ColumnY > 10
) r
GROUP BY
r.ColumnX
问题是,我得到的行数比 ColumnX 的唯一值数应该多得多。于是我退一步简单的输出了GROUP BY - COUNT of ColumnX以便debug,得到如下输出!
我得到了一个中间结果。
发生了什么,我如何确保我的外部 select 仅聚合 ColumnX 的唯一值?
您正在获取 ColumnX 的每个不同值的计数,但您只显示计数,而不是值。
如果您的目标是准确计算不同值的数量,请尝试如下操作:
SELECT
COUNT(*) ct
FROM (
SELECT
1
FROM
... rest of your query ...
GROUP BY r.ColumnX
)
对于 ColumnX 的每个不同值,该内部查询将恰好为您提供一行(每行的值为 1)。外部 select 语句将计算此类行的数量。
另一种方法是使用 EXACT_COUNT_DISTINCT 来获取准确的行数。这比使用 GROUP BY 更简单,但可扩展性更差。
我正在尝试执行以下操作:
- 使用
FROM TABLE_DATE_RANGE
在一个时间范围内合并表格
FLATTEN
那组数据GROUP BY
列 X- SELECT ColumnX、SUM(ColumnY)、SUM(ColumnZ) 仅针对唯一的 ColumnX 值。
这是我的查询要点:
SELECT
r.ColumnX
,SUM(r.ColumnY)
,SUM(r.ColumnZ)
FROM
(
SELECT *
FROM FLATTEN(
(
SELECT
ColumnX
,ColumnY
,ColumnZ
FROM TABLE_DATE_RANGE(projectx.events_,
TIMESTAMP('2015-09-01'), TIMESTAMP('2015-09-08'))), my_funky_object
)
WHERE ColumnY > 10
) r
GROUP BY
r.ColumnX
问题是,我得到的行数比 ColumnX 的唯一值数应该多得多。于是我退一步简单的输出了GROUP BY - COUNT of ColumnX以便debug,得到如下输出!
我得到了一个中间结果。
发生了什么,我如何确保我的外部 select 仅聚合 ColumnX 的唯一值?
您正在获取 ColumnX 的每个不同值的计数,但您只显示计数,而不是值。
如果您的目标是准确计算不同值的数量,请尝试如下操作:
SELECT
COUNT(*) ct
FROM (
SELECT
1
FROM
... rest of your query ...
GROUP BY r.ColumnX
)
对于 ColumnX 的每个不同值,该内部查询将恰好为您提供一行(每行的值为 1)。外部 select 语句将计算此类行的数量。
另一种方法是使用 EXACT_COUNT_DISTINCT 来获取准确的行数。这比使用 GROUP BY 更简单,但可扩展性更差。