Я хочу написать пользовательскую функцию, которую можно будет использовать в Beam SQL. На данный момент я определяю пользовательские функции (в Scala), расширяя интерфейс BeamSqlUdf и переопределяя его метод eval. Это отлично работает для простых типов и массивов. Но я не могу написать пользовательскую функцию, которая принимает или возвращает вложенную строку. Лучше всего было использовать org.apache.beam.sdk.values.Row
Например:
Код: Выделить всё
class GetNestedRow extends BeamSqlUdf {
def eval(): Row = Row
.withSchema(Schema.of(Schema.Field.of("name", Schema.FieldType.STRING), Schema.Field.of("age", Schema.FieldType.INT64)))
.addValue("Alice").addValue(22L)
.build
}
Когда я применяю преобразование SQL с зарегистрированным udf и этим запросом: SELECT get_nested_row_udf() FROM PCOLLECTION, я сталкиваюсь с
Невозможно найти соответствующий Beam FieldType для типа Calcite: OTHER
как для Calcite, так и для Zeta SQL.
Какой тип данных Java следует использовать в таких случаях?
Подробнее здесь:
https://stackoverflow.com/questions/791 ... data-types