Как я могу использовать шаблон Spring JDB c или другие данные пакетной вставки в таблицу кустов с разделом? - PullRequest
1 голос
/ 02 апреля 2020

Как заголовок, я хочу пакетно вставить данные в таблицу кустов с помощью Spring NamedParameterJbbcTemplate, он может работать следующим образом:

SqlParameterSource[] batchParameterSources = SqlParameterSourceUtils.createBatch(batchValues);
template.batchUpdate("insert into table(a, b, c) values(:a, :b, :c)", batchParameterSources);

Но выше sql не может назначить раздел, используйте sql

"insert overwrite table partition(date = '2020-04-02') values (:a, :b, :c)"

spring выбросит исключение SQLFeatureNotSupportException: метод не поддерживается.

Так как я могу использовать шаблон Spring JDB c для пакетной вставки данных в таблицу кустов со специальным разделом ?

Ждем вашего ответа, Большое спасибо!

1 Ответ

0 голосов
/ 03 апреля 2020

Я изучаю учебник Spring и не нахожу информацию о пакетной вставке в таблицу кустов со специальным разделом.

Поэтому я использую собственный драйвер улья.

Вы можете кодировать следующим образом:

try {
    Class.forName("org.apache.hive.jdbc.HiveDriver");
    Connection connection = DriverManager.getConnection("hiveserver", "username", "password");
    Statement statement = connection.createStatement();
    boolean result = statement.execute("insert overwrite table table_name partition(dt = 'date') values (valueA), (valueB), (valueC)");
    if (!result) {
        log.info("write data successfully");
    }
}

Примечание:

  1. Если вы сохраните некоторые данные, метод Statement.execute () вернет false. Поскольку хранилище не вернет никаких результатов.
  2. Если данных слишком много, лучше хранить партии, например
insert overwrite table_name partition(dt='date') values (valueA), (valueB)...
insert into table_name partition(dt='date') values (valueC), (valueD)...

...