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

标签 sql google-bigquery google-cloud-platform

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

Error: (L6:28): expression STRFTIME_UTC_USEC([data_timestamp], '%Y-%m-%d') in GROUP BY is invalid

来自大查询。 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() 函数会失败。

有任何帮助或提示吗?谢谢!

最佳答案

你的查询有两个问题

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

因此您的查询可能如下所示:

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

关于sql - 无法从 BigQuery 中的时间戳中提取日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39197941/

相关文章:

c# - lambda linq 不加入 c#

sql - 无法从表格中获取正确的日期

google-bigquery - 从 Dataflow 进行流式传输时从 BigQuery 删除数据

sql - Google BigQuery 中的自连接与子查询

amazon-web-services - Kubernetes 加密配置

c - 为什么 Google 的 TrueTime API 难以复制?

mysql - 在SQL中获取以前的记录列值

sql - 在一个元素中返回 SQL Server 中的逗号分隔值

go - 删除集群时删除所有关联的永久磁盘

sql - SQLite3 中的内部连接