【问题标题】:Build Nested structure using BeamSQL使用 BeamSQL 构建嵌套结构
【发布时间】:2019-05-30 12:53:09
【问题描述】:

在 BigQuery 中,我们有“ARRAY_AGG”函数,它有助于将普通集合转换为嵌套集合。是否有类似的方法可以使用 BeamSQL 构建相同类型的嵌套结构集合?类似于 BeamSQL 中的以下查询,

"Select column1, ARRAY_AGG(STRUCT(column2, column3)) from PCOLLECTION Group by Column1"

【问题讨论】:

  • Google Cloud Dataflow 实际上现在有一个 SQL 产品处于 alpha 阶段。 Dataflow Cloud SQL 正在尝试匹配 BigQuery SQL 的功能。目前,Cloud Dataflow SQL 不支持 BQ 中的 ARRAY_AGG(支持的是 cloud.google.com/dataflow/docs/reference/sql)。

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


【解决方案1】:

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

  @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));
  }

另见:

【讨论】:

  • 感谢您的回复。我猜您的示例代码和参考将支持 BigQuery 中的嵌套行,但不支持“重复的嵌套行”。无论如何,让我通过这些示例/参考来探索它,并让您知道我的反馈。我正在寻找重复的嵌套行。
猜你喜欢
  • 1970-01-01
  • 2018-06-01
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
相关资源
最近更新 更多