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 时间戳的人类可读日期? [复制]