You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Vova Vysotskyi (Jira)" <ji...@apache.org> on 2020/12/21 19:23:00 UTC
[jira] [Updated] (CALCITE-4441) Unable to query nested field in
elasticsearch adapter
[ https://issues.apache.org/jira/browse/CALCITE-4441?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Vova Vysotskyi updated CALCITE-4441:
------------------------------------
Description:
The following test added to {{Projection2Test}} class:
{code:java}
@Test void projectionNested() {
CalciteAssert.that()
.with(newConnectionFactory())
.query(
String.format(Locale.ROOT, "select _MAP['b']['c']['a'] as \"a\" from \"elastic\".\"%s\"", NAME))
.returns("a=foo\n");
}
{code}
fails with the following error:
{noformat}
Error while executing SQL "select _MAP['b']['c']['a'] as "a" from "elastic"."nested"": Unable to implement ElasticsearchToEnumerableConverter: rowcount = 100.0, cumulative cost = {30.0 rows, 30.1 cpu, 0.0 io}, id = 25
ElasticsearchProject(a=[ITEM(ITEM(ITEM($0, 'b'), 'c'), 'a')]): rowcount = 100.0, cumulative cost = {20.0 rows, 20.1 cpu, 0.0 io}, id = 23
ElasticsearchTableScan(table=[[elastic, nested]]): rowcount = 100.0, cumulative cost = {10.0 rows, 10.100000000000001 cpu, 0.0 io}, id = 1
java.sql.SQLException: Error while executing SQL "select _MAP['b']['c']['a'] as "a" from "elastic"."nested"": Unable to implement ElasticsearchToEnumerableConverter: rowcount = 100.0, cumulative cost = {30.0 rows, 30.1 cpu, 0.0 io}, id = 25
ElasticsearchProject(a=[ITEM(ITEM(ITEM($0, 'b'), 'c'), 'a')]): rowcount = 100.0, cumulative cost = {20.0 rows, 20.1 cpu, 0.0 io}, id = 23
ElasticsearchTableScan(table=[[elastic, nested]]): rowcount = 100.0, cumulative cost = {10.0 rows, 10.100000000000001 cpu, 0.0 io}, id = 1
{noformat}
was:
The following test added to {{Projection2Test}} class:
{code:java}
@Test void projectionNested() {
CalciteAssert.that()
.with(newConnectionFactory())
.query(
String.format(Locale.ROOT, "select _MAP['c']['a'] as \"a\" from \"elastic\".\"%s\"", NAME))
.returns("a=2, _MAP={a=1, b={a=2, b=3, c={a=foo}}}\n");
}
{code}
fails with the following error:
{noformat}
Error while executing SQL "select _MAP['c']['a'] as "a" from "elastic"."nested"": Unable to implement ElasticsearchToEnumerableConverter: rowcount = 100.0, cumulative cost = {30.0 rows, 30.1 cpu, 0.0 io}, id = 25
ElasticsearchProject(a=[ITEM(ITEM($0, 'c'), 'a')]): rowcount = 100.0, cumulative cost = {20.0 rows, 20.1 cpu, 0.0 io}, id = 23
ElasticsearchTableScan(table=[[elastic, nested]]): rowcount = 100.0, cumulative cost = {10.0 rows, 10.100000000000001 cpu, 0.0 io}, id = 1
java.sql.SQLException: Error while executing SQL "select _MAP['c']['a'] as "a" from "elastic"."nested"": Unable to implement ElasticsearchToEnumerableConverter: rowcount = 100.0, cumulative cost = {30.0 rows, 30.1 cpu, 0.0 io}, id = 25
ElasticsearchProject(a=[ITEM(ITEM($0, 'c'), 'a')]): rowcount = 100.0, cumulative cost = {20.0 rows, 20.1 cpu, 0.0 io}, id = 23
ElasticsearchTableScan(table=[[elastic, nested]]): rowcount = 100.0, cumulative cost = {10.0 rows, 10.100000000000001 cpu, 0.0 io}, id = 1
at org.apache.calcite.avatica.Helper.createException(Helper.java:56)
at org.apache.calcite.avatica.Helper.createException(Helper.java:41)
at org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:163)
at org.apache.calcite.avatica.AvaticaStatement.executeQuery(AvaticaStatement.java:227)
at org.apache.calcite.test.CalciteAssert.assertQuery(CalciteAssert.java:534)
at org.apache.calcite.test.CalciteAssert$AssertQuery.lambda$returns$1(CalciteAssert.java:1535)
at org.apache.calcite.test.CalciteAssert$AssertQuery.withConnection(CalciteAssert.java:1474)
at org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1533)
at org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1523)
at org.apache.calcite.test.CalciteAssert$AssertQuery.returns(CalciteAssert.java:1486)
at org.apache.calcite.adapter.elasticsearch.Projection2Test.projectionNested(Projection2Test.java:134)
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:498)
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:675)
at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:125)
at org.junit.jupiter.engine.extension.TimeoutInvocation.proceed(TimeoutInvocation.java:46)
at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:139)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:131)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:81)
at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:104)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:62)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:43)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:35)
at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:202)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:198)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:135)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:171)
at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.invokeAll(ForkJoinPoolHierarchicalTestExecutorService.java:115)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:171)
at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.invokeAll(ForkJoinPoolHierarchicalTestExecutorService.java:115)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:171)
at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Suppressed: org.apache.calcite.util.TestUtil$ExtraInformation: With materializationsEnabled=false, limit=0
at org.apache.calcite.util.TestUtil.rethrow(TestUtil.java:324)
at org.apache.calcite.test.CalciteAssert.assertQuery(CalciteAssert.java:566)
... 64 more
Caused by: java.lang.IllegalStateException: Unable to implement ElasticsearchToEnumerableConverter: rowcount = 100.0, cumulative cost = {30.0 rows, 30.1 cpu, 0.0 io}, id = 25
ElasticsearchProject(a=[ITEM(ITEM($0, 'c'), 'a')]): rowcount = 100.0, cumulative cost = {20.0 rows, 20.1 cpu, 0.0 io}, id = 23
ElasticsearchTableScan(table=[[elastic, nested]]): rowcount = 100.0, cumulative cost = {10.0 rows, 10.100000000000001 cpu, 0.0 io}, id = 1
at org.apache.calcite.adapter.enumerable.EnumerableRelImplementor.implementRoot(EnumerableRelImplementor.java:114)
at org.apache.calcite.adapter.enumerable.EnumerableInterpretable.toBindable(EnumerableInterpretable.java:113)
at org.apache.calcite.prepare.CalcitePrepareImpl$CalcitePreparingStmt.implement(CalcitePrepareImpl.java:1130)
at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:318)
at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:215)
at org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:647)
at org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:513)
at org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:483)
at org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:236)
at org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:562)
at org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:675)
at org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:156)
... 66 more
Suppressed: java.lang.IllegalArgumentException: Translation of ITEM(ITEM($0, 'c'), 'a') is not supported by ElasticsearchProject
at org.apache.calcite.adapter.elasticsearch.ElasticsearchRules$RexToElasticsearchTranslator.visitCall(ElasticsearchRules.java:180)
at org.apache.calcite.adapter.elasticsearch.ElasticsearchRules$RexToElasticsearchTranslator.visitCall(ElasticsearchRules.java:138)
at org.apache.calcite.rex.RexCall.accept(RexCall.java:189)
at org.apache.calcite.adapter.elasticsearch.ElasticsearchProject.implement(ElasticsearchProject.java:76)
at org.apache.calcite.adapter.elasticsearch.ElasticsearchRel$Implementor.visitChild(ElasticsearchRel.java:129)
at org.apache.calcite.adapter.elasticsearch.ElasticsearchToEnumerableConverter.implement(ElasticsearchToEnumerableConverter.java:67)
at org.apache.calcite.adapter.enumerable.EnumerableRelImplementor.implementRoot(EnumerableRelImplementor.java:111)
... 77 more
{noformat}
> Unable to query nested field in elasticsearch adapter
> -----------------------------------------------------
>
> Key: CALCITE-4441
> URL: https://issues.apache.org/jira/browse/CALCITE-4441
> Project: Calcite
> Issue Type: Bug
> Affects Versions: 1.26.0
> Reporter: Vova Vysotskyi
> Priority: Major
>
> The following test added to {{Projection2Test}} class:
> {code:java}
> @Test void projectionNested() {
> CalciteAssert.that()
> .with(newConnectionFactory())
> .query(
> String.format(Locale.ROOT, "select _MAP['b']['c']['a'] as \"a\" from \"elastic\".\"%s\"", NAME))
> .returns("a=foo\n");
> }
> {code}
> fails with the following error:
> {noformat}
> Error while executing SQL "select _MAP['b']['c']['a'] as "a" from "elastic"."nested"": Unable to implement ElasticsearchToEnumerableConverter: rowcount = 100.0, cumulative cost = {30.0 rows, 30.1 cpu, 0.0 io}, id = 25
> ElasticsearchProject(a=[ITEM(ITEM(ITEM($0, 'b'), 'c'), 'a')]): rowcount = 100.0, cumulative cost = {20.0 rows, 20.1 cpu, 0.0 io}, id = 23
> ElasticsearchTableScan(table=[[elastic, nested]]): rowcount = 100.0, cumulative cost = {10.0 rows, 10.100000000000001 cpu, 0.0 io}, id = 1
> java.sql.SQLException: Error while executing SQL "select _MAP['b']['c']['a'] as "a" from "elastic"."nested"": Unable to implement ElasticsearchToEnumerableConverter: rowcount = 100.0, cumulative cost = {30.0 rows, 30.1 cpu, 0.0 io}, id = 25
> ElasticsearchProject(a=[ITEM(ITEM(ITEM($0, 'b'), 'c'), 'a')]): rowcount = 100.0, cumulative cost = {20.0 rows, 20.1 cpu, 0.0 io}, id = 23
> ElasticsearchTableScan(table=[[elastic, nested]]): rowcount = 100.0, cumulative cost = {10.0 rows, 10.100000000000001 cpu, 0.0 io}, id = 1
> {noformat}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)