【问题标题】:Google BigQuery: how to create a new column with SQLGoogle BigQuery:如何使用 SQL 创建新列
【发布时间】:2017-10-23 04:42:53
【问题描述】:

我想在不使用旧版 SQL 的情况下向现有表中添加一列。

基本的 SQL 语法是:

ALTER TABLE table_name
ADD column_name datatype;

我为 Google BigQuery 格式化了查询:

ALTER TABLE `projectID.datasetID.fooTable`
ADD (barColumn date);

但语法不正确并出现此错误:

Error: Syntax error: Expected "." or keyword SET but got identifier "ADD" at [1:63]

那么如何为 Google BigQuery 正确格式化 SQL?

【问题讨论】:

    标签: sql google-bigquery


    【解决方案1】:

    BigQuery 不支持 ALTER TABLE 或其他 DDL 语句,但您可以考虑使用 submitting a feature request。目前,您需要在 BigQuery UI 中打开表,然后使用“添加新字段”按钮添加列,或者如果您使用 API,则可以使用 tables.update

    【讨论】:

    • 我已经预料到了这个答案,但我想检查一下我是否正确。谢谢埃利奥特。
    • 使用API​​添加列的说明可以在页面Modifying table schemas找到。
    【解决方案2】:

    我的旧表

    a,b,c
    1,2,3
    2,3,4

    CREATE TABLE IF NOT EXISTS my_dataset.my_new_table    
    AS    
    SELECT a,b,c,     
    "my_string" AS d, current_timestamp() as timestamp     
    FROM my_dataset.my_old_table   
    

    my_new_table

    a,b,c,d,时间戳
    1,2,3,my_string,2020-04-22 17:09:42.987987 UTC
    2,3,4,my_string,2020-04-22 17:09:42.987987 UTC

    架构:
    一:整数
    b: 整数
    c: 整数
    d: 字符串
    时间戳:时间戳

    我希望一切都清楚:) 有了这个,您可以轻松地将新列添加到现有表中,并指定数据类型。之后,如有必要,您可以删除旧表。 :)

    【讨论】:

    • 复制整个表只是为了添加一列是可行的,但有点矫枉过正。最后,bigquery 是一种列存储,因此添加额外的列应该非常容易。然而,缺少 alter-table 语句使这个解决方案成为一个很好的解决方法。
    【解决方案3】:

    ALTER TABLE ADD COLUMN 的支持已于 2020 年 10 月 14 日发布,BigQuery Release Notes

    因此,最初提议的声明现在应该只需稍作修改即可工作:

    ALTER TABLE `projectID.datasetID.fooTable`
    ADD COLUMN barColumn DATE;
    

    【讨论】:

    • 我建议将其更改为接受的答案,因为更新的发行说明包含此功能,并且上面的示例确实有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 2021-12-07
    相关资源
    最近更新 更多