You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python BigQuery Client批量更新Big Query分区过期时间?

可以用Python BigQuery Client实现全流程自动化

完全可以通过Python BigQuery Client实现批量更新分区过期规则并清理旧数据,无需手动逐个处理数据集。以下是具体实现思路和代码示例:

核心步骤

  • 遍历GCP项目下所有数据集及其中的表
  • 筛选出分区表(未设置过期时间的旧表)
  • 批量更新分区表的过期规则
  • 可选:清理已存在的超期旧分区数据

代码示例

from google.cloud import bigquery
from datetime import timedelta

# 初始化BigQuery客户端
client = bigquery.Client()

# 设置分区过期时间(比如90天,转成毫秒)
expiration_ms = int(timedelta(days=90).total_seconds() * 1000)

# 遍历所有数据集
for dataset in client.list_datasets():
    dataset_ref = client.dataset(dataset.dataset_id)
    # 遍历数据集下所有表
    for table in client.list_tables(dataset_ref):
        table_ref = dataset_ref.table(table.table_id)
        table_obj = client.get_table(table_ref)
        
        # 只处理有时间分区但未设置过期的表
        if table_obj.time_partitioning is not None and table_obj.time_partitioning.expiration_ms is None:
            # 更新分区过期规则
            table_obj.time_partitioning.expiration_ms = expiration_ms
            client.update_table(table_obj, ["time_partitioning"])
            print(f"已更新表 {table_obj.full_table_id} 的分区过期时间为90天")
            
            # 可选:删除已存在的超期旧分区数据
            delete_query = f"""
                DELETE FROM `{table_obj.full_table_id}`
                WHERE DATE(_PARTITIONTIME) < DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY)
            """
            query_job = client.query(delete_query)
            query_job.result()  # 等待查询执行完成
            print(f"已清理表 {table_obj.full_table_id} 中超过90天的旧分区数据")

注意事项

  • 确保运行脚本的服务账号拥有bigquery.tables.update和bigquery.jobs.create权限
  • 新设置的分区过期规则仅对未来创建的分区生效,已存在的旧分区需要通过DELETE语句手动清理
  • 可以根据需求调整过期天数,或者添加过滤条件只处理特定数据集/表

内容的提问来源于stack exchange,提问作者Vaibhav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 20:33:15