Как выбрать набор полей из входных данных как массив повторяющихся полей в луче SQL - PullRequest
0 голосов
/ 29 мая 2020

Постановка проблемы:

У меня есть входная коллекция PCollection со следующими полями:

{
   firstname_1,
   lastname_1,
   dob,
   firstname_2,
   lastname_2, 
   firstname_3,
   lastname_3,
}

, затем я выполняю операцию Beam SQL так, чтобы результат результирующей коллекции PCollection был похож на

 ----------------------------------------------
   name.firstname |  name.lastname | dob
 ---------------------------------------------- 
      firstname_1 |  lastname_1    | 202009
      firstname_2 |  lastname_2    | 
      firstname_3 |  lastname_3    |
-----------------------------------------------

Чтобы быть точным:

array[
    (firstname_1,lastname_1,dob),
    (firstname_2,lastname_2,dob),
    (firstname_3,lastname_3,dob)
]

Вот фрагмент кода, в котором я выполняю Beam SQL:

PCollectionTuple tuple=
    PCollectionTuple.of(new TupleTag<>("testPcollection"), testPcollection);

PCollection<Row> result = tuple
    .apply(SqlTransform.query(
        "SELECT array[(firstname_1,lastname_1,dob), (firstname_2,lastname_2,dob), (firstname_3,lastname_3,dob)]"));

Я не получаю должных результатов.

Может ли кто-нибудь подсказать мне, как запросить массив повторяющихся полей в Beam SQL?

Ответы [ 2 ]

0 голосов
/ 02 июня 2020

Ваш запрос SQL содержит несколько ошибок.

  1. Вы назвали вход для запроса SQL testPcollection. Ваш запрос SQL не выбирает FROM testPcollection. Предположим, вы имели в виду FROM testPcollection.
  2. Вы используете синтаксис (firstname_1, lastname_1, doc) как в ожидаемом результате, так и в вашем запросе. Это недопустимое выражение SQL.
0 голосов
/ 29 мая 2020

В этом примере вы можете посмотреть, как получить доступ к массивам в Beam SQL - https://github.com/apache/beam/blob/d110f6b7610b26edc1eb9a4b698840b21c151847/sdks/java/extensions/sql/src/test/java/org/apache/beam/sdk/extensions/sql/BeamSqlDslNestedRowsTest.java#L234

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...