我想在BigQuery中创建一个允许以下内容的视图:
我知道建议的重复数据删除查询是:
SELECT
* EXCEPT(row_number)
FROM (
SELECT *
,ROW_NUMBER()
OVER (PARTITION BY fct.KeyColumn ORDER BY fct.CreatedDatetime DESC) row_number
FROM `my-project.my_dataset.fact_table` fct)
WHERE
row_number = 1
关于如何查询分区表的建议方法是:
SELECT
*
FROM
`my-project.my_dataset.fact_table`
WHERE
_PARTITIONTIME BETWEEN TIMESTAMP('2016-01-01')
AND TIMESTAMP('2016-01-02');
如何将两者结合以提供重复数据删除的BigQuery视图,并提供一列以允许在视图的where子句中使用_PARTITIONTIME。如果使用子选择等,我读到了分区修剪的局限性,这就是我想知道这是否可行的原因。
为了给你一些上下文,这个视图位于一个正在流式传输的表的顶部,因此重复数据删除必须在运行中发生。
答案 0 :(得分:3)
您需要让视图每天返回最新一行,以便对分区时间进行过滤。它会是这样的:
#standardSQL
SELECT day, latest_row.*
FROM (
SELECT
_PARTITIONTIME AS day,
ARRAY_AGG(fct ORDER BY fct.CreatedDatetime DESC LIMIT 1)[OFFSET(0)] AS latest_row
FROM `my-project.my_dataset.fact_table` AS fct
GROUP BY day, KeyColumn
);
在外部查询中,latest_row.*
还应包含KeyColumn
。