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

每日接收BigQuery新表,需合并至main_table,通配符用法存疑

BigQuery每日新表合并到主表的解决方案

方法1:通配符表+日期筛选直接提取当日表

新表名带YYYYMMDD后缀,用通配符tablename_*匹配所有历史表,再通过_TABLE_SUFFIX筛选当日的表。

先验证当日表数据:

SELECT *
FROM `your_dataset.tablename_*`
WHERE _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', CURRENT_DATE())

合并到主表(有主键用MERGE去重,无主键直接INSERT):

-- 有主键时用MERGE避免重复
MERGE `your_dataset.main_table` AS target
USING (
  SELECT *
  FROM `your_dataset.tablename_*`
  WHERE _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', CURRENT_DATE())
) AS source
ON target.id = source.id -- 替换成你的主键字段
WHEN NOT MATCHED THEN
  INSERT ROW

-- 无主键直接插入
INSERT INTO `your_dataset.main_table`
SELECT *
FROM `your_dataset.tablename_*`
WHERE _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', CURRENT_DATE())

方法2:通过元数据自动定位最新表

如果表名日期可能有偏差,或者需要自动找最新加载的表,查INFORMATION_SCHEMA.TABLES获取最新创建的表,再动态执行合并:

DECLARE latest_table STRING;

-- 获取最新表的完整引用路径
SET latest_table = (
  SELECT CONCAT('`your_dataset.', table_name, '`')
  FROM `your_dataset.INFORMATION_SCHEMA.TABLES`
  WHERE table_name LIKE 'tablename_%'
  ORDER BY creation_time DESC
  LIMIT 1
);

-- 动态执行合并
EXECUTE IMMEDIATE '''
  MERGE `your_dataset.main_table` AS target
  USING (SELECT * FROM ''' || latest_table || ''') AS source
  ON target.id = source.id -- 替换成你的主键字段
  WHEN NOT MATCHED THEN
    INSERT ROW
''';

关键注意点

  • 必须保证新表和main_table架构完全一致,否则会报错;如果字段有差异,要明确指定字段列表,比如INSERT INTO main_table(col1, col2) SELECT col1, col2 FROM source
  • 方法1会合并当日所有符合命名规则的表,方法2只取最新一张,根据实际加载逻辑选择
  • 可以把这些语句设置成BigQuery调度查询,每天自动执行合并操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:05:33