如何在Google BigQuery中创建临时表

时间:2013-12-19 05:19:10

标签: google-bigquery

有没有办法通过以下方式在Google BigQuery中创建临时表:

SELECT * INTO <temp table> 
FROM <table name> 

我们可以在SQL中创建吗?

对于复杂查询,我需要创建临时表来存储我的数据。

7 个答案:

答案 0 :(得分:8)

可以在"New Standard SQL"中使用WITH创建临时表。请参阅WITH clause

Google提供的示例:

WITH subQ1 AS (SELECT SchoolID FROM Roster),
     subQ2 AS (SELECT OpponentID FROM PlayerStats)
SELECT * FROM subQ1
UNION ALL
SELECT * FROM subQ2;

答案 1 :(得分:7)

2018更新 - 使用DDL的明确答案

使用BigQuery的DDL支持,您可以从查询结果中创建一个表 - 并在创建时指定其到期时间。例如,3天:

#standardSQL
CREATE TABLE `fh-bigquery.public_dump.vtemp`
OPTIONS(
  expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 3 DAY)
) AS
SELECT corpus, COUNT(*) c
FROM `bigquery-public-data.samples.shakespeare`
GROUP BY corpus

答案 2 :(得分:5)

2018更新:https://stackoverflow.com/a/50227484/132438

bigquery中的每个查询都会创建一个包含结果的临时表。临时除非您为目标表提供名称,否则您可以控制其生命周期。

使用api查看临时表名,或在查询时命名表。

答案 3 :(得分:4)

获取

的SQL示例
SELECT name,count FROM mydataset.babynames 
  WHERE gender = 'M' ORDER BY count DESC LIMIT 6 INTO mydataset.happyhalloween;

最简单的命令行等效项是

bq query --destination_table=mydataset.happyhalloween \ 
"SELECT name,count FROM mydataset.babynames WHERE gender = 'M' \
ORDER BY count DESC LIMIT 6"

请参阅此处的文档: https://cloud.google.com/bigquery/bq-command-line-tool#createtablequery

答案 4 :(得分:3)

在GCP bigquery中创建临时表的示例

CREATE TABLE  `project_ID_XXXX.Sales.superStore2011` 
OPTIONS(
  expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
) AS
SELECT 
  Product_Name,Product_Category, SUM(profit) Total_Profit,  FORMAT_DATE("%Y",Order_Date) AS Year
FROM 
  `project_ID_XXXX.Sales.superStore` 
WHERE
  FORMAT_DATE("%Y",Order_Date)="2011"
GROUP BY 
  Product_Name,Product_Category,Order_Date
ORDER BY 
   Year, Total_Profit DESC
LIMIT 5 

答案 5 :(得分:1)

2019年更新-使用BigQuery scripting(现已测试版),正式支持 CREATE TEMP TABLE 。请参阅公共文档here

CREATE TEMP TABLE Example
(
  x INT64,
  y STRING
);

INSERT INTO Example
VALUES (5, 'foo');

INSERT INTO Example
VALUES (6, 'bar');

SELECT *
FROM Example;

答案 6 :(得分:0)

要创建一个临时表,请在使用CREATE TABLE语句时使用TEMP或TEMPORARY关键字,而使用CREATE TEMPORARY TABLE则需要一个脚本,因此最好从begin语句开始。

Begin CREATE TEMP TABLE <table_name> as select * from <table_name> where <condition>; End ;