簡體   English   中英

如何檢查 bigquery 日分區是否為空

[英]How to check if a bigquery day partition is empty

要檢查一個表是否存在,我們可以使用這個查詢,它非常便宜:

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

是否有任何類似的廉價查詢來檢查分區是否為空?

據我了解,我可以在 where 子句中使用 select 和 _PARTITIONTIME,但不管 limit 子句如何,它最終都會處理分區中的所有數據(如果存在)。 我必須檢查是否存在許多分區,它必須采用查詢形式,而不是 API 請求。

我有可能運行多次的 cronjobs,但我只想在分區為空時將數據寫入分區。

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

請參閱以了解更多詳細信息: https : //cloud.google.com/bigquery/docs/querying-partitioned-tables

下面的查詢便宜至$ 0,因此您可以安全地使用此方法來識別任何分區中的行數

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

下面是另一個選項-如果分區為空,則實際上返回0,否則返回分區中的行數

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

也許您可以發出查詢空運行來估計查詢讀取的字節數,而無需檢索真實數據。 您無需為試運行付費。

您可以使用以下方法對查詢作業執行空運行:

  • bq命令行工具中帶有query命令的--dry_run標志
  • 使用 API 或客戶端庫時作業配置中的dryRun參數

詳見文檔: https://cloud.google.com/bigquery/docs/dry-run-queries#python

這是我為 python 代碼所做的:

def dry_query(query: str) -> int:
    job_config = bigquery.QueryJobConfig(dry_run=True, use_query_cache=False)
    query_job = client.query(query, job_config=job_config)

    return query_job.total_bytes_processed

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM