我想在单个BigQuery查询中创建3-4个单独的临时表(所有表都基于不同的数据源),然后在查询中以各种方式将它们连接起来。
我试图通过使用多个WITH语句来执行此操作,但是如果您没有嵌套它们,您似乎只能在查询中使用一个WITH语句。每次我尝试过,我都会收到一条错误消息,说明了一个' SELECT'声明是预期的。
我错过了什么吗?如果可能的话,我宁愿在一个查询中完成所有操作。
答案 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的组合) )
抱歉,我只是碰巧遇到了这个问题,想分享对我有帮助的内容...希望对您有帮助。