如何检查 bigquery day 分区是否为空

x97*_*ore 4 google-bigquery

要检查表是否存在,我们可以使用这个查询,它非常便宜:

#legacySql
SELECT last_modified_time FROM {dataset}.__TABLES__ WHERE table_id='{table}'
LIMIT 1
Run Code Online (Sandbox Code Playgroud)

是否有任何类似的廉价查询来检查分区是否为空?

据我了解,我可以在 where 子句中使用带有 _PARTITIONTIME 的选择,但无论限制子句如何,它最终都会处理分区中的所有数据(如果存在)。我必须检查是否存在多个分区,并且必须采用查询形式,而不是 API 请求。

我有可能运行多次的 cronjobs,但我只想在分区为空时才将数据写入分区。

x97*_*ore 5

#legacySql
    SELECT 
      partition_id
    FROM 
      [DATASET.TABLE$__PARTITIONS_SUMMARY__]
    WHERE 
      partition_id = "20171224"
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅:https://cloud.google.com/bigquery/docs/querying-partitioned-tables


Mik*_*ant 5

下面的查询成本低至 $0,因此您可以安全地使用此方法来识别任何分区中的行数

#standardSQL
SELECT _PARTITIONTIME AS pt, COUNT(1) cnt
FROM `yourproject.yourdataset.yourpartitionedtable`
GROUP BY pt  
HAVING pt = TIMESTAMP('2016-12-11')   
Run Code Online (Sandbox Code Playgroud)

另一个选项如下 - 如果分区为空,它实际上返回 0,否则返回分区中的行数

#standardSQL
SELECT IFNULL((
    SELECT COUNT(1) FROM `yourproject.yourdataset.yourpartitionedtable`
    GROUP BY _PARTITIONTIME HAVING _PARTITIONTIME = TIMESTAMP('2016-11-11')
  ), 0) cnt
Run Code Online (Sandbox Code Playgroud)