我如何使用 spring Jdbc 模板或其他批量插入数据到带分区的配置单元 table?

How Can I use spring Jdbc template or others batch insert data to hive table with a partition?

如题,我想通过springNamedParameterJbbcTemplate批量插入数据到hivetable,可以实现如下:

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:方法不受支持。

那么如何使用springjdbc模板批量插入数据到特殊分区的hivetable?

期待您的回答, 非常感谢!

我研究了 Spring 教程,但没有找到有关批量插入到具有特殊分区的配置单元 table 的信息。

所以我用的是原生的hive驱动

您可以如下编码:

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() 方法将return false。因为存储不会有结果到return.
  2. 如果你的数据太多,最好分批存储,比如
insert overwrite table_name partition(dt='date') values (valueA), (valueB)...
insert into table_name partition(dt='date') values (valueC), (valueD)...