Как выбрать набор полей из входных данных в виде массива повторяющихся полей в луче SQL

Постановка задачи:

У меня есть вход 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?


person Spiriter_rider    schedule 29.05.2020    source источник
comment
Какой результат вы получили?   -  person Kenn Knowles    schedule 02.06.2020
comment
Можете ли вы написать полную схему вашего ввода, включая типы, полную схему желаемого вывода, включая типы, а также точные строки и значения, которые вы хотите получить на выходе?   -  person Kenn Knowles    schedule 02.06.2020


Ответы (2)


Вы можете взглянуть на этот пример доступа к массивам в 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

person Jayadeep Jayaraman    schedule 29.05.2020
comment
привет, я только что посмотрел ссылку, которой вы поделились, в примере, упомянутом в схеме ввода ссылки, сама схема ввода имеет тип массива, но решение, которое я пытаюсь найти, таково: схема ввода будет обычным набором полей, а схема вывода будет иметь тип массива, в котором поля ввода будут сгруппированы под ними, можете ли вы помочь, пожалуйста, помогите мне в этом :) - person Spiriter_rider; 30.05.2020

В вашем SQL-запросе есть несколько ошибок.

  1. Вы назвали ввод SQL-запроса testPcollection. Ваш запрос SQL не выбирает FROM testPcollection. Предположим, вы имели в виду FROM testPcollection.
  2. Вы используете синтаксис (firstname_1, lastname_1, doc) как в ожидаемом результате, так и в запросе. Это не допустимое выражение SQL.
person Kenn Knowles    schedule 01.06.2020
comment
привет, не могли бы вы подсказать мне, какое реальное выражение sql для этого, я довольно новичок в луче sql - person Spiriter_rider; 02.06.2020
comment
Я не могу точно сказать, какой результат вы ожидаете. - person Kenn Knowles; 02.06.2020