简体   繁体   English

我可以在 BigQuery 中使用 CALL 创建表或从存储过程结果插入数据吗?

[英]Can i create table or insert data from stored procedure results use CALL in BigQuery?

I want use stored procedure results how data to create table or insert.我想使用存储过程结果如何创建表或插入数据。 But my example isn't working但我的例子不起作用

DECLARE startDate, endDate STRING;
SET startDate = '20200801';
SET endDate = '20200802';

CALL `myproject.dataset.procedure1`(startDate, endDate);

CREATE OR REPLACE TABLE `myproject.dataset.table`
PARTITION BY date

Your SQL implies that procedure returns an implicit dataset which could be used in later CREATE TABLE, but this is not how BigQuery store procedure works.您的 SQL 意味着该过程返回一个隐式数据集,可以在以后的 CREATE TABLE 中使用,但这不是 BigQuery 存储过程的工作方式。

One way is to move the CREATE TABLE to inside the procedure一种方法是将 CREATE TABLE 移动到过程内部

DECLARE startDate, endDate STRING;
SET startDate = '20200801';
SET endDate = '20200802';

CREATE PROCEDURE `myproject.dataset.procedure1`(startDate STRING, endDate STRING)
BEGIN
  CREATE OR REPLACE TABLE `myproject.dataset.table`
  AS SELECT ... FROM ... WHERE date >= startDate AND date <= endDate -- just my guess
  PARTITION BY date 
END;
CALL `myproject.dataset.procedure1`(startDate, endDate);

If for some reason you don't want CREATE TABLE in procedure body, alternatively, you may use a temp table to bring the resultset out of the procedure, like如果出于某种原因您不想在过程主体中创建表,或者,您可以使用临时表将结果集带出过程,例如

DECLARE startDate, endDate STRING;
SET startDate = '20200801';
SET endDate = '20200802';

CREATE PROCEDURE `myproject.dataset.procedure1`(startDate STRING, endDate STRING)
BEGIN
  CREATE TEMP TABLE myQueryResults
  AS SELECT ... FROM ... WHERE date >= startDate AND date <= endDate -- just my guess
  PARTITION BY date 
END;
CALL `myproject.dataset.procedure1`(startDate, endDate);

CREATE OR REPLACE TABLE `myproject.dataset.table`
AS SELECT * FROM myQueryResults
PARTITION BY date

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM