bigquery - 自定义字段上的分区 - 仅适用于标准 SQL?

Posted

技术标签:

【中文标题】bigquery - 自定义字段上的分区 - 仅适用于标准 SQL?【英文标题】:bigquery - partition on custom fields -- only for standardSQL? 【发布时间】:2018-02-15 11:16:46 【问题描述】:

我刚刚看到我可以在 BigQuery 中创建一个custom partitioned 表。含义由任何timestamp 列划分。

但是,新创建的表只能从StandardSQL访问和查询!

有没有办法从旧版查询新表?

【问题讨论】:

【参考方案1】:

就在documentation 的开头说限制您没有旧版 SQL 支持。

分区表受到以下限制:

分区列必须是标量 DATE 或 TIMESTAMP 柱子。虽然列的模式可能是 REQUIRED 或 NULLABLE,但它 不能重复(基于数组)。此外,分区 列必须是***字段。您不能使用来自 RECORD (STRUCT) 作为分区列。 您不能使用旧版 SQL 查询分区表或将查询结果写入分区表 表。 查询分区表时不能使用通配符表 表。 您不能使用 DML 语句来修改分区表。

【讨论】:

路线图上是否有旧版支持?您可以将有关缺少对 Legacy 的支持的信息添加到 UI 中,例如在 ? at Partition 字段中。 没有提到考虑,所以只是猜测。 没有计划支持旧版 SQL。我们认为投资更多的新功能比支持将被弃用的旧 SQL 更好。新功能通常只支持标准 SQL。【参考方案2】:

您只需将 LegacySql 声明为false,例如:

var projectId = 'xxxxxxx';
    
var request = 
  query: 'select * from project.database.table',
  useLegacySql: false
;
var queryResults = BigQuery.Jobs.query(request, projectId);

【讨论】:

以上是关于bigquery - 自定义字段上的分区 - 仅适用于标准 SQL?的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 表如何与分区和集群字段一起使用?

尚不支持 BigQuery、非分区表上的通配符表和基于字段的分区表

有没有办法在 BigQuery 表上创建自定义日分区?

使用自定义目标接收器将日志导出到 BigQuery(表分区)

如果标准 SQL 不提供 _PARTITIONTIME 字段,我如何在 BigQuery 中查询流缓冲区

分区 BigQuery 表,从 AVRO 加载