如何在BigQuery中通过单次查询实现多表插入(避免重复查大表)
可行实现方案
方案1:使用INSERT ALL语句(推荐)
BigQuery支持INSERT ALL语法,能在单次扫描大表后,将符合不同条件的数据分别插入到多个目标表,完全满足仅查询一次BIG_TABLE的需求。
示例代码:
INSERT ALL WHEN row1 = 'a' THEN INTO table1 (row1) VALUES (row1) WHEN row1 = 'b' THEN INTO table2 (row1) VALUES (row1) SELECT row1 FROM BIG_TABLE;
该语句会一次性扫描BIG_TABLE,根据row1的值自动分流插入对应表,无需重复读取大表,性能最优。
方案2:使用BigQuery脚本+临时数组
如果需要处理更复杂的业务逻辑,可以先将大表数据存入临时数组,再从数组筛选数据插入目标表,同样仅扫描一次大表:
示例代码:
DECLARE temp_data ARRAY<STRUCT<row1 STRING>>; -- 一次性读取大表数据存入数组 SET temp_data = (SELECT ARRAY_AGG(t) FROM (SELECT row1 FROM BIG_TABLE) t); -- 分别插入到两个表 INSERT INTO table1 (row1) SELECT row1 FROM UNNEST(temp_data) WHERE row1 = 'a'; INSERT INTO table2 (row1) SELECT row1 FROM UNNEST(temp_data) WHERE row1 = 'b';
注意:此方案适合数据量不大的场景,若BIG_TABLE数据量极大,数组可能超出BigQuery内存限制,此时优先选择方案1。
内容的提问来源于stack exchange,提问作者extrawhitecitrus
相关产品推荐
相关产品推荐

