Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google bigquery 如何在Google BigQuery中创建临时表_Google Bigquery - Fatal编程技术网

Google bigquery 如何在Google BigQuery中创建临时表

Google bigquery 如何在Google BigQuery中创建临时表,google-bigquery,Google Bigquery,有没有办法通过以下方式在Google BigQuery中创建临时表: SELECT * INTO <temp table> FROM <table name> 与我们可以在SQL中创建的相同 对于复杂的查询,我需要创建临时表来存储我的数据。2019更新-现在使用BigQuery Beta版,正式支持创建临时表。见公开文件 2018年更新: bigquery中的每个查询都会创建一个包含结果的临时表。临时,除非您为目标表指定名称,否则您将控制其生命周期 使用api查看临

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

SELECT * INTO <temp table> 
FROM <table name> 
与我们可以在SQL中创建的相同

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

2019更新-现在使用BigQuery Beta版,正式支持创建临时表。见公开文件

2018年更新:

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

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

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"
请参阅此处的文档:

可以在中创建临时表。看

谷歌给出了一个例子:

WITH subQ1 AS (SELECT SchoolID FROM Roster),
     subQ2 AS (SELECT OpponentID FROM PlayerStats)
SELECT * FROM subQ1
UNION ALL
SELECT * FROM subQ2;
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
文件: 2019年更新-现在BigQuery测试版正式支持创建临时表。见公开文件

创建临时表示例 x INT64, y字串 ; 插入示例中 值5,‘foo’; 插入示例中 值6,‘bar’; 挑选* 以身作则;
要创建临时表,请在使用CREATETABLE语句时使用TEMP或TEMPORATE关键字,并且CREATETEMPORATTABLE的使用需要脚本,因此最好从begin语句开始

开始 创建临时表作为从何处选择*;
结束

在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 

我不想通过API创建临时表。我想在浏览器工具中查询时通过查询本身创建它。同样的事情。如果查看web ui上的查询历史记录,您将看到每个过去查询得到的临时表名。您还可以指定目标表,请参见ui中的“启用选项”按钮;这可以让您为查询的目标表指定名称。无法执行SELECT INTO将结果写入表中。我们可能会在JDBC驱动程序中添加一些内容。因为我们使用的是自定义查询解析器,所以可以在选择中创建INSERT。。。我们需要做的就是设置API参数,将其存储到新表中,而不是临时表中。我们现在很忙,但如果我们有时间,这是一种改进JDBC驱动程序的方法。可以在以下位置找到:您可以从SQL中为它命名吗?或者您只能通过API来完成吗?更新:现在您可以在查询中创建一个临时表。这个答案虽然可能对某些用例有用,但并没有解决最初的问题。WITH不创建临时表-它是一个命名的子查询。大查询不会将结果具体化为表。每次引用命名的子查询时,都会再次执行它,这可能是原始问题试图避免的。请参阅答案中的WITH链接以进行确认。此答案错误,WITH不会创建临时表。无论何时调用WITH表,都会运行查询。这甚至可以在BigQueryThis中执行。它创建了一个表,但不是一个临时表。From-输入bq query命令并指定-destination_table标志,以根据查询结果创建一个永久表。请记住,临时表仅在其所在脚本的生命周期内有效,因此,上面使用BEGIN/END的技巧没有多大意义。剩下的已经在云的答案里了!我还注意到,如果要使用createtemporarytable,需要在BigQuery控制台中出现一个脚本错误,那么可以确保高亮显示多个语句,并在每个语句末尾加上分号。显然,这符合剧本的要求。