在 BigQuery SQL for Data Studio 中格式化 Firestore 时间戳

Posted

技术标签:

【中文标题】在 BigQuery SQL for Data Studio 中格式化 Firestore 时间戳【英文标题】:Format Firestore timestamps in BigQuery SQL for Data Studio 【发布时间】:2019-10-02 09:52:07 【问题描述】:

我们正在将 Firestore 数据导入 BigQuery,以便在 Data Studio 中生成报告。

以下适用于 SQL 时间戳,但不适用于 Firestore-JSON 时间戳。

SELECT 
    PARSE_TIMESTAMP('%Y%m%d', JSON_VALUE(`data`, "$.updated_at")) AS `updated_at`
FROM 
    `project.firestore_export.profiles_raw_latest`

我们的日期在名为 updated_at 的 JSON 字段中的 data 列中采用 Firestore timestamp 格式。

如何获得最终在 Data Studio 中使用的可用日期格式?

编辑:当我查询没有 JSON_VALUE 的字段时,它返回为 null,这是 Firestore 中的标准时间戳格式。当我在 BigQuery 中预览数据时,它会以 JSON 对象的形式返回:"_seconds":1569585420,"_nanoseconds":586000000

【问题讨论】:

你能分享一个例子吗? @GrahamPolley 当我查询没有JSON_VALUE 的字段时,它返回null,这是Firestore 中的标准时间戳格式。当我在 BigQuery 中预览数据时,它以 JSON 对象的形式返回:"_seconds":1569585420,"_nanoseconds":586000000 【参考方案1】:

假设您不需要亚秒级精度,那么您可以使用:

#standardSQL
with sample_table as (
  select '"_seconds":1569585420,"_nanoseconds":586000000' as ts
  )
select PARSE_DATETIME("%s", JSON_EXTRACT_SCALAR(ts, "$['_seconds']"))
from sample_table;

输出:

+---------------------+
|         f0_         |
+---------------------+
| 2019-09-27T11:57:00 |
+---------------------+

如果您确实需要更精确的时间戳,可以使用timestamp_micros()。

【讨论】:

当我使用它在WHERE 子句中使用DS 参数查询数据时,我收到一个错误WHERE PARSE_DATETIME("%s", JSON_EXTRACT_SCALAR(data, "$.created_at._seconds")) > PARSE_TIMESTAMP('%Y%m%d', @DS_START_DATE) 声明No matching signature for operator > 您无法比较 DATETIME 和 TIMESTAMP,请同时生成 PARSE_ DATETIME 或 TIMESTAMP。

以上是关于在 BigQuery SQL for Data Studio 中格式化 Firestore 时间戳的主要内容,如果未能解决你的问题,请参考以下文章

标准 SQL 查询在 BigQuery 中返回正确结果,但在 Data Studio 中不返回

BigQuery SQL语法错误FOR函数(“语法错误:预期的”)”,但在[7:18]处获得了关键字FOR)

BigQuery SQL 语法错误 FOR 函数(“语法错误:预期的”)“但在 [7:18] 获得关键字 FOR”)

数据处理 - BigQuery 与 Data Proc+BigQuery

如何通过 Spark SQL 连接 BigQuery?

BigQuery 数据类型