繁体   English   中英

如何使用Java将复杂的动态嵌套json插入bigquery

[英]How to insert a complex dynamic nested json into bigquery using java

我正在使用来自xAPI系统的JSON,并且JSON看起来与BigQuery 链接中的JSON类似,其中BigQuery的架构略有更改。

示例:在子元素verb的JSON中

"verb":{  
    "id":"http://adlnet.gov/expapi/verbs/failed",
    "display":{  
      "en-US":"failed"
    }
  }

该架构如下所示:

verb                        RECORD  NULLABLE    
verb.id                     STRING  NULLABLE    
verb.display                RECORD  REPEATED    
verb.display.stringValue    STRING  NULLABLE    
verb.display.languageCode   STRING  NULLABLE

如果我使用杰克逊ObjectMapper ,则将解析JSON,但不会将其插入到BigQuery中,因为在JSON中, display仅是一条记录,而在BigQuery中则是记录列表,因此似乎不匹配,并且我无法插入此类自定义字段。

请提供任何解决此问题的解决方案,简而言之,只要上面链接中的JSON中带有“ en”的任何地方,我都面临此问题。

任何帮助表示赞赏。

ObjectMapper objectmapper = new ObjectMapper();  
objectmapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false); 
objectmapper.setSerializationInclusion(Include.NON_NULL);
ashMap<String, Object> tempResult = objectmapper.readValue(stageJson, HashMap.class);

display节点也是BigQuery中的一条记录。 这是必须设置模式的方法:

[
 {
   "name": "verb",
   "type": "RECORD",
   "mode": "NULLABLE",
   "fields": [
       {
         "name": "id",
         "type": "STRING",
         "mode": "NULLABLE"
       },
       {
         "name": "display",
         "type": "RECORD",
         "mode": "REPEATED",
         "fields": [
            {
              "name": "enUS",
              "type": "STRING",
              "mode": "NULLABLE"
            }
         ]
       }
    ]
 }
]

verb示例的问题是缺少包含该字段的方括号; 此外,还有用连字符的另一个问题“ - ”中en-US :作为字段名只能包含字母,数字和下划线。 必须将其设置为例如enUS

如果您的verb示例(在enUs校正之后)是使用模式自动检测导入的,则以下是UI中显示的模式

verb                RECORD  NULLABLE    
verb.display        RECORD  NULLABLE    
verb.display.enUS   STRING  NULLABLE    
verb.id             STRING  NULLABLE    

类型是正确的,但是display模式被检测为NULLABLE ,因为没有[ ]

由于BigQuery JSON导入格式以换行符分隔,因此此导入必须采用以下格式:

{"verb":{"id":"http://adlnet.gov/expapi/verbs/failed","display":[{"enUS":"failed"}]}}

然后display模式被检测为REPEATED

一旦对您的架构进行了排序并拥有格式正确且有效的JSON文件,则只需使用BigQuery Java API上载它,而无需复杂的流程和第三方库即可预先序列化JSON。

资源:

指定架构

指定嵌套和重复的列

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM