sql - 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
基本上是我所拥有的。这实际上甚至创建了具有正确架构的目标表,但不插入任何行......任何提示?谢谢
解决方案
如果你真的想一步完成,你可以做 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) 以更新数据。它可以让您更明确地控制数据类型,还可以让您使用持久对象,而不是每天从头开始构建的东西。
推荐阅读
- javascript - Splice() 在 javascript 中无法正常工作
- python-3.x - 当我更新矩阵时,它的复制矩阵也会更新
- node.js - 我应该在哪里托管 Node-Express restAPI - 连接到 postgreSQL
- arrays - 用普通数组模拟二维数组
- reactjs - Next.js SSR 缓存使用自定义服务器
- powershell - Powershell嵌套for循环以重新启动服务
- arduino - SIM5320A,设备连接到 3G 网络但无法 ping 服务器
- kubernetes - 无法在 GKE 中使用 GPU 运行 pod:2 nvidia.com/gpu 不足错误
- c# - 统一物体如此之快,它穿过固体物质
- c# - 如果发件人可以撒谎,为什么还要检查上传文件的内容类型呢?