Как записать инкрементные данные в улей с помощью Flink - PullRequest
0 голосов
/ 05 ноября 2018

Я использую Flink 1.6, я знаю, что могу использовать собственный приемник и куст jdbc для записи в куст, или использовать JDBCAppendTableSink, но он все еще использует jdbc. Проблема в том, что куст jdbc не поддерживает метод batchExecute. Я думаю, что это будет очень медленно.

Затем я ищу другой способ: я записываю DataSet в hdfs с помощью метода writeAsText, затем создаю таблицу кустов из hdfs. Но все еще остается проблема: как добавить добавочные данные. API-интерфейс WriteMode:

Enum FileSystem.WriteMode
Enum Constant and Description
NO_OVERWRITE
Creates the target file only if no file exists at that path already.
OVERWRITE
Creates a new target file regardless of any existing files or directories.

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

Но если я использую OVERWRITE для того же файла hdfs, данные за сентябрь больше не будут существовать, если я использую NO_OVERWRITE, я должен записать их в новый файл hdfs, а затем в новую таблицу кустов, нам нужно они в одной таблице улья. И я не знаю, как объединить 2 файла hdfs в таблицу улья.

Итак, как записать инкрементные данные в улей с помощью flink?

1 Ответ

0 голосов
/ 06 ноября 2018

Как вы уже писали, нет ВИЧ-Раковины. Я предполагаю, что шаблон по умолчанию - это запись (text, avro, parquett) -файлов в HDFS и определение внешней таблицы кустов в этом каталоге. Там не имеет значения, если у вас есть один файл или несколько файлов. Но вам, скорее всего, придется регулярно восстанавливать эту таблицу (msck repair table <db_name>.<table_name>;). Это обновит метаданные, и новые файлы будут доступны.

Для больших объемов данных я бы порекомендовал разбить таблицу и добавить разделы по запросу (этот пост может дать вам подсказку: https://resources.zaloni.com/blog/partitioning-in-hive).

...