Use commons-dbutils with hive-jdbc

hadoop
この記事は約2分で読めます。

hive-jdbcと一緒にcommons-dbutilsを使う場合。

環境

  • commons-dbutils 1.6
  • hive-jdbc-1.1.0-cdh5.7.1

DbUtilsでgetParameterMetaDataの呼び出しをスキップ

hive-jdbcと一緒にcommons-dbutilsを使う場合、hive-jdbcではjava.sql.PreparedStatement#getParameterMetaData()をサポートしていない(上記環境でのバージョン)ので、以下のようにQueryRunnerの初期化時にgetParameterMetaDataをサポートしていない旨を渡してあげる必要があります。

以下は、org.apache.commons.dbutils.AbstractQueryRunner#fillStatementの呼び出し部分で、QueryRunner#queryメソッドの内部で呼ばれます。

pmdKnownBrokenがtrueの場合はパラメータ数のチェック処理がスキップされます。QueryRunnerの初期化時に該当変数にtrueを指定しなかった場合、hive-jdbcではgetParameterMetaDataの呼び出しで例外がスローされ以下のようなエラーが表示されます。

参考リンク

  • https://commons.apache.org/proper/commons-dbutils/apidocs/index.html
  • https://issues.apache.org/jira/browse/HIVE-6992
  • https://github.com/apache/hive/blob/master/jdbc/src/java/org/apache/hive/jdbc/HivePreparedStatement.java#L209

コメント

タイトルとURLをコピーしました