是否有可能写一个BQ查询从外部表读取并写入多个表?



关于以下问题,我需要您的专家意见,非常感谢您的帮助。

查询:我有一个外部表(在GCS中),我需要每5分钟读取这个表(300GB),并在该数据上运行多个过滤器/转换/聚合,并将结果插入到8个不同的表中。

例子:

INSERT INTO ds。Native_Cube1 (col1,col2, sumagg) SELECTcol1,col2,sum(col25) as sumagg FROM ds。External_Table哪里CAST(SUBSTR(_FILE_NAME,43,12) AS INT64)>123456 GROUP BY sumagg

INSERT INTO ds。Native_Cube2 (col1,col2, col3, meancol5) SELECTcol1,col2,col3,mean(col5) as meancol5 FROM ds。External_Table哪里CAST(SUBSTR(_FILE_NAME,43,12) AS INT64)>123456 AND col3=http GROUP由meancol5

…8 .

使用这种方法,我最终会多次读取输入数据并为此付费。我只想读取一次输入数据,并适当地填充这些native_cubeN表。

所以问题是,是否有可能避免这些额外的读取和成本?如果是,请建议如何实现。

谢谢你听我说。

一个查询只能更新一个表,所以也许您可以尝试减少每个查询的读取成本。似乎你所有的查询都对CAST(SUBSTR(_FILE_NAME,43,12) AS INT64)有一个过滤器。降低成本的一种可能方法是将外部表导入到本地表中,在值为CAST(SUBSTR(_FILE_NAME,43,12) AS INT64)的列上进行分区。然后,查询将从这个本机表中读取数据,并在分区列上使用过滤器。查询将只读取匹配的分区,而不是整个表。

相关内容

  • 没有找到相关文章

最新更新