如何使用standardsql在bigquery中的events_表中获取最近24小时的数据?

问题描述 投票:0回答:3

我正在使用此查询,我想从events_表中获取最近24小时的数据...

 Select           
  CAST(TIMESTAMP_ADD(TIMESTAMP_MICROS(event_timestamp), INTERVAL 330 
   MINUTE) AS date) AS event_date,
 event_name,user.value.string_value as context_device_id, 
 (event.value.string_value) as id,
 (event_param.value.string_value) as contentType
            FROM ``,
       UNNEST(user_properties) AS user, 
       UNNEST(event_params) as event,
       UNNEST(event_params) as event_param
   where user.key="email" and event.key="postID" and 
   event_param.key="article_type" and
  CAST(TIMESTAMP_ADD(TIMESTAMP_MICROS(event_timestamp), INTERVAL 330 
MINUTE)AS date) between DATE_SUB(current_date(), INTERVAL 1 DAY) and 
 DATE_SUB(current_date(),INTERVAL 0 DAY)

但是我想每当查询运行时给出过去24小时的数据只意味着如果我今天下午5点运行查询然后它应该从昨天下午5点到今天下午5点获取数据?

sql google-bigquery
3个回答
2
投票

您需要更新表引用以使用通配符(可包括多天),然后添加过滤器以限制它匹配的表。例如,您需要以下内容:

...
FROM `events_*`,
   UNNEST(user_properties) AS user, 
   UNNEST(event_params) as event,
   UNNEST(event_params) as event_param
WHERE _TABLE_SUFFIX >=
  FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)) AND
  user.key="email" and
  ...

_TABLE_SUFFIX伪列上的过滤器将扫描限制为今天和昨天的表,然后在原始查询中的时间戳上的过滤器进一步限制为24小时跨度。


0
投票

如果是sql server,你可以在where子句中使用它

where event_timestamp>=dateadd (hour , -24 , getdate()) and event_timestamp<getdate()

0
投票

作为替代方案,MSSQL中的GETDATE()将允许您进行整数除法:

SELECT GETDATE(), GETDATE() - 1

结果在这一刻:2018-08-31 07:38:18.260 2018-08-30 07:38:18.260

所以在你的情况下,BETWEEN GETDATE() - 1 AND GETDATE()也会做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.