[英]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.