使用BeamSQL构建嵌套结构

时间:2019-05-30 12:53:09

标签: google-cloud-dataflow apache-beam beam-sql

在BigQuery中,我们具有“ ARRAY_AGG”功能,可帮助将常规集合转换为嵌套集合。有没有类似的方法可以使用BeamSQL构建相同类型的嵌套结构集合?类似于下面的BeamSQL查询

  

“按列1从PCOLLECTION组中选择列1,ARRAY_AGG(STRUCT(列2,列3))”

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,则应该可以使用ARRAYthis passes之类的"SELECT ARRAY[1, 2, 3] f_arr"构造函数:

  @Test
  public void testArrayConstructor() {
    BeamSqlEnv sqlEnv = BeamSqlEnv.inMemory(readOnlyTableProvider);
    PCollection<Row> stream =
        BeamSqlRelUtils.toPCollection(pipeline, sqlEnv.parseQuery("SELECT ARRAY[1, 2, 3] f_arr"));
    PAssert.that(stream)
        .containsInAnyOrder(
            Row.withSchema(Schema.builder().addArrayField("f_arr", FieldType.INT32).build())
                .addValue(Arrays.asList(1, 2, 3))
                .build());
    pipeline.run().waitUntilFinish(Duration.standardMinutes(2));
  }

另请参阅: