我如何在 Google Bigquery 中创建按日期(每年)分区的 table
how do i create a table partitioned by date(yearly) in Google Bigquery
这是我的数据样本
{"userName":"sampleUserName","DateCreated":"1519302159.248"}
这就是我尝试创建 table
的方式
CREATE TABLE dataSet.myTableName (userName string, DateCreated DATE, email string)
PARTITION BY DateCreated
OPTIONS(
description="a table partitioned by DateCreated"
)
但是当我尝试从 newline_delimited_json 的命令行加载数据时,出现此错误
Invalid schema update. Field DateCreated has changed type from DATE to TIMESTAMP
我认为问题是 DateCreated 字段是 DATE 类型,我不知道如何使它成为 TIMESTAMP,文档说要使用 partition_expression,我该怎么做,目标是按日期(在我的例子中按 DateCreated)创建分区 table,例如按年分区。我如何改进我的查询以实现这一目标,任何建议或指向示例或文档都会很棒。
您可以使用按时间戳分区的 CREATE TABLE
语句:
CREATE TABLE dataSet.myTableName
(
userName STRING,
DateCreated TIMESTAMP,
email STRING
)
PARTITION BY DATE(DateCreated)
OPTIONS(
description="a table partitioned by DateCreated"
)
PARTITION BY DATE(<timestamp_column>)
— partitions the table using the date of the TIMESTAMP
column
如果打算按年份划分,您有两种选择:
- 每当您插入 table 时,都会将时间戳截断到年初。
- 只需插入时间戳而不截断,但是当您查询 table 时,按年初过滤,例如
WHERE _PARTITIONTIME >= '2018-01-01'
或 WHERE _PARTITIONTIME >= '2016-01-01' AND _PARTITIONTIME < '2018-01-01'
.
这是我的数据样本
{"userName":"sampleUserName","DateCreated":"1519302159.248"}
这就是我尝试创建 table
的方式CREATE TABLE dataSet.myTableName (userName string, DateCreated DATE, email string)
PARTITION BY DateCreated
OPTIONS(
description="a table partitioned by DateCreated"
)
但是当我尝试从 newline_delimited_json 的命令行加载数据时,出现此错误
Invalid schema update. Field DateCreated has changed type from DATE to TIMESTAMP
我认为问题是 DateCreated 字段是 DATE 类型,我不知道如何使它成为 TIMESTAMP,文档说要使用 partition_expression,我该怎么做,目标是按日期(在我的例子中按 DateCreated)创建分区 table,例如按年分区。我如何改进我的查询以实现这一目标,任何建议或指向示例或文档都会很棒。
您可以使用按时间戳分区的 CREATE TABLE
语句:
CREATE TABLE dataSet.myTableName
(
userName STRING,
DateCreated TIMESTAMP,
email STRING
)
PARTITION BY DATE(DateCreated)
OPTIONS(
description="a table partitioned by DateCreated"
)
PARTITION BY DATE(<timestamp_column>)
— partitions the table using the date of theTIMESTAMP
column
如果打算按年份划分,您有两种选择:
- 每当您插入 table 时,都会将时间戳截断到年初。
- 只需插入时间戳而不截断,但是当您查询 table 时,按年初过滤,例如
WHERE _PARTITIONTIME >= '2018-01-01'
或WHERE _PARTITIONTIME >= '2016-01-01' AND _PARTITIONTIME < '2018-01-01'
.