【问题标题】:BigQuery Table ColumnBigQuery 表列
【发布时间】:2019-04-25 13:02:46
【问题描述】:

我有下面的json

{attribute_values=[{key=PO, values=[234234, 21]}, {key=POReceipt, values=[ABC]}]} 

我将如何定义attribute_values 列?

目前我定义为字符串并在通过数据流插入时出错

"errorMessage": "{\n  \"errors\" : [ {\n    \"debugInfo\" : \"\",\n    \"location\" : \"attribute_values\",\n    \"message\" : \"Array specified for non-repeated field.\",\n    \"reason\" : \"invalid\"\n  } ],\n  \"index\" : 0\n}",
    "stacktrace": null
  }

【问题讨论】:

  • 这里没有太多信息可以帮助您。您可以分享您的 Dataflow/Beam 代码吗?
  • 这行得通吗? { "name":"attribute_values", "type":"RECORD", "fields": [ {"name":"key", "type":"String"}, {"name":"values", "类型":"重复"} ] }
  • 我有一个 BQ 表,其中包含列 attribute_value 。我正在从 PubSu 读取 json 并在 BQ 表中写入。目前我将 attribute_values 定义为字符串,因此我的数据流作业失败,并出现我在主要问题中提到的错误。现在我需要更改列属性值的数据类型。我正在查看此信息

标签: google-bigquery google-cloud-dataflow


【解决方案1】:

我将如何定义 attribute_values 列?

您可以按如下方式创建表格:

-- create table
 CREATE TABLE IF NOT EXISTS  `projectId.datasetId.tableName`
 (   
  attribute_values STRUCT <key String, values ARRAY<STRING>>
 )

您可以使用下面的INSERT sql 示例来测试如何填充您的表

INSERT INTO 
    `projectId.datasetId.tableName` (attribute_values)
values (
STRUCT <key String, values ARRAY<STRING>>('PO', ['234234', '21'])
);

INSERT INTO 
    `projectId.datasetId.tableName` (attribute_values)
values (
STRUCT <key String, values ARRAY<STRING>>('POReceipt', ['ABC'])
);

要通过代码执行此操作,您可以查看answer 了解更多详情。

【讨论】:

  • 我有一张 BQ 表,其中有列 attribute_value 。我正在从 PubSu 读取 json 并在 BQ 表中写入。目前我将attribute_values 定义为字符串,因此我的数据流作业失败并出现我在主要问题中提到的错误。现在我需要更改列属性值的数据类型。我正在查看此信息
  • @nxverma,对此有任何反馈,希望我的回答对您有所帮助。请考虑接受/投票。
【解决方案2】:

您有一个 BQ 表,其列 attribute_value 和数据类型为字符串,现在您想更改该列的数据类型。有 2 个选项可供您选择

  1. 使用查询,选择表中的所有列,然后转换要更改的列,然后将其写入目标表(尽管转换不允许您从字符串转换为数组/结构Casting)
  2. 将数据导出(到 GCS),然后将其加载到新表中

请查看此文档Changing a column data type 了解更多详情

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2023-03-12
    • 2015-11-07
    • 1970-01-01
    相关资源
    最近更新 更多