BigQuery 没有以毫秒为单位处理带有分区列的时间戳

Posted

技术标签:

【中文标题】BigQuery 没有以毫秒为单位处理带有分区列的时间戳【英文标题】:BigQuery not dealing with timestamp in millisecond with partition column 【发布时间】:2018-05-11 06:25:42 【问题描述】:

我有一个 unix 时间戳列,在我的 csv 文件中以毫秒为单位。现在,当我在我的 bigQuery 表中插入这些数据并查询它时,我得到了这个错误

bigQuery not supporting milliseconds timestamps

现在我想将此列设为分区列。 我有几个问题 1)即使我保存为int64,如何在这个字段上做一个分区列? 2)我想避免重复的表。

【问题讨论】:

我不是 BigQuery 专家,但according to the docs 您需要分区的日期或时间戳列。因此,只需使用您的数据填充时间戳列。 【参考方案1】:

如果您的时间戳数据以毫秒为单位,您将无法正确创建分区表。相反,您应该使用@TimBiegeleisen 所述的“TIMESTAMP 或 DATE 列”。时间戳will use microsecond precision。一旦您的列以微秒为单位,您就可以使用以下内容来创建分区表:

bq load --schema <your-timestamp-column>:TIMESTAMP,<some-other-column>:FLOAT --skip_leading_rows=1 --source_format=CSV --time_partitioning_field=<your-timestamp-column> <your-dataset>.<your-table> <your-csv-file>

(如果 csv 文件中有列名,请使用 --skip_leading_rows。)

使用标准 SQL 而非 Legacy 查询您的表,如您所见 in official docs here:

您不能使用旧版 SQL 查询分区表或将查询结果写入分区表。

【讨论】:

以上是关于BigQuery 没有以毫秒为单位处理带有分区列的时间戳的主要内容,如果未能解决你的问题,请参考以下文章

Freemarker 以毫秒为单位将时间戳转换为带有时区的日期

如何以毫秒为单位获取带有 unix 时间戳的人类可读日期? [复制]

Prometheus 和 Node 导出器(以毫秒为单位)

命令以毫秒为单位获取时间

基于 TIMESTAMP 列的分区的 BigQuery 分区到期

DateTime 以毫秒为单位的表示?