尝试在单个查询中创建多个临时表

时间:2018-04-23 22:11:43

标签: sql google-bigquery temp-tables

我想在单个BigQuery查询中创建3-4个单独的临时表(所有表都基于不同的数据源),然后在查询中以各种方式将它们连接起来。

我试图通过使用多个WITH语句来执行此操作,但是如果您没有嵌套它们,您似乎只能在查询中使用一个WITH语句。每次我尝试过,我都会收到一条错误消息,说明了一个' SELECT'声明是预期的。

我错过了什么吗?如果可能的话,我宁愿在一个查询中完成所有操作。

3 个答案:

答案 0 :(得分:4)

我不知道你的意思是什么&临时表"但我怀疑你的意思是普通的表格表达式(CTE)。

当然,您可以查询多个CTE。你只需要正确的语法:

with t1 as (
      select . . .
     ),
     t2 as (
      select . . .
     ),
     t3 as (
      select . . .
     )
select *
from t1 cross join t2 cross join t3;

答案 1 :(得分:0)

bq mk --table --expiration [INTEGER] --description "[DESCRIPTION]" 
--label [KEY:VALUE, KEY:VALUE] [PROJECT_ID]:[DATASET].[TABLE] 

到期日期会使您的桌子成为临时的。您可以使用“bq mk”创建一个表,但您可以在脚本中使用它。

您可以使用DDL,但此处您也只能创建一个表。

{CREATE TABLE | CREATE TABLE IF NOT EXISTS | CREATE OR REPLACE TABLE} 
table_name [( column_name column_schema[, ...] )] 
[PARTITION BY partition_expression] [OPTIONS(options_clause[, ...])] 
[AS query_statement]

如果通过“临时表”表示"subqueries"这是您必须使用的语法:

WITH
   subQ1 AS (
   SELECT * FROM Roster             
   WHERE SchoolID = 52), 
   subQ2 AS (
   SELECT SchoolID FROM subQ1) 
   SELECT DISTINCT * FROM subQ2;

答案 2 :(得分:0)

您应该能够使用通用表表达式而不会出现问题。但是,如果您的查询中包含大量的公用表表达式/子查询,则可能会遇到BQ中的资源问题,特别是有关BQ创建执行计划的能力。临时表在这些情况下对我有所帮助,但是可能会有更好的做法。

创建温度表T1 AS( 与 X as(查询), Y为(查询), Z为(查询) 选择*从 (combination_of_above_queries) );

创建温度表T2 AS( 与 一个as(查询), B为(查询), C as(查询) 选择*从 (combination_of_above_queries) );

创建表new_table AS( 选择 * FROM(T1和T2的组合) )

抱歉,我只是碰巧遇到了这个问题,想分享对我有帮助的内容...希望对您有帮助。

https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#temporary_tables