【问题标题】:Format Firestore timestamps in BigQuery SQL for Data Studio在 BigQuery SQL for Data Studio 中格式化 Firestore 时间戳
【发布时间】: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}

标签: sql google-cloud-firestore google-bigquery google-data-studio


【解决方案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。
猜你喜欢
  • 1970-01-01
  • 2020-12-26
  • 1970-01-01
  • 2020-03-21
  • 1970-01-01
  • 2021-12-21
  • 2011-01-19
  • 1970-01-01
相关资源
最近更新 更多