当前位置: 首页 > 知识库问答 >
问题:

无法在BigQuery中加载嵌套的Json数据

曾元忠
2023-03-14

我试图在大查询中加载嵌套的json数据。

这是我正在使用的数据和模式...

scehma -

[{“名称”:“种类”、“类型”:“字符串”}、{“名称”:“全名”、“类型”:“字符串”}、{“名称”:“年龄”、“类型”:“整数”}、{“名称”:“居住的城市”、“类型”:“记录”、“字段”:[{“名称”:“地点”、“类型”:“字符串”}、{“名称”:“年数”、“类型”:“整数”}]}]

资料--

{“kind”: “person”, “fullName”: “John Doe”, “age”: 22, “citiesLived”: [{ “place”: “Seattle”, “numberOfYears”: 5}, {“place”: “Stockholm”, “numberOfYears”: 6}]} {“kind”: “person”, “fullName”: “Jane Austen”, “age”: 24, “citiesLived”: [{“place”: “Los Angeles”, “numberOfYears”: 2}, {“place”: “Tokyo”, “numberOfYears”: 2}]}

try {
    bigquery.datasets().insert(PROJECT_ID, dataset).execute();
} catch (IOException e) {
    System.out.println(e);
}

  // Set where you are importing from (i.e. the Google Cloud Storage paths).
  List<String> sources = new ArrayList<String>();
  sources.add("gs://gc_data/json_test_new_flat.json");
  loadConfig.setSourceUris(sources);
  loadConfig.setSourceFormat("NEWLINE_DELIMITED_JSON");
  //loadConfig.setFieldDelimiter("\n");

  // Describe the resulting table you are importing to:
  TableReference tableRef = new TableReference();
  tableRef.setDatasetId("myDataset");
  tableRef.setTableId("myTableJSONNew");
  tableRef.setProjectId(projectId);
  loadConfig.setDestinationTable(tableRef);

  List<TableFieldSchema> fields = new ArrayList<TableFieldSchema>();
  TableFieldSchema fieldKind = new TableFieldSchema();
  fieldKind.setName("kind");
  fieldKind.setType("STRING");
  TableFieldSchema fieldFullName = new TableFieldSchema();
  fieldFullName.setName("fullName");
  fieldFullName.setType("STRING");

  TableFieldSchema fieldAge = new TableFieldSchema();
  fieldAge.setName("age");
  fieldAge.setType("INTEGER");


  TableFieldSchema fieldJSON = new TableFieldSchema();
  fieldJSON.setName("citiesLived");
  fieldJSON.setType("RECORD");

  // this is for record
  List<TableFieldSchema> listOfJSonSchema = new ArrayList<TableFieldSchema>();
  TableFieldSchema fieldPlace = new TableFieldSchema();
  fieldPlace.setName("place");
  fieldPlace.setType("STRING");

  TableFieldSchema fieldnumberOfYears = new TableFieldSchema();
  fieldnumberOfYears.setName("numberOfYears");
  fieldnumberOfYears.setType("INTEGER");
  listOfJSonSchema.add(fieldPlace);
  listOfJSonSchema.add(fieldnumberOfYears);
  //



  fieldJSON.setFields(listOfJSonSchema);

  fields.add(fieldKind);
  fields.add(fieldFullName);
  fields.add(fieldAge);
  fields.add(fieldJSON);
  TableSchema schema = new TableSchema();
  schema.setFields(fields);  // This is to set delimiter

  loadConfig.setSchema(schema);

  Insert insert = bigquery.jobs().insert(projectId, job);
  insert.setProjectId(projectId);
  JobReference jobRef =  insert.execute().getJobReference();
  System.out.println(jobRef.toPrettyString());

共有1个答案

郏景澄
2023-03-14

您已经定义了citiesLive记录,但看起来您还没有指示该记录是可重复的,这就是您的示例数据所指示的。尝试在citiesLive字段上使用setMode(“REPEATED”)。

 类似资料:
  • 我这里有一个很长的json:https://textup.fr/601885q4我想读一个“支付令牌合同”中的数据,特别是那些带有“id”的数据:1我的问题是,我不知道如何称呼特定的词汇,因为它们都有相同的名称。这是否可能,我还不习惯操作如此复杂的对象,因为我是初学者。我会尝试像:[“订单][x][“id”:1][“基本价格”]这样的东西,x是一个for循环,循环遍历每个“订单”显示。但是我无法将

  • 问题内容: 我想出了一些可行的方法,但并非完全符合我的期望。这是我的解决方案: attribute_category_map是一个具有两列的表,我在其中查找第1列中的对应值,并用第2列中的值替换目标表中的数据。我实现的最佳结果- 用相同的值更新了一行中的所有嵌套字段,这仅适用于第一个嵌套字段,而不是使用特定值更新每个嵌套字段。 主表的简化架构: 会话行中通常有多个匹配项,一个匹配项中通常包含多个产

  • 问题内容: 我有以下的Java代码: 下一行工作正常时,为什么这里的工作不正常? 问题答案: 使用(无论嵌套类是否为静态)

  • 问题内容: 我有一个从数据库(JSON MySQL中的数据存储)检索数据的程序。 我设法得到对象。输出为: JSON对象: 我需要有关如何处理数据并将信息放入不同数组/对象的建议。例如 谢谢。 问题答案: 您可以使用Jackson Api来实现。 您必须创建与json对象相同的Pojo类(该类应具有“ attributes”,“ uuid”之类的成员)。 这是您必须使用的类 和代码 现在,您可以使

  • 你一定看过下面的功能(在facebook上),一个有一些评论的帖子,每个评论都有一个类似的计数器。 https://img4.hostingpics.net/pics/67853820170616003640LaravelNewsAccueil.png 在拉雷维尔,这将是类似的 帖子有很多评论 以下评论发布 类似于用户的评论 CommentLike belong评论 评论有很多类似的评论 所以,现

  • 下面是一些示例代码: On doing JSONObject innerObj = (JSONObject) obj.get(“root1”);- 它给出: 线程“main”中出现异常Java . lang . classcastexception:Java . lang . string不能转换为org.json.JSONObject 我尝试了Gson、JSONParser-但仍然无法做到...