JDBC, Elasticsearch and Postgresql Json data type

谁说我不能喝 提交于 2019-12-21 21:20:44

问题


  • Postgresql : 9.3.2
    • Elasticsearch : 0.90
    • jprante/elasticsearch-river-jdbc : 2.2.2
    • postgresql JDBC : 9.3-1100 JDBC 41

I'm trying to get a postgresql Json data type column into elasticsearch, using the elasticsearch river.

Here the created river

curl -XPUT 'localhost:9200/_river/business_river/_meta' -d '{
          "type" : "jdbc",
          "jdbc" : {
              "driver" : "org.postgresql.Driver",
              "url" : "jdbc:postgresql://localhost:5432/business",
              "user" : "postgres",
              "password" : "",
              "sql" : "select id, active, companies->'sic'->>'national_number' AS sic, companies->'names'->>'name' AS name, companies->'address'->>'country' AS country from businesses.business",
              "index" : "business",
              "type" : "jdbc"
     }
}'

The river complains that the "names" column doesn't exist !!! the query works in Postgresql which leads me to think that the Json data type is not yet supported by JDBC or the river.

Here the full message

[2014-01-13 07:47:27,919][INFO ][org.xbib.elasticsearch.river.jdbc.JDBCRiver] [Brigade] [jdbc][business_river] starting JDBC river: URL [jdbc:postgresql://localhost:5432/business], driver [org.postgresql.Driver], strategy [oneshot], index [jdbc]/[jdbc]
[2014-01-13 07:47:33,281][ERROR][org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverFlow] ERROR: column "names" does not exist
  Position: 31
org.postgresql.util.PSQLException: ERROR: column "names" does not exist
  Position: 31
        at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2161)
        at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1890)
        at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)                                                                                         
        at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:560)                                                                                 
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:403)                                                                        
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:283)                                                                            
        at org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverSource.executeQuery(SimpleRiverSource.java:417)                                                         
        at org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverSource.fetch(SimpleRiverSource.java:241)                                                                
        at org.xbib.elasticsearch.river.jdbc.strategy.simple.SimpleRiverFlow.move(SimpleRiverFlow.java:184)                                                                     
        at org.xbib.elasticsearch.river.jdbc.strategy.oneshot.OneShotRiverFlow.run(OneShotRiverFlow.java:38)                                                                    
        at java.lang.Thread.run(Thread.java:744)

回答1:


Thanks to Craig Ringer who pointed me to the real problem, I rewrited my river, replacing the simple quotes in the postgresql json query with "\u0027", and now it works just fine



来源:https://stackoverflow.com/questions/21081196/jdbc-elasticsearch-and-postgresql-json-data-type

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!