使用java将json数据流式传输到Bigquery中。不使用作业加载数据

Posted

技术标签:

【中文标题】使用java将json数据流式传输到Bigquery中。不使用作业加载数据【英文标题】:Strreaming json Data into Bigquery using java.With out using a job to load data 【发布时间】:2018-02-09 12:08:18 【问题描述】:

我是 bigquery 的新手,所以我不完全了解如何将数据流式传输到 bigquery,这是我的问题,我有 jsonInString,从这样的对象映射

    String customerJsonInString = mapper.writeValueAsString(customer);

   
  "id": "1",
  "first_name": "John",
  "last_name": "Doe",
  "dob": "1968-01-22",
  "addresses": [
    
      "status": "current",
      "address": "123 First Avenue",
      "city": "Seattle",
      "state": "WA",
      "zip": "11111",
      "numberOfYears": "1"
    ,
    
      "status": "previous",
      "address": "456 Main Street",
      "city": "Portland",
      "state": "OR",
      "zip": "22222",
      "numberOfYears": "5"
    
  ]

已使用正确的架构创建表。 现在我想将此数据流式传输到 bigquery(插入行),我正在使用 (https://cloud.google.com/bigquery/streaming-data-into-bigquery#bigquery-stream-data-java) 上的示例来适应我的,这就是我尝试过的,

TableId tableId = TableId.of(DATASET_NAME,TABLE_NAME);
        Map<String, Object> recordsContent = new HashMap<>();
        recordsContent.put("Customer", customerJsonInString);
        InsertAllResponse response = bigquery.insertAll(InsertAllRequest.newBuilder(tableId)
                        .addRow("rowId", recordsContent)
                        .build());
        if (response.hasErrors()) 
            for (Entry<Long, List<BigQueryError>> entry : response.getInsertErrors().entrySet()) 
            
        

【问题讨论】:

我猜表的架构是“id, first_name, last_name, ...”而不是“customer”?在这种情况下,您需要一个一个地设置字段而不是整个 json 字符串,例如"recordsContent.put("id", 1)". 另外,查看example with comments @HuaZhang 您能否将您的解决方案添加为正确的 SO 答案?社区将受益于答案所具有的各种功能,您将从名声中受益:) 谢谢! 【参考方案1】:

我猜表的架构是id, first_name, last_name, ... 而不是customer?在这种情况下,您需要一个一个地设置字段而不是整个 json 字符串,例如recordsContent.put("id", 1). 检查example with comments。

【讨论】:

以上是关于使用java将json数据流式传输到Bigquery中。不使用作业加载数据的主要内容,如果未能解决你的问题,请参考以下文章

使用java.Without使用作业加载数据,将json数据流式传输到Bigquery

将 JSON 流式传输到 Bigquery

使用 Json.net 将大量数据流式传输为 JSON 格式

BigQuery - 通过 java 流式传输非常慢

如何在 Vert.x (java) 中使用 Jackson 流式传输 JSON 结果

如何使用createWriteStream将JSON流式传输到BigQuery表?