如何在BigQuery中创建调度查询以将新表数据追加至现有表?
如何通过调度查询自动追加BigQuery新增表数据到统一数据源?
方法1:用通配符表简化合并(新手友好)
先确保你的周表命名有统一规律(比如Oct_Wk1_2022、Oct_Wk2_2022这类包含Wk和年份的格式),然后用通配符表一次性匹配所有符合规则的周表,无需手动修改UNION ALL:
SELECT Date, Time, Category, Item, Qty, Price_Point_Name, SKU, Modifiers_Applied, Gross_Sales, Discounts, Net_Sales, Tax, Location, Customer_Name FROM `store-sales-daily-item-summary.Square_Sales_2022.*` WHERE _TABLE_SUFFIX LIKE '%Wk%_2022' -- 只匹配周表命名格式的表
配置调度与追加:
- 在BigQuery控制台创建保存查询,粘贴上述SQL
- 点击右上角「调度」,设置运行频率(比如每周一,对应你完成GCS数据导入的时间)
- 在「目标表」设置中,选择你的统一数据源表(比如
Unified_Sales) - 写入偏好选择追加到表,每次调度运行时,新增周表的数据会自动追加到目标表
方法2:动态生成SQL(适配灵活表命名)
如果你的表命名无固定前缀,或需要更精准的过滤(比如只同步最近一周新增的表),可以用INFORMATION_SCHEMA动态生成合并语句:
DECLARE sql STRING; -- 自动生成所有符合条件的表的UNION ALL语句 SET sql = ( SELECT STRING_AGG( CONCAT( 'SELECT Date, Time, Category, Item, Qty, Price_Point_Name, SKU, Modifiers_Applied, Gross_Sales, Discounts, Net_Sales, Tax, Location, Customer_Name FROM `', table_catalog, '.', table_schema, '.', table_name, '`' ), ' UNION ALL ' ) FROM `store-sales-daily-item-summary.Square_Sales_2022.INFORMATION_SCHEMA.TABLES` WHERE table_name LIKE '%Wk%_2022' -- 仅同步最近7天创建的表,避免重复同步历史数据 AND creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY) ); -- 执行动态SQL并追加到目标表 EXECUTE IMMEDIATE sql;
同样按上述步骤配置调度,选择追加模式即可。
核心注意事项
- 所有周表必须字段结构完全一致(字段名、数据类型、顺序),否则
UNION ALL会报错 - 调度时间要晚于GCS数据导入BigQuery周表的时间,确保新增表已生成
- 若担心重复数据,可给目标表添加唯一键(如
Date+Time+SKU+Location),改用MERGE语句替代直接追加,但新手优先保证周表无重复数据,用追加模式更简单
内容的提问来源于stack exchange,提问作者Sean Henry
相关产品推荐
相关产品推荐

