不支持storm simple jdbc mapper将数组写入phoenix db?

edqdpe6u  于 2021-06-24  发布在  Storm
关注(0)|答案(1)|浏览(268)

我有一个storm拓扑(hortonworks发行版,版本1.1.0.2.6.2),它使用jdbcinsertbolt类写入phoenix(版本4.7.0.2.6.2)db。我已成功写入标准列,例如:varchar和int,但需要写入数组列并遇到以下情况:

java.lang.RuntimeException: We do not support tables with SqlType: ARRAY
    at org.apache.storm.jdbc.common.Util.getJavaType(Util.java:72) ~[stormjar.jar:?]
    at org.apache.storm.jdbc.mapper.SimpleJdbcMapper.getColumns(SimpleJdbcMapper.java:60) ~[stormjar.jar:?]
    at org.apache.storm.jdbc.bolt.JdbcInsertBolt.process(JdbcInsertBolt.java:87) [stormjar.jar:?]
    at org.apache.storm.topology.base.BaseTickTupleAwareRichBolt.execute(BaseTickTupleAwareRichBolt.java:38) [storm-core-1.1.0.2.6.2.14-5.jar:1.1.0.2.6.2.14-5]
    at org.apache.storm.daemon.executor$fn__10454$tuple_action_fn__10456.invoke(executor.clj:730) [storm-core-1.1.0.2.6.2.14-5.jar:1.1.0.2.6.2.14-5]
    at org.apache.storm.daemon.executor$mk_task_receiver$fn__10375.invoke(executor.clj:462) [storm-core-1.1.0.2.6.2.14-5.jar:1.1.0.2.6.2.14-5]
    at org.apache.storm.disruptor$clojure_handler$reify__9889.onEvent(disruptor.clj:40) [storm-core-1.1.0.2.6.2.14-5.jar:1.1.0.2.6.2.14-5]
    at org.apache.storm.utils.DisruptorQueue.consumeBatchToCursor(DisruptorQueue.java:472) [storm-core-1.1.0.2.6.2.14-5.jar:1.1.0.2.6.2.14-5]
    at org.apache.storm.utils.DisruptorQueue.consumeBatchWhenAvailable(DisruptorQueue.java:451) [storm-core-1.1.0.2.6.2.14-5.jar:1.1.0.2.6.2.14-5]

我试图写的数组是一个字符串数组,有办法解决这个问题吗?

wfveoks0

wfveoks01#

我自己编写了jdbcinsertbolt、jdbcclient和jdbcmapper的实现
Map器相关代码:

else if(getJavaType(columnSqlType).equals(Array.class)) {
            String[] value = (String[]) tuple.getValueByField(columnName);
            columns.add(new Column(columnName, PDataType.instantiatePhoenixArray(PDataType.arrayBaseType(PVarcharArray.INSTANCE),value) , columnSqlType));

客户相关代码:

else if (columnJavaType.equals(Array.class)) {
            preparedStatement.setArray(index, (PhoenixArray) column.getVal());

相关问题