如何使用springjdbc模板或其他批插入数据到带有分区的配置单元表中?

rkkpypqq  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(353)

作为标题,我想通过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:方法不受支持。
那么,如何使用springjdbc模板将数据批插入到具有特殊分区的配置单元表中呢?
期待您的回答,非常感谢!

d4so4syb

d4so4syb1#

我研究了spring教程,但没有找到关于使用特殊分区批量插入配置单元表的内容。
所以我使用原生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");
    }
}

注:
如果存储一些数据,statement.execute()的方法将返回false。因为存储不会返回任何结果。
如果你的数据太多,最好是批量存储,比如

insert overwrite table_name partition(dt='date') values (valueA), (valueB)...
insert into table_name partition(dt='date') values (valueC), (valueD)...

相关问题