首页 > 解决方案 > BigQuery - 从使用复杂 CTE 的查询结果创建表?

问题描述

我有一个多 CTE 查询,其中包含运行过于频繁的大型基础数据集。我可以只创建一个查询结果表供人们使用,并每天刷新。但是我迷失了创建这样一个表的语法。

CREATE OR REPLACE TABLE dataset.target_table
AS

with cte_one as (
    select 
      stuff
    from big.table
),

...

cte_five as (
    select 
      stuff
    from other_big.table
),

final as (
    select * 
    from cte_five left join cte_x on cte_five.id = cte_x.id
)

SELECT
*
FROM final

基本上是我所拥有的。这实际上甚至创建了具有正确架构的目标表,但不插入任何行......任何提示?谢谢

标签: sqlgoogle-bigqueryetlcommon-table-expression

解决方案


如果你真的想一步完成,你可以做 SELECT INTO...

with cte_one as (
    select 
      stuff
    from big.table
),

...

cte_five as (
    select 
      stuff
    from other_big.table
),

final as (
    select * 
    from cte_five left join cte_x on cte_five.id = cte_x.id
)

SELECT
*
INTO dataset.target_table
FROM final

也就是说,由于这不仅仅是一次性需求,我建议最初创建一次登陆表,然后安排每日刷新和填充 (TRUNCATE + INSERT) 以更新数据。它可以让您更明确地控制数据类型,还可以让您使用持久对象,而不是每天从头开始构建的东西。


推荐阅读