[ https://issues.apache.org/jira/browse/BEAM-8083?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16914569#comment-16914569 ]
Rui Wang edited comment on BEAM-8083 at 8/23/19 7:48 PM: --------------------------------------------------------- Hi Gleb, Missing support of INT32 it is because https://github.com/apache/beam/blob/master/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlAnalyzer.java#L100. If you set the mode to ProductMode.PRODUCT_INTERNAL, INT32 in analyzer support will back. PPRODUCT_EXTERNAL actually disables INT32 type in analyzer directly. You can think of the external mode is a subset of internal mode without sacrificing too much: INT64 can represent INT32 , etc. However I don't remember to what extend, we support INT32 in Beam ZetaSQL. If on your side you have to use INT32, it would make sense to add the control of mode in BeamSqlPipelineOption so we can open/close it on demand. Supporting INT32 will be very straightforward or already partially exists in Beam ZetaSQL. was (Author: amaliujia): Hi Gleb, Missing support of INT32 it is because https://github.com/apache/beam/blob/master/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/zetasql/SqlAnalyzer.java#L100. If you set the mode to ProductMode.PRODUCT_INTERNAL, INT32 support will back. PPRODUCT_EXTERNAL actually disables INT32 type in analyzer directly. You can think of the external mode is a subset of internal mode without sacrificing too much: INT64 can represent INT32 , etc. If on your side you have to use INT32, it would make sense to add the control of mode in BeamSqlPipelineOption so we can open/close it on demand. Supporting int32 will be very straightforward or already partially exists. > Support INT32 type > ------------------ > > Key: BEAM-8083 > URL: https://issues.apache.org/jira/browse/BEAM-8083 > Project: Beam > Issue Type: Sub-task > Components: dsl-sql-zetasql > Reporter: Gleb Kanterov > Priority: Critical > > Test to reproduce > {code} > @Test > public void selectInt32Parameter() { > String sql = "SELECT @p0"; > ImmutableMap<String, Value> params = ImmutableMap.of("p0", > Value.createInt32Value(123)); > ZetaSQLQueryPlanner zetaSQLQueryPlanner = new ZetaSQLQueryPlanner(config); > BeamRelNode beamRelNode = zetaSQLQueryPlanner.convertToBeamRel(sql, > params); > PCollection<Row> stream = BeamSqlRelUtils.toPCollection(pipeline, > beamRelNode); > final Schema schema = Schema.builder().addInt32Field("field1").build(); > > PAssert.that(stream).containsInAnyOrder(Row.withSchema(schema).addValues(123).build()); > > pipeline.run().waitUntilFinish(Duration.standardMinutes(PIPELINE_EXECUTION_WAITTIME_MINUTES)); > } > {code} > {code} > Parameter p0 has unsupported type: INT32 > org.apache.beam.repackaged.sql.com.google.zetasql.SqlException: Parameter p0 > has unsupported type: INT32 > at > org.apache.beam.repackaged.sql.com.google.zetasql.Analyzer.analyzeStatement(Analyzer.java:57) > at > org.apache.beam.sdk.extensions.sql.zetasql.SqlAnalyzer.lambda$addBuiltinFunctionsToCatalog$1(SqlAnalyzer.java:149) > at > java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) > at > java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) > at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482) > at > java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472) > at > java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) > at > java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) > at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) > at > java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) > at > org.apache.beam.sdk.extensions.sql.zetasql.SqlAnalyzer.addBuiltinFunctionsToCatalog(SqlAnalyzer.java:157) > at > org.apache.beam.sdk.extensions.sql.zetasql.SqlAnalyzer.createPopulatedCatalog(SqlAnalyzer.java:130) > at > org.apache.beam.sdk.extensions.sql.zetasql.SqlAnalyzer.analyze(SqlAnalyzer.java:90) > at > org.apache.beam.sdk.extensions.sql.zetasql.SqlAnalyzer$Builder.analyze(SqlAnalyzer.java:275) > at > org.apache.beam.sdk.extensions.sql.zetasql.ZetaSQLPlannerImpl.rel(ZetaSQLPlannerImpl.java:135) > at > org.apache.beam.sdk.extensions.sql.zetasql.ZetaSQLQueryPlanner.parseQuery(ZetaSQLQueryPlanner.java:92) > at > org.apache.beam.sdk.extensions.sql.zetasql.ZetaSQLQueryPlanner.convertToBeamRel(ZetaSQLQueryPlanner.java:80) > at > org.apache.beam.sdk.extensions.sql.zetasql.ZetaSQLDialectSpecZetaSQLTest.selectInt32Parameter(ZetaSQLDialectSpecZetaSQLTest.java:3204) > 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.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59) > at > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) > at > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56) > at > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) > at > org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) > at > org.apache.beam.sdk.testing.TestPipeline$1.evaluate(TestPipeline.java:319) > at > org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:265) > at > org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100) > at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:349) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63) > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:314) > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:312) > at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:292) > at org.junit.runners.ParentRunner.run(ParentRunner.java:396) > at > org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110) > at > org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58) > at > org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38) > at > org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62) > at > org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) > 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.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) > at > org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) > at > org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) > at > org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) > at com.sun.proxy.$Proxy2.processTestClass(Unknown Source) > at > org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:118) > 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.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) > at > org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) > at > org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:175) > at > org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:157) > at > org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) > at > org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) > at > org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) > at > org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) > at java.lang.Thread.run(Thread.java:748) > Caused by: > org.apache.beam.repackaged.sql.com.google.zetasql.io.grpc.StatusRuntimeException: > INVALID_ARGUMENT: Parameter p0 has unsupported type: INT32 > at > org.apache.beam.repackaged.sql.com.google.zetasql.io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:233) > at > org.apache.beam.repackaged.sql.com.google.zetasql.io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:214) > at > org.apache.beam.repackaged.sql.com.google.zetasql.io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:139) > at > org.apache.beam.repackaged.sql.com.google.zetasql.ZetaSqlLocalServiceGrpc$ZetaSqlLocalServiceBlockingStub.analyze(ZetaSqlLocalServiceGrpc.java:1232) > at > org.apache.beam.repackaged.sql.com.google.zetasql.Analyzer.analyzeStatement(Analyzer.java:55) > ... 68 more > {code} -- This message was sent by Atlassian Jira (v8.3.2#803003)