In getOperand, the userConfig and coordinates values should each be a LinkedHashMap, not a String. Also, I am concerned that you create the schema AFTER you create a connection.
Both problems might be solved if you create the connection using a model.json file similar to elasticsearch-zips-model.json[1]. Also, it shouldn’t be necessary, but try qualifying the table name: > String sql = "select name from \”elasticsearch\”.\"external\""; Julian [1] https://github.com/apache/calcite/blob/HEAD/elasticsearch/src/test/resources/elasticsearch-zips-model.json <https://github.com/apache/calcite/blob/HEAD/elasticsearch/src/test/resources/elasticsearch-zips-model.json> > On Aug 18, 2016, at 5:34 AM, xuedong luan <[email protected]> wrote: > > Dear all: > There is a SqlValidatorException when i am testing > the elasticsearch adapter.Can anybody help me? Here is my java code: > > public class EsCalciteTest { > > public static Logger logger = LoggerFactory.getLogger(EsCalciteTest.class); > > public static void main(String[] args){ > Properties properties = new Properties(); > properties.setProperty("caseSensitive", "false"); > PreparedStatement statement2 = null; > CalciteConnection calciteConnection = null; > try { > Connection conn = > DriverManager.getConnection("jdbc:calcite:", properties); > calciteConnection = conn.unwrap(CalciteConnection.class); > Schema schema = new > ElasticsearchSchemaFactory().create(calciteConnection.getRootSchema(), > "elasticsearch", getOperand()); > calciteConnection.getRootSchema().add("elasticsearch",schema); > String sql = "select name from \"external\""; > statement2 = calciteConnection.prepareStatement(sql); > ResultSet set = statement2.executeQuery(); > while(set.next()){ > logger.info(set.getString(1)); > } > }catch (SQLException e){ > e.printStackTrace(); > }finally { > if(statement2 != null){ > try { > statement2.close(); > }catch (SQLException e){ > logger.error(e.getMessage()); > } > > } > if(calciteConnection != null){ > try{ > calciteConnection.close(); > }catch (SQLException e){ > logger.error(e.getMessage()); > } > } > } > } > > public static Map<String,Object> getOperand(){ > String coordinates = "{'127.0.0.1':9300}"; > String userConfig = "{'cluster.name': 'luan'}"; > String index = "customer"; > Map<String,Object> map = new HashMap<String,Object>(); > map.put("coordinates",coordinates); > map.put("userConfig",userConfig); > map.put("index",index); > return map; > } > } > > And exception: > > 016-08-18 20:21:42,202 DEBUG [main] org.elasticsearch.common.netty: using > gathering [true] > 2016-08-18 20:21:42,250 DEBUG [main] org.elasticsearch.client.transport: > [Infant Terrible] node_sampler_interval[5s] > 2016-08-18 20:21:42,286 DEBUG [main] > org.elasticsearch.netty.channel.socket.nio.SelectorUtil: Using select > timeout of 500 > 2016-08-18 20:21:42,286 DEBUG [main] > org.elasticsearch.netty.channel.socket.nio.SelectorUtil: Epoll-bug > workaround enabled = false > 2016-08-18 20:21:42,317 DEBUG [main] org.elasticsearch.client.transport: > [Infant Terrible] adding address [{#transport#-1}{127.0.0.1}{127.0.0.1:9300 > }] > 2016-08-18 20:21:42,530 DEBUG [main] org.elasticsearch.transport.netty: > [Infant Terrible] connected to node [{#transport#-1}{127.0.0.1}{ > 127.0.0.1:9300}] > 2016-08-18 20:21:42,788 DEBUG [main] org.elasticsearch.transport.netty: > [Infant Terrible] connected to node > [{Aralune}{HDpwBvvXS7Kp2kpe9yjO3g}{127.0.0.1}{127.0.0.1:9300}] > 2016-08-18 20:21:42,824 DEBUG [elasticsearch[Infant > Terrible][transport_client_worker][T#8]{New I/O worker #8}] > org.elasticsearch.common.compress.lzf: using decoder[VanillaChunkDecoder] > 2016-08-18 20:21:43,460 DEBUG [main] org.apache.calcite.sql.parser: Reduced > NAME > 2016-08-18 20:21:43,463 DEBUG [main] org.apache.calcite.sql.parser: Reduced > SELECT `NAME` > FROM `external` > 2016-08-18 20:21:43,798 ERROR [main] > org.apache.calcite.runtime.CalciteException: > org.apache.calcite.sql.validate.SqlValidatorException: Table 'external' not > found > 2016-08-18 20:21:43,800 ERROR [main] > org.apache.calcite.runtime.CalciteException: > org.apache.calcite.runtime.CalciteContextException: From line 1, column 18 > to line 1, column 27: Table 'external' not found > java.sql.SQLException: Error while preparing statement [select name from > "external"] > at org.apache.calcite.avatica.Helper.createException(Helper.java:56) > at org.apache.calcite.avatica.Helper.createException(Helper.java:41) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement_(CalciteConnectionImpl.java:204) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement(CalciteConnectionImpl.java:185) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement(CalciteConnectionImpl.java:86) > at > org.apache.calcite.avatica.AvaticaConnection.prepareStatement(AvaticaConnection.java:163) > at com.vip.bigdata.EsCalciteTest.main(EsCalciteTest.java:34) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:497) > at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) > Caused by: org.apache.calcite.runtime.CalciteContextException: From line 1, > column 18 to line 1, column 27: Table 'external' not found > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) > at > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > at java.lang.reflect.Constructor.newInstance(Constructor.java:422) > at > org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:405) > at org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:800) > at org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:785) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.newValidationError(SqlValidatorImpl.java:3989) > at > org.apache.calcite.sql.validate.IdentifierNamespace.validateImpl(IdentifierNamespace.java:106) > at > org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:86) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:864) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:845) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:2775) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:2760) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:2988) > at > org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:60) > at > org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:86) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:864) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:845) > at org.apache.calcite.sql.SqlSelect.validate(SqlSelect.java:208) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:820) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:536) > at > org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:577) > at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:224) > at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:193) > at > org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:724) > at > org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:591) > at > org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:561) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:215) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement_(CalciteConnectionImpl.java:196) > ... 9 more > Caused by: org.apache.calcite.sql.validate.SqlValidatorException: Table > 'external' not found > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) > at > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > at java.lang.reflect.Constructor.newInstance(Constructor.java:422) > at > org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:405) > at org.apache.calcite.runtime.Resources$ExInst.ex(Resources.java:514) > ... 34 more > > Process finished with exit code 0 > > > thks very much
