有没有一种方法可以使用Java驱动程序为大查询创建基于非摄取时间的分区表?

时间:2019-07-10 21:50:03

标签: java google-bigquery

我一直在寻找,甚至使用最新的大型查询Java驱动程序:

<dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-bigquery</artifactId>
    <version>1.81.0</version>
</dependency>

似乎只提供了基于加载/插入时间进行分区的选项。

TimePartitioning.of(Type.DAY);

是否有另一个我应该用于基于特定DATE或TIMESTAMP列进行分区的选项或类?还是Java驱动程序不支持此功能?

2 个答案:

答案 0 :(得分:0)

对于Java似乎是不可能的,但对于Python and Go客户端库,DDL语句,UI等来说,似乎是可能的。

答案 1 :(得分:0)

是的,根据客户端文档it is supported

这里是一个例子:

BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

String my_field = "my_field";
Schema schema = Schema.of(Field.of(my_field, LegacySQLTypeName.TIMESTAMP));

// Here is where we set the field we want to be used for the partition
TimePartitioning timePartitioning = TimePartitioning.newBuilder(TimePartitioning.Type.DAY)
                                                      .setField(my_field)
                                                      .build();

TableDefinition tableDef = StandardTableDefinition.newBuilder()
                                          .setSchema(schema)
                                          .setTimePartitioning(timePartitioning)
                                          .build();

TableInfo tableInfo = TableInfo.newBuilder(TableId.of("dataset", "table"), tableDef).build();

Table table = bigquery.create(tableInfo);