BigQuery 在一个查询中创建小样本表

Posted

技术标签:

【中文标题】BigQuery 在一个查询中创建小样本表【英文标题】:BigQuery create small sample table all in one query 【发布时间】:2019-09-26 16:33:17 【问题描述】:

我知道 BigQuery 现在支持 CREATE TABLE ... AS SELECT... 类似标准 SQL 的语法。但是有没有人提供一些示例数据来生成这个表的例子?

假设我想要两个名为 AB 的列。 A 值应为1,2,3,4B 值应为"Alpha", "Bravo", "Charlie", "Delta"。如何生成这样的查询并创建这样的表?我知道这对于创建大表效率不高,但想知道创建小表的推荐方法。

【问题讨论】:

【参考方案1】:

另一个不那么冗长的选项是

CREATE TABLE `PROJECT_ID.DATASET_NAME.NEW_TABLE_NAME` AS  
SELECT * FROM UNNEST([
  STRUCT(1 AS a, 'Alpha' AS b),
  (2, 'Bravo'),
  (3, 'Charlie'),
  (4, 'Delta')
])   

或者让它更容易与现有的 csv 一起重用

CREATE TABLE `PROJECT_ID.DATASET_NAME.NEW_TABLE_NAME` AS  
SELECT * FROM UNNEST([
  STRUCT(NULL AS a, '' AS b),
  (1, 'Alpha'),
  (2, 'Bravo'),
  (3, 'Charlie'),
  (4, 'Delta')
])
WHERE NOT a IS NULL

【讨论】:

如果只有一列就不行SELECT * FROM UNNEST([ STRUCT(NULL AS a), (1), (2), (3), (4) ]) WHERE NOT a IS NULL @SergeyLossev 可以通过UNNEST数组来做到这一点:SELECT * FROM UNNEST([NULL, 1, 2, 3, 4]) a WHERE NOT a IS NULL【参考方案2】:

select . . . union all怎么样?

create table t as
    select 1 as a, 'Alpha' as b union all
    select 2 as a, 'Bravo' as b union all
    select 3 as a, 'Charlie' as b union all
    select 4 as a, 'Delta' as b;

【讨论】:

是的,这很好用。谢谢!我刚刚用 PROJECT_ID.DATASET_NAME.NEW_TABLE_NAME 的 BigQuery 语法交换了 table t 另外,我发现了一个有用的工具,可以从最初以 csv 格式的数据以编程方式生成大部分查询:convertcsv.com/csv-to-sql.htm

以上是关于BigQuery 在一个查询中创建小样本表的主要内容,如果未能解决你的问题,请参考以下文章

查找在 BigQuery 中创建表的查询

在 BigQuery 中创建动态视图

如何在 Google Bigquery 中创建动态更改数据集的查询?

在 BigQuery 中创建 UDF

减去刚刚在 bigquery 中创建的列

在 bigquery 中创建数据集时,谷歌 App 引擎出错