Схема Flink против схемы таблиц - PullRequest
0 голосов
/ 18 октября 2019

Я использую Flink SQL API, и я немного потерян между всеми типами 'схемы': TableSchema, Schema (из org.apache.flink.table.descriptors.Schema) и TypeInformation.

A TableSchema может быть создан из TypeInformation, TypeInformation может быть создан из TableSchema, а Schema может быть создан из TableSchema

Но похоже, что Schema не можетбыть преобразованным обратно в TypeInformation или TableSchema (?)

Почему существует 3 различных типа объектов для хранения информации одного и того же вида?

Например, допустим, у меня есть строковая схема, полученная из файла схемы Avro, и я хочу добавить в нее новое поле. Для этого единственное решение, которое я нашел:

String mySchemaRaw = ...;
TypeInformation<Row> typeInfo = AvroSchemaConverter.convertToTypeInfo(mySchemaRaw);
Schema newSchema = new Schema().schema(TableSchema.fromTypeInfo(typeInfo));
newSchema = newSchema.field("nexField",...);


// Need the newSchema as a TableSchema 

Является ли это нормальным способом использования этих объектов? (выглядит странно для меня)

1 Ответ

3 голосов
/ 18 октября 2019

TypeInformation и TableSchema решают разные вещи. TypeInformation - это физическая информация о том, как отправить класс записи (например, строку или POJO) от одного оператора к другому.

TableSchema описывает схему таблицы, независимую от базового типа каждой записи,Это похоже на часть схемы оператора CREATE TABLE name (a INT, b BIGINT) DDL. В SQL также не определена таблица типа CREATE TABLE name ROW(a INT, B BIGINT). Но это правда, что схема и тип строки связаны, поэтому предоставляются методы конвертера. Различия становятся больше, когда вводятся такие понятия, как PRIMARY KEY и т. Д.

Schema - это текущий способ определения не-SQL-понятий, таких как атрибуты времени и сопоставления полей.

...