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

使用Apache Beam将嵌套记录写入BigQuery

苏俊友
2023-03-14

我试图使用Apache Beam将一些看起来像Json的数据流作为字符串写入BigQuery。数据是一个数组中的一个数组,由于不可能将嵌套数组写入Bigquery,所以我在主记录地址中创建了一个子记录Address_Instance。我需要帮助将我的嵌套记录写入BigQuery。

下面是我的数据的样子,以及我如何将其转换为BigqueryTableRow

  String data = "[{Address=[[{\"Street:\"someStreet\",\"City\":\"someCity\"}]]}]";

  List<TableCell> childFields = new ArrayList<>();


  for (int i = 0; i < data.length(); i++) {
    TableCell tableCell = new TableCell();

    ...
    for each key value pair
    { tableCell.set(key, value); }
    ...

                          
    childFields.add(tableCell);
  }

   //return TableRow
  
   new TableRow.set(key, new TableCell().setV(new TableRow().set(key + "_INSTANCE", childFields)));

这就是我得到的错误:

Repeated record with name Address added outside of an array

下面是我的BigQuery模式的样子:

[
  {
    "name": "Address",
    "type": "RECORD",
    "mode": "REPEATED",
    "fields": [
      {
        "name": "Address_Instance
        "mode": "REPEATED",
        "fields": [
          {
            "name": "Street",
            "type": "STRING"
          },
          {
            "name": "City",
            "type": "STRING"
          }
        ]
      }
    ]
  }
]

如何使用现有模式将上面的嵌套记录写入Bigquery?会很感激你的帮助。多谢了。

共有1个答案

景鹏飞
2023-03-14

可以在BigQuery中编写嵌套字段,但需要正确定义模式。从您的代码来看,您似乎希望将字符串存储在将列定义为RECORD的表中。

我建议您查看BigQuery https://cloud.google.com/BigQuery/docs/nested-repeated并根据需要定义模式,然后尝试插入JSON对象而不是字符串。

 类似资料:
  • 问题内容: 我正在尝试将嵌套的字典写入.csv文件。这是一个简单的示例: 这使我得到一个包含两列的表:第一个包含; 第二个包含[2,1,1](或子词典中的相应值)。我想要一个有四列的表:一列对应的列表元素,然后三列对应的列表元素。 问题答案: 更改: 至: 否则,您会尝试向csv编写类似的内容,而您的意思是。 如Padraic所述,您可能希望更改为或避免随机行为。

  • 问题内容: 我可以使用Golang将平面对象插入BigQuery中-如何将嵌套数据插入表中? 我的BigQuery模式如下所示(从示例中): 我的第一次插入尝试如下所示(示例): 哪个变平并插入没有问题。我只是在用visit_duration 但是,我需要遍历一个片段并添加到访问记录中。我试图建立一个 访问 对象(没有要测试的循环)并将其添加到行中,但它没有插入,并且我没有收到任何错误: - -[

  • 我正在寻找HAL中嵌套_embedded如何使用Spring HATEOAS API编程的例子。最佳实践是什么? 下面是我想要实现的一个例子:

  • 问题内容: 我正在努力解决这个问题。我有一个JSON文件,需要将其放到CSV中,如果结构是扁平的,没有深层嵌套的项目,就可以了。 但是在这种情况下,嵌套会使我烦恼。 我将如何以这种格式获取数据: 每个对象和对象中的每个种族? 我想这样输出到CSV: 所以首先我得到正确的密钥: 然后添加数据: 但是如何? 对于您熟练的forlooper来说,这应该是一个有趣的过程。 问题答案: 我只收集第一个对象的

  • 我创建了以下groovy脚本,以展示如何使用简单的注释将日志字段注入我们的类 当我运行groovy脚本时,我得到以下结果(在GROOVY CONSOLE上) 请告知我们如何将结果打印到WIN机器中的日志文件中,以及需要向groovy脚本中添加什么才能启用它? 例如: 日志文件 C: \程序文件\日志\我的。非常棒。日志 (应包含结果:)

  • 问题内容: 我在MySQL中用一个表创建了一个数据库: 我尝试使用Java插入记录: 输出似乎成功返回: 但是,当我从MySQL中选择时,插入的记录为空: 为什么插入空白记录? 问题答案: 不,这是行不通的(不适用于真实数据): 更改为: 使用该sql创建一个PreparedStatment,并使用索引插入值: