Open Zelin1203 opened 3 months ago
@Zelin1203 your stack trace indicates that you're using MySql, can you confirm that and also please share your full catalog configuration? /cc @jbonofre
You are using MySQL according to Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''') LIMIT 1' at line
MySQL is not yet supported as backend (PostgreSQL is OK). I'm working on an improvement to support more backends smoothly.
@Zelin1203 your stack trace indicates that you're using MySql, can you confirm that and also please share your full catalog configuration? /cc @jbonofre
Yes, i am using MySql.The catalog is as follow 'type'='iceberg', 'catalog-impl'='org.apache.iceberg.jdbc.JdbcCatalog', 'warehouse' = 'oss://%s', 'io-impl'='org.apache.iceberg.aliyun.oss.OSSFileIO', 'oss.endpoint' = 'oss-eu-central-1-internal.aliyuncs.com', 'client.access-key-id' = '%s', 'client.access-key-secret' = '%s', 'uri' = 'jdbc:mysql://%s:3306/iceberg', 'jdbc.user' = '%s', 'jdbc.password' = '%s',
You are using MySQL according to
Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''') LIMIT 1' at line
MySQL is not yet supported as backend (PostgreSQL is OK). I'm working on an improvement to support more backends smoothly.
Thanks.
@jbonofre I believe JDBC + MySql used to work as there have been users using it in the past that reported other issues, which we then fixed as part of https://github.com/apache/iceberg/pull/6338
Before my changes, I remember to have issue with MySQL (whereas it was working fine with PostgreSQL). I will double check.
I confirmed that the breaking change has been introduced by https://github.com/apache/iceberg/pull/8340 (the ESCAPE
). Once I removed the ESCAPE
from the two SQL statements, it started to work with MySQL, so I think we should fix this.
@nastra yes, I agree. Let me fix that and verify with MySQL.
@nastra @amogh-jahagirdar can you guys assign this issue to me ?
I have two works in progress on that:
LIKE
and ESCAPE
.dialect
support I started, allowing to have SQL statements specific to backends (like MySQL).
Apache Iceberg version
1.5.0 (latest release)
Query engine
Flink
Please describe the bug 🐞
I use jdbc catalog. When I update flink from 1.17.1 to 1.18.1 and iceberg from 1.4.2 to 1.5.0, the exception is throwed.
Caused by: org.apache.iceberg.jdbc.UncheckedSQLException: Failed to execute exists query: SELECT table_namespace FROM iceberg_tables WHERE catalog_name = ? AND (table_namespace = ? OR tablenamespace LIKE ? ESCAPE '\') LIMIT 1 at org.apache.iceberg.jdbc.JdbcUtil.exists(JdbcUtil.java:793) ~[iceberg-flink-runtime-1.18-1.5.0.jar:?] at org.apache.iceberg.jdbc.JdbcUtil.namespaceExists(JdbcUtil.java:761) ~[iceberg-flink-runtime-1.18-1.5.0.jar:?] at org.apache.iceberg.jdbc.JdbcCatalog.namespaceExists(JdbcCatalog.java:591) ~[iceberg-flink-runtime-1.18-1.5.0.jar:?] at org.apache.iceberg.jdbc.JdbcCatalog.loadNamespaceMetadata(JdbcCatalog.java:475) ~[iceberg-flink-runtime-1.18-1.5.0.jar:?] at org.apache.iceberg.flink.FlinkCatalog.getDatabase(FlinkCatalog.java:192) ~[iceberg-flink-runtime-1.18-1.5.0.jar:?] at org.apache.iceberg.flink.FlinkCatalog.databaseExists(FlinkCatalog.java:204) ~[iceberg-flink-runtime-1.18-1.5.0.jar:?] at org.apache.flink.table.catalog.CatalogManager.lambda$permanentDatabaseExists$14(CatalogManager.java:891) ~[flink-table-api-java-uber-1.18-SNAPSHOT.jar:1.18-SNAPSHOT] at java.util.Optional.map(Unknown Source) ~[?:?] at org.apache.flink.table.catalog.CatalogManager.permanentDatabaseExists(CatalogManager.java:891) ~[flink-table-api-java-uber-1.18-SNAPSHOT.jar:1.18-SNAPSHOT] at org.apache.flink.table.catalog.CatalogManager.schemaExists(CatalogManager.java:879) ~[flink-table-api-java-uber-1.18-SNAPSHOT.jar:1.18-SNAPSHOT] at org.apache.flink.table.planner.catalog.CatalogCalciteSchema.getSubSchema(CatalogCalciteSchema.java:61) ~[?:?] at org.apache.calcite.jdbc.SimpleCalciteSchema.getImplicitSubSchema(SimpleCalciteSchema.java:111) ~[?:?] at org.apache.calcite.jdbc.CalciteSchema.getSubSchema(CalciteSchema.java:271) ~[?:?] at org.apache.calcite.sql.validate.EmptyScope.resolve(EmptyScope.java:135) ~[?:?] at org.apache.calcite.sql.validate.EmptyScope.resolveTable(EmptyScope.java:101) ~[?:?] at org.apache.calcite.sql.validate.DelegatingScope.resolveTable(DelegatingScope.java:214) ~[?:?] at org.apache.calcite.sql.validate.IdentifierNamespace.resolveImpl(IdentifierNamespace.java:116) ~[?:?] at org.apache.calcite.sql.validate.IdentifierNamespace.validateImpl(IdentifierNamespace.java:188) ~[?:?] at org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:89) ~[?:?] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:1050) ~[?:?] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:1025) ~[?:?] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3294) ~[?:?] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3276) ~[?:?] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:3603) ~[?:?] at org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:64) ~[?:?] at org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:89) ~[?:?] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:1050) ~[?:?] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:1025) ~[?:?] at org.apache.calcite.sql.SqlSelect.validate(SqlSelect.java:248) ~[?:?] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:1000) ~[?:?] at org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:749) ~[?:?] at org.apache.flink.table.planner.calcite.FlinkPlannerImpl.org$apache$flink$table$planner$calcite$FlinkPlannerImpl$$validate(FlinkPlannerImpl.scala:196) ~[?:?] at org.apache.flink.table.planner.calcite.FlinkPlannerImpl.validate(FlinkPlannerImpl.scala:117) ~[?:?] at org.apache.flink.table.planner.operations.SqlNodeToOperationConversion.convert(SqlNodeToOperationConversion.java:261) ~[?:?] at org.apache.flink.table.planner.delegation.ParserImpl.parse(ParserImpl.java:106) ~[?:?] at org.apache.flink.table.api.internal.TableEnvironmentImpl.sqlQuery(TableEnvironmentImpl.java:708) ~[flink-table-api-java-uber-1.18-SNAPSHOT.jar:1.18-SNAPSHOT] at com.transsion.trancare.realtime.ads.ADSStabilityAppCrashWarningHourly$.main(ADSStabilityAppCrashWarningHourly.scala:121) ~[?:?] at com.transsion.trancare.realtime.ads.ADSStabilityAppCrashWarningHourly.main(ADSStabilityAppCrashWarningHourly.scala) ~[?:?] at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:?] at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:?] at java.lang.reflect.Method.invoke(Unknown Source) ~[?:?] at org.apache.flink.client.program.PackagedProgram.callMainMethod(PackagedProgram.java:355) ~[flink-dist-1.18-SNAPSHOT.jar:1.18-SNAPSHOT] at org.apache.flink.client.program.PackagedProgram.invokeInteractiveModeForExecution(PackagedProgram.java:222) ~[flink-dist-1.18-SNAPSHOT.jar:1.18-SNAPSHOT] at org.apache.flink.client.ClientUtils.executeProgram(ClientUtils.java:105) ~[flink-dist-1.18-SNAPSHOT.jar:1.18-SNAPSHOT] at org.apache.flink.client.deployment.application.ApplicationDispatcherBootstrap.runApplicationEntryPoint(ApplicationDispatcherBootstrap.java:301) ~[flink-dist-1.18-SNAPSHOT.jar:1.18-SNAPSHOT] at org.apache.flink.client.deployment.application.ApplicationDispatcherBootstrap.lambda$runApplicationAsync$2(ApplicationDispatcherBootstrap.java:254) ~[flink-dist-1.18-SNAPSHOT.jar:1.18-SNAPSHOT] at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:?] at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:?] at org.apache.flink.runtime.concurrent.pekko.ActorSystemScheduledExecutorAdapter$ScheduledFutureTask.run(ActorSystemScheduledExecutorAdapter.java:172) ~[?:?] at org.apache.flink.runtime.concurrent.ClassLoadingUtils.runWithContextClassLoader(ClassLoadingUtils.java:68) ~[flink-dist-1.18-SNAPSHOT.jar:1.18-SNAPSHOT] at org.apache.flink.runtime.concurrent.ClassLoadingUtils.lambda$withContextClassLoader$0(ClassLoadingUtils.java:41) ~[flink-dist-1.18-SNAPSHOT.jar:1.18-SNAPSHOT] ... 7 more Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''\') LIMIT 1' at line 1 at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:121) ~[mysql-connector-j-8.0.33.jar:8.0.33] at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-j-8.0.33.jar:8.0.33] at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916) ~[mysql-connector-j-8.0.33.jar:8.0.33] at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:972) ~[mysql-connector-j-8.0.33.jar:8.0.33] at org.apache.iceberg.jdbc.JdbcUtil.lambda$exists$4(JdbcUtil.java:783) ~[iceberg-flink-runtime-1.18-1.5.0.jar:?] at org.apache.iceberg.ClientPoolImpl.run(ClientPoolImpl.java:58) ~[iceberg-flink-runtime-1.18-1.5.0.jar:?] at org.apache.iceberg.ClientPoolImpl.run(ClientPoolImpl.java:51) ~[iceberg-flink-runtime-1.18-1.5.0.jar:?] at org.apache.iceberg.jdbc.JdbcUtil.exists(JdbcUtil.java:776) ~[iceberg-flink-runtime-1.18-1.5.0.jar:?] at org.apache.iceberg.jdbc.JdbcUtil.namespaceExists(JdbcUtil.java:761) ~[iceberg-flink-runtime-1.18-1.5.0.jar:?] at org.apache.iceberg.jdbc.JdbcCatalog.namespaceExists(JdbcCatalog.java:591) ~[iceberg-flink-runtime-1.18-1.5.0.jar:?] at org.apache.iceberg.jdbc.JdbcCatalog.loadNamespaceMetadata(JdbcCatalog.java:475) ~[iceberg-flink-runtime-1.18-1.5.0.jar:?] at org.apache.iceberg.flink.FlinkCatalog.getDatabase(FlinkCatalog.java:192) ~[iceberg-flink-runtime-1.18-1.5.0.jar:?] at org.apache.iceberg.flink.FlinkCatalog.databaseExists(FlinkCatalog.java:204) ~[iceberg-flink-runtime-1.18-1.5.0.jar:?] at org.apache.flink.table.catalog.CatalogManager.lambda$permanentDatabaseExists$14(CatalogManager.java:891) ~[flink-table-api-java-uber-1.18-SNAPSHOT.jar:1.18-SNAPSHOT] at java.util.Optional.map(Unknown Source) ~[?:?] at org.apache.flink.table.catalog.CatalogManager.permanentDatabaseExists(CatalogManager.java:891) ~[flink-table-api-java-uber-1.18-SNAPSHOT.jar:1.18-SNAPSHOT] at org.apache.flink.table.catalog.CatalogManager.schemaExists(CatalogManager.java:879) ~[flink-table-api-java-uber-1.18-SNAPSHOT.jar:1.18-SNAPSHOT] at org.apache.flink.table.planner.catalog.CatalogCalciteSchema.getSubSchema(CatalogCalciteSchema.java:61) ~[?:?] at org.apache.calcite.jdbc.SimpleCalciteSchema.getImplicitSubSchema(SimpleCalciteSchema.java:111) ~[?:?] at org.apache.calcite.jdbc.CalciteSchema.getSubSchema(CalciteSchema.java:271) ~[?:?] at org.apache.calcite.sql.validate.EmptyScope.resolve_(EmptyScope.java:135) ~[?:?] at org.apache.calcite.sql.validate.EmptyScope.resolveTable(EmptyScope.java:101) ~[?:?] at org.apache.calcite.sql.validate.DelegatingScope.resolveTable(DelegatingScope.java:214) ~[?:?] at org.apache.calcite.sql.validate.IdentifierNamespace.resolveImpl(IdentifierNamespace.java:116) ~[?:?] at org.apache.calcite.sql.validate.IdentifierNamespace.validateImpl(IdentifierNamespace.java:188) ~[?:?] at org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:89) ~[?:?] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:1050) ~[?:?] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:1025) ~[?:?] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3294) ~[?:?] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3276) ~[?:?] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:3603) ~[?:?] at org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:64) ~[?:?] at org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:89) ~[?:?] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:1050) ~[?:?] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:1025) ~[?:?] at org.apache.calcite.sql.SqlSelect.validate(SqlSelect.java:248) ~[?:?] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:1000) ~[?:?] at org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:749) ~[?:?] at org.apache.flink.table.planner.calcite.FlinkPlannerImpl.org$apache$flink$table$planner$calcite$FlinkPlannerImpl$$validate(FlinkPlannerImpl.scala:196) ~[?:?] at org.apache.flink.table.planner.calcite.FlinkPlannerImpl.validate(FlinkPlannerImpl.scala:117) ~[?:?] at org.apache.flink.table.planner.operations.SqlNodeToOperationConversion.convert(SqlNodeToOperationConversion.java:261) ~[?:?] at org.apache.flink.table.planner.delegation.ParserImpl.parse(ParserImpl.java:106) ~[?:?] at org.apache.flink.table.api.internal.TableEnvironmentImpl.sqlQuery(TableEnvironmentImpl.java:708) ~[flink-table-api-java-uber-1.18-SNAPSHOT.jar:1.18-SNAPSHOT] at com.transsion.trancare.realtime.ads.ADSStabilityAppCrashWarningHourly$.main(ADSStabilityAppCrashWarningHourly.scala:121) ~[?:?] at com.transsion.trancare.realtime.ads.ADSStabilityAppCrashWarningHourly.main(ADSStabilityAppCrashWarningHourly.scala) ~[?:?] at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:?] at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:?] at java.lang.reflect.Method.invoke(Unknown Source) ~[?:?] at org.apache.flink.client.program.PackagedProgram.callMainMethod(PackagedProgram.java:355) ~[flink-dist-1.18-SNAPSHOT.jar:1.18-SNAPSHOT] at org.apache.flink.client.program.PackagedProgram.invokeInteractiveModeForExecution(PackagedProgram.java:222) ~[flink-dist-1.18-SNAPSHOT.jar:1.18-SNAPSHOT] at org.apache.flink.client.ClientUtils.executeProgram(ClientUtils.java:105) ~[flink-dist-1.18-SNAPSHOT.jar:1.18-SNAPSHOT] at org.apache.flink.client.deployment.application.ApplicationDispatcherBootstrap.runApplicationEntryPoint(ApplicationDispatcherBootstrap.java:301) ~[flink-dist-1.18-SNAPSHOT.jar:1.18-SNAPSHOT] at org.apache.flink.client.deployment.application.ApplicationDispatcherBootstrap.lambda$runApplicationAsync$2(ApplicationDispatcherBootstrap.java:254) ~[flink-dist-1.18-SNAPSHOT.jar:1.18-SNAPSHOT] at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:?] at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:?] at org.apache.flink.runtime.concurrent.pekko.ActorSystemScheduledExecutorAdapter$ScheduledFutureTask.run(ActorSystemScheduledExecutorAdapter.java:172) ~[?:?] at org.apache.flink.runtime.concurrent.ClassLoadingUtils.runWithContextClassLoader(ClassLoadingUtils.java:68) ~[flink-dist-1.18-SNAPSHOT.jar:1.18-SNAPSHOT] at org.apache.flink.runtime.concurrent.ClassLoadingUtils.lambda$withContextClassLoader$0(ClassLoadingUtils.java:41) ~[flink-dist-1.18-SNAPSHOT.jar:1.18-SNAPSHOT] ... 7 more