【问题标题】:BigQuery, TableRow: access repeated records with java apiBigQuery、TableRow:使用 java api 访问重复记录
【发布时间】:2015-05-19 02:03:59
【问题描述】:

我正在通过 java API 和新服务 Dataflow 访问 BigQuery 数据。我希望 TableRow 类具有以下方法:

  • 返回 TableCell 实例的列表(如果有重复的字段)
  • 返回一个 TableRow 实例(在嵌套字段的情况下)
  • 返回 TableRow 实例列表(在重复嵌套字段的情况下)

但我只找到了使用 get 方法访问 TableRow 实例的字段的示例代码,这不方便,因为输出是 Object 类的实例。

我目前看到的唯一解决方案是解析我从 get 方法获得的字符串并自己构建一个 TableRow 对象,但我想知道是否有人有更好的解决方案可以分享?

非常感谢。

【问题讨论】:

    标签: java google-bigquery google-cloud-dataflow


    【解决方案1】:

    我返回了RepeatedRecord,我使用以下方式访问:

    TableRow atrs = (TableRow) row.get("sts");
    
                    List<String> atrValue = (List<String>) atrs.get("value");
                    if(atrValue.size()>0){                      
                        TableRow atrRow = new TableRow();
                        atrRow.set("id", "sts");
                        atrRow.set("value", atrValue.toArray());
    
                        if(atrs.get("sv") !=null){
                            List<Integer> atrSV = ((List<String>) atrs.get("sv"))
                                    .stream()
                                    .map(x -> Integer.parseInt(x))
                                    .collect(Collectors.toList());
                            atrRow.set("sv", atrSV.toArray());
                        }
                        else
                            atrRow.set("sv", null);
    
    
                        atrList.add(atrRow);
                    }
    

    【讨论】:

      【解决方案2】:

      最后我得出了这些结论:

      • 如果根据您的架构,您期望重复字段,则应用于 TableRow 实例的 get 方法将返回一个 ArrayList 实例。
      • 如果根据您的架构您期望记录,则应用于 TableRow 实例的 get 方法将返回 LinkedHashMap 的实例。
      • 正如您所猜测的,如果根据您的架构您期望记录的重复字段,则应用于 TableRow 实例的 get 方法将返回一个 ArrayList 实例。

      因此,您只需使用上述类之一将应用到 TableRow 实例的 get 方法的结果向下转换,然后您就可以充分利用它们的功能(例如,按名称进行迭代和调用)。

      【讨论】:

        【解决方案3】:

        TableRow 有一个getClassInfo() 方法。它有什么帮助吗? (我自己没有尝试过使用嵌套字段)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-19
          • 1970-01-01
          • 2021-10-09
          • 2014-03-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多