基于存储过程创建视图或使用其结果创建表



我写了一些代码,我想基于它创建视图或用它的结果创建表。问题是我完全不知道该怎么做。视图对我来说将是更好的解决方案,因为它将呈现实际数据,否则我将不得不每天插入此过程的新结果。困难还在于我不知道列的数量,这个值可以改变。它基于我创建的视图。下面是我的代码:


create or replace procedure my_dataset.my_procedure(date_from string)
BEGIN 
declareTag_col string;
declare time string;
set time = data_od;
SET Tag_col = (
SELECT 
CONCAT('("', STRING_AGG(DISTINCT REPLACE(REPLACE(REPLACE(tag, "=", "_"), ":", "_"),"-",""), '", "'), '")')
FROM `my_dataset.my_view`
);

EXECUTE IMMEDIATE format("""
select * from
(
SELECT
REPLACE(REPLACE(tag, "=", "_"), ":", "_") AS tag,
timestamp_seconds(600 * div(unix_seconds(timestamp)+300,600)) AS rounded_timestamp,
AVG(value) AS value
FROM `my_dataset.my_datatable`
WHERE tag IN (select tag from `my_dataset.my_view`) AND timestamp >= %s 
GROUP BY tag, rounded_timestamp
ORDER BY rounded_timestamp
)
PIVOT(AVG(value) FOR tag IN %s)
""",time,Tag_col );
END

正如在这个stackoverflow线程中提到的,DDL和DML查询不能保存为视图。您提供的SQL脚本将抛出错误Only SELECT statements are allowed in view queries,因为它不是一个有效的视图。如果您想保存任意查询以供将来使用,则可以使用已保存的查询。

对于您的另一个问题,您可以通过单击save results>保存为BigQuery表。更多信息请参考

相关内容

  • 没有找到相关文章

最新更新