当将数据导出到Google BigQuery时,您可以设置一个实时表,该表由数据实时填充。然而,由于分布式计算的最终一致性,此表将包含重复项。
为了克服这个问题,Google提供了一个视图,将复制的内容过滤掉。但是,这个视图不能用Standard查询。
如果我尝试使用标准查询:
无法在标准SQL查询中引用旧版SQL视图。
我们已经对标准进行了标准化,我不太愿意将所有批处理查询重写为遗留查询,以便在实时数据上使用它们。是否有办法将实时视图切换为标准视图?
编辑:
这是视图定义(Google每天都会重新创建):
SELECT *
FROM [111111.ga_realtime_sessions_20190625]
WHERE exportKey IN (SELECT exportKey
FROM
(SELECT
exportKey, exportTimeUsec,
MAX(exportTimeUsec) OVER (PARTITION BY visitKey) AS maxexportTimeUsec
FROM
[111111.ga_realtime_sessions_20190625])
WHERE exportTimeUsec >= maxexportTimeUsec );发布于 2019-06-25 16:52:10
您可以使用标准SQL创建这样的逻辑视图:
CREATE VIEW dataset.realtime_view_20190625 AS
SELECT
visitKey,
ARRAY_AGG(
(SELECT AS STRUCT t.* EXCEPT (visitKey))
ORDER BY exportTimeUsec DESC LIMIT 1)[OFFSET(0)].*
FROM dataset.ga_realtime_sessions_20190625 AS t
GROUP BY visitKey这将为每个visitKey选择最近的行。如果您想在几天内概括这一点,您可以这样做:
CREATE VIEW dataset.realtime_view AS
SELECT
CONCAT('20', _TABLE_SUFFIX) AS date,
visitKey,
ARRAY_AGG(
(SELECT AS STRUCT t.* EXCEPT (visitKey))
ORDER BY exportTimeUsec DESC LIMIT 1)[OFFSET(0)].*
FROM `dataset.ga_realtime_sessions_20*` AS t
GROUP BY date, visitKeyhttps://stackoverflow.com/questions/56752674
复制相似问题