在 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”)