有没有办法通过以下方式在Google BigQuery中创建临时表:
SELECT * INTO <temp table>
FROM <table name>
我们可以在SQL中创建吗?
对于复杂查询,我需要创建临时表来存储我的数据。
答案 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 ;