不支持 Storm 简单 jdbc 映射器将数组写入 phoenix db?

Storm simple jdbc mapper write array to phoenix db not supported?

我有一个使用 JdbcInsertBolt class 写入 phoenix(版本 4.7.0.2.6.2)数据库的 Storm 拓扑(hortonworks 发行版,版本 1.1.0.2.6.2)。我已成功写入标准列,例如: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]

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

编写了我自己的 JdbcInsertBolt、JdbcClient 和 JdbcMapper 实现

Mapper相关代码:

 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());