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

问题描述 投票:0回答:2

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

#legacySql
SELECT last_modified_time FROM {dataset}.__TABLES__ WHERE table_id='{table}'
LIMIT 1

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

据我所知,我可以在where子句中使用带有_PARTITIONTIME的select,但它最终将处理分区中的所有数据(如果存在),而不管limit子句如何。我要检查是否存在许多分区,它必须是查询形式而不是API请求。

我的cronjobs可能会运行多次,但我想将数据写入分区,只有它是空的。

google-bigquery
2个回答
2
投票

以下查询与$ 0一样便宜,因此您可以安全地使用此方法来识别任何分区中的行数

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

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

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

2
投票
#legacySql
    SELECT 
      partition_id
    FROM 
      [DATASET.TABLE$__PARTITIONS_SUMMARY__]
    WHERE 
      partition_id = "20171224"

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

© www.soinside.com 2019 - 2024. All rights reserved.