Как сохранить набор данных в jdbc одновременно в разных таблицах? ⇐ JAVA
-
Anonymous
Как сохранить набор данных в jdbc одновременно в разных таблицах?
У нас есть набор данных со столбцом с именем «таблица», который нужно сохранить в jdbc, в зависимости от значения таблицы.
Мы должны фильтровать по таблице и каждому хранилищу результатов присваивать собственную таблицу.
final Dataset пыли = (создать набор данных).cache(); окончательный список таблиц = пыль.выбрать("таблица") .collectAsList() .транслировать() .map(s -> s.getAs("таблица")) .collect(Коллекторы.toList()); table.forEach(таблица -> { окончательный набор данных tableDs = пыли.фильтр(col("таблица").equalTo(таблица)).drop(col("таблица")); таблицаDs.write() .format("jdbc") .option(URL, etlConfig.getUrl() + "?currentSchema=" + схема) .option(ПОЛЬЗОВАТЕЛЬ, etlConfig.getUserName()) .option(ПАРОЛЬ, etlConfig.getPassword()) .option(DRIVER, ORG_POSTGRESQL_DRIVER) .option(DB_TABLE, имя_таблицы) .mode(ДОБАВЛЕНИЕ) .сохранять(); }); [*]Как заменить tables.forEach на перераспределение по столбцу «таблица» для одновременного сохранения в разных таблицах?
Каждый раз при выполнении tables.forEach мы ожидаем операции записи.
[*]
Я не хочу использовать функции параллелизма Java, такие как ExecutorService или другие. Потому что я хочу удалить ...cache(); и выполнить изменения через один канал (создать набор данных => фильтровать по таблице => сохранить в jdbc). Все сохранения в таблицы начинаются одновременно (а не по одному)
Я знаю Spark Scala: как сохранить сгруппированный Dataframe в разные файлы?
в этом случае мы не можем сохранить в jdbc, потому что нужно установить .option(DB_TABLE, tableName) Но идея с разделомBy вполне хороша!
У нас есть набор данных со столбцом с именем «таблица», который нужно сохранить в jdbc, в зависимости от значения таблицы.
Мы должны фильтровать по таблице и каждому хранилищу результатов присваивать собственную таблицу.
final Dataset пыли = (создать набор данных).cache(); окончательный список таблиц = пыль.выбрать("таблица") .collectAsList() .транслировать() .map(s -> s.getAs("таблица")) .collect(Коллекторы.toList()); table.forEach(таблица -> { окончательный набор данных tableDs = пыли.фильтр(col("таблица").equalTo(таблица)).drop(col("таблица")); таблицаDs.write() .format("jdbc") .option(URL, etlConfig.getUrl() + "?currentSchema=" + схема) .option(ПОЛЬЗОВАТЕЛЬ, etlConfig.getUserName()) .option(ПАРОЛЬ, etlConfig.getPassword()) .option(DRIVER, ORG_POSTGRESQL_DRIVER) .option(DB_TABLE, имя_таблицы) .mode(ДОБАВЛЕНИЕ) .сохранять(); }); [*]Как заменить tables.forEach на перераспределение по столбцу «таблица» для одновременного сохранения в разных таблицах?
Каждый раз при выполнении tables.forEach мы ожидаем операции записи.
[*]
Я не хочу использовать функции параллелизма Java, такие как ExecutorService или другие. Потому что я хочу удалить ...cache(); и выполнить изменения через один канал (создать набор данных => фильтровать по таблице => сохранить в jdbc). Все сохранения в таблицы начинаются одновременно (а не по одному)
Я знаю Spark Scala: как сохранить сгруппированный Dataframe в разные файлы?
в этом случае мы не можем сохранить в jdbc, потому что нужно установить .option(DB_TABLE, tableName) Но идея с разделомBy вполне хороша!
Мобильная версия