我有一个名为A
的表,看起来像这样:
| mytimestamp | col2 | col3 |
|=========================|======|======|
| 2019-11-27 14:30:00 UTC | xxxx | yyyy |
| ....................... | .... | .... |
| 2019-11-27 14:42:28 UTC | tttt | zzzz |
col3
是名为REPEATED RECORD
的{{1}}的一部分
我想用standardSQL整理数据,然后仅获取的唯一组合
cols
,DATE(mytimestamp)
,col2
。
下面是我运行的查询的4个不同版本以及返回的不同结果的数量:
版本1 (嵌套)
col3
带有SELECT
DATE(mytimestamp) AS my_date
,col2
,c.col3 AS as un_col3
FROM
my_dataset.A
,UNNEST(cols) AS c
-- Adding this will return different results.
-- GROUP BY
-- my_date
-- ,col2
-- ,un_col3
的版本返回了GROUP BY
个结果。
没有4236104
的版本返回了GROUP BY
个结果。
版本2 (嵌套+不重复)
1107740805
无论是否有SELECT DISTINCT
DATE(mytimestamp) AS my_date
,col2
,c.col3 AS as un_col3
FROM
my_dataset.A
,UNNEST(cols) AS c
-- Adding this will return the same results.
-- GROUP BY
-- my_date
-- ,col2
-- ,un_col3
,它都会返回GROUP BY
个结果。
版本3 (没有嵌套+唯一)
875301
无论是否有SELECT DISTINCT
DATE(mytimestamp) AS my_date
,col2
,c.col3 AS as un_col3
FROM
my_dataset.A
,A.cols AS c
-- Adding this will return the same results.
--GROUP BY
-- my_date
-- ,col2
-- ,un_col3
,它都会返回GROUP BY
个结果。
第4版(没有嵌套+没有区别)
875301
带有SELECT
DATE(mytimestamp) AS my_date
,col2
,c.col3 AS as un_col3
FROM
my_dataset.A
,A.cols AS c
-- Adding this will return different results.
--GROUP BY
-- my_date
-- ,col2
-- ,un_col3
的版本返回了GROUP BY
个结果。
没有4236104
的版本返回了GROUP BY
个结果。
根据结果和我所知道的,由于1107740805
适用于所有列,因此无论是否具有DISTINCT
,我都会得到相同的结果。
但是为什么版本1 GROUP BY
会给我与版本2或3不同的结果。
哪个版本是我想要做的正确/最佳版本?我猜是2或3,因为返回的行较少,为什么?
谢谢
答案 0 :(得分:1)
以下内容适用于BigQuery Standard SQL,并根据所需的逻辑产生正确的结果
#standardSQL
SELECT DISTINCT DATE(mytimestamp) mydate, col2, col3
FROM `project.dataset.table`
LEFT JOIN UNNEST(cols)
作为测试-是否适用于以下过于简化的伪数据
WITH `project.dataset.table` AS (
SELECT TIMESTAMP '2019-11-27 14:30:00 UTC' mytimestamp, 'xxxx' col2, [STRUCT('yyyy' AS col3), STRUCT('zzzz')] cols UNION ALL
SELECT '2019-11-27 14:30:00 UTC', 'xxxx', [STRUCT('yyyy')] UNION ALL
SELECT '2019-11-27 14:42:28 UTC', 'tttt', [STRUCT('zzzz'), STRUCT('zzzz')]
)
结果将是
Row mydate col2 col3
1 2019-11-27 xxxx yyyy
2 2019-11-27 xxxx zzzz
3 2019-11-27 tttt zzzz