【问题标题】:BigQuery: Is it posible to modify a table schema by adding a field within a recordBigQuery:是否可以通过在记录中添加字段来修改表架构
【发布时间】:2020-01-13 15:35:54
【问题描述】:

BigQuery manual 表示只能添加新字段,而不能修改现有字段。我的问题是是否可以将现有字段添加到记录字段中。 假设原始架构是:

{"type":"RECORD","name":"record","mode":"REPEATED"
 "fields":[
    {"type":"STRING","name":"f1","mode":"NULLABLE"}
  ]
}

我想添加 f2,所以架构是:

{"type":"RECORD","name":"record","mode":"REPEATED"
 "fields":[
    {"type":"STRING","name":"f1","mode":"NULLABLE"},
    {"type":"STRING","name":"f2","mode":"NULLABLE"}
  ]
}

有可能吗?

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    控制台不支持向 STRUCT 添加新字段,但您可以使用 BigQuery CLI 添加它,如您所见 here

    在控制台模式下:

    目前尚未向现有的 RECORD 列添加新的嵌套字段 受经典 BigQuery 网页界面支持。

    使用 BigQuery CLI:

    在此选项中,您可以使用 bq update project_id:dataset.table schema 创建新架构并使用它来更新表。

    您可以在链接中找到:

    1. 首先,发出带有 --schema 标志的 bq show 命令并将现有的表模式写入文件。如果您要更新的表是 在默认项目以外的项目中,将项目 ID 添加到 数据集名称采用以下格式:project_id:dataset.table。 [...]
    bq show \
    --schema \
    --format=prettyjson \
    project_id:dataset.table > schema_file
    
    1. 在文本编辑器中打开架构文件。架构应如下所示。在此示例中,column3 是嵌套的重复列。 嵌套列是nested1 和nested2。 fields 数组列出了 嵌套在 column3 中的字段。 [...]
    2. 将新的嵌套列添加到字段数组的末尾。在此示例中,nested3 是新的嵌套列。 [...]
    3. 更新架构文件后,发出以下命令来更新表的架构。如果您要更新的表位于 项目而不是您的默认项目,将项目 ID 添加到 数据集名称,格式如下:project_id:dataset。 [...]

    bq update mydataset.mytable /tmp/myschema.json

    希望对你有帮助

    【讨论】:

    • 如何从 STRUCT 中删除嵌套字段?还是从架构中删除一个字段?
    【解决方案2】:

    使用控制台时的解决方法是查询原始表,取消嵌套 RECORD 类型并将其放回 STRUCT,添加您想要的列并使用与您想要的类型匹配的占位符值放入。

    SELECT STRUCT(a.foo as foo, a.bar as bar, 'hello' as baz) as words, time, id FROM dataset.table, UNNEST(words) as a;
    

    此查询结果可以保存为表格,然后您可以进入并执行更新查询以将“hello”更改为您要存储的实际文本。

    【讨论】:

      猜你喜欢
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 2022-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多