我在BigQuery中创建了一个摘要表,其中包含每天的摘要数据(例如20151127)。我想做的是查看我拥有的最新摘要数据,并将其作为我要搜索的新数据的起点。例如,如果我的最后一个日期是2015-11-27,我想为它添加一天,然后从2015-11-28直到今天搜索GA数据。
我希望这样做的方法是使用table_date_range函数提供一个select。 例如
-Dlog4j.configurationFile=file:C:\Users\me\log4j.xml
我无法让这个select语句与BigQuery一起使用。有谁知道像这样查询的方法?我尝试这样做是因为我想每天刷新我的汇总表,但是我不希望每次运行脚本时都要重新查询所有数据。
答案 0 :(得分:1)
您需要一张豪华桌子 - 只有日期的calendar_dates,如下所示
2015-11-24
2015-11-25
2015-11-26
2015-11-27
2015-11-28
2015-11-29
2015-11-30
2015-12-01
2015-12-02
2015-12-03
2015-12-04
以下查询执行您所要求的内容
SELECT
*
FROM (
TABLE_QUERY(YourDataset,
'table_id IN (
SELECT
"ga_sessions_" + REPLACE(DATE(DATE_ADD(TIMESTAMP(DAY), 1, 'DAY')), '-', '')
FROM temp.calendar_dates AS days
CROSS JOIN (
SELECT MAX(session_date) max_date
FROM YourDataset.daily_pageview_data
) max_avail_day
WHERE DAY BETWEEN max_date AND CURRENT_DATE()
)'
)
)
要创建奢侈表 - calendar_dates - 您可以使用以下脚本:var_start和:var_end设置以反映您的需求。如果由于某种原因你不想要额外的表 - 你可以将下面的代码嵌入到上面的代码中,而不是temp.calendar_dates引用
SELECT DATE(DATE_ADD(TIMESTAMP(:var_start), pos - 1, "DAY")) as day
FROM (
SELECT ROW_NUMBER() OVER() AS pos, *
FROM (FLATTEN((
SELECT SPLIT(RPAD('', 1 + DATEDIFF(TIMESTAMP(:var_end), TIMESTAMP(:var_start)), '.'),'') AS h
FROM (SELECT NULL)),h
)))