Построить вложенную структуру с использованием BeamSQL - PullRequest
0 голосов
/ 30 мая 2019

В BigQuery у нас есть функция «ARRAY_AGG», которая помогает преобразовать обычную коллекцию в вложенную коллекцию. Есть ли похожий способ создания такого же типа коллекции вложенных структур с использованием BeamSQL? Что-то вроде запроса ниже в BeamSQL,

"Выбрать столбец1, ARRAY_AGG (STRUCT (столбец2, столбец3)) из группы PCOLLECTION по столбцу1"

1 Ответ

1 голос
/ 30 мая 2019

Если я правильно понял ваш вопрос, вы сможете использовать ARRAY конструктор, такой как "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));
  }

Смотри также:

...