是否有元数据表来检查 BigQuery 中的表是否已分区?

Pru*_*nna 6 google-bigquery

我有以下要求。

我们在 BQ 中有 1400 个基于特定功能分组的分表。这些单独的分片表中的最大值也为 DAY 进行了时间分区。

较小的表不按时间分区。

我试图通过对所有分表执行 UNION 并在 _partitiontime 上编写 WHERE 过滤条件,在 BigQuery 中动态创建视图。

但问题是可能存在未按时间分区的较小表,查询失败。

每天创建的表更多,我无法满足于静态排除解决方案,因为这需要手动维护带有表名等的文件(Apache Beam + BQ 使用传入的数据并为较新的数据创建新的分片表无需人工干预的功能组。)

我试图通过使用bq实用程序连接到 BQ 超过 1000 次以检查表是否已时间分区来排除非时间分区表。

bq show --format=prettyjson 并检查该timepartitioning type字段。

这个很慢,30多分钟。

我试过__TABLES_SUMMARY__,但它没有分区信息。

我也检查过 SELECT partition_id from [mydataset.table1$__PARTITIONS_SUMMARY__];,但如果表已经分区,这有效。

Gul*_*han 11

您可以在 BQ 中用标准 SQL 编写以下查询来获取信息

SELECT * 
  FROM `project_id.dataset_name.INFORMATION_SCHEMA.COLUMNS`
  WHERE TABLE_NAME = Table_Name 
    AND is_partitioning_column = "YES"
Run Code Online (Sandbox Code Playgroud)


Ada*_*ick 1

不幸的是,没有办法动态地确定这一点。

作为解决方法,我建议将分区表和非分区表保留在不同的数据集中,或者在其名称中包含有关表是否分区的信息。

您还可以维护已知已分区(或未分区,如果更容易维护)的表前缀列表。

您还可以在 BigQuery 的公共问题跟踪器上提出功能请求:https://issuetracker.google.com/issues/new? component=187149&template=0