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

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

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

【问题讨论】:

    标签: sql google-bigquery


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 2014-11-11
    • 2013-01-15
    相关资源
    最近更新 更多