无法从BigQuery中的时间戳中提取日期

时间:2016-08-29 03:01:07

标签: sql google-bigquery google-cloud-platform

我正在尝试在过去一周内获取与特定实体ID相关联的所有行。每行都有一个时间戳。我想通过从日期时间戳中提取日期来分组这些实体,但是当我尝试时,我得到了

  

错误:(L6:28):GROUP BY中的表达式STRFTIME_UTC_USEC([data_timestamp],'%Y-%m-%d')无效

来自bigquery的

似乎DATE()函数出现问题。

以下是我正在运行的完整查询:

SELECT Count(*) FROM [myproj:mydataset.mytable] 
WHERE 
    bool_property=False 
AND 
    entity_id=5667423172689920 
AND
    DATEDIFF(CURRENT_DATE(), data_timestamp) <= 7
GROUP BY DATE(data_timestamp)

查看数据,看起来质量,这里称为'data_timestamp'实际上是一个合适的时间戳;我真的不明白为什么DATE()函数会失败。

任何帮助或提示?谢谢!

2 个答案:

答案 0 :(得分:4)

您的查询有两个问题

  1. 在BigQuery Legacy SQL中,你不能在GROUP BY语句中使用表达式, 而只是字段(顺便说一下,BigQuery Standard SQL中不存在此限制)
  2. 当您进行GROUP BY时 - 您不能只是简单地选择所有字段,而是需要使用一些聚合函数,如COUNT或SUM等(对于那些不属于GROUP VY的字段)
  3. 因此,您的查询可能如下所示:

    SELECT DATE(data_timestamp) AS dt, COUNT(1) AS cnt 
    FROM [myproj:mydataset.mytable] 
    WHERE bool_property=FALSE 
    AND entity_id=5667423172689920 
    AND DATEDIFF(CURRENT_DATE(), data_timestamp) <= 7
    GROUP BY dt
    

答案 1 :(得分:1)

不幸的遗留SQL不允许GROUP BY表达式,只能通过列名称。但是使用标准SQL,您可以这样做:

SELECT * FROM myproj.mydataset.mytable
WHERE 
    bool_property=False AND 
    entity_id=5667423172689920 AND
    DATE_DIFF(CURRENT_DATE(), EXTRACT(DATE FROM data_timestamp), DAY) <= 7
GROUP BY EXTRACT(DATE FROM data_timestamp)