itinycheng / flink-connector-clickhouse

Flink SQL connector for ClickHouse. Support ClickHouseCatalog and read/write primary data, maps, arrays to clickhouse.
Apache License 2.0
347 stars 149 forks source link

branchs 1.12 SQL validation failed #53

Closed huotianyu closed 10 months ago

huotianyu commented 1 year ago

用的分支1.12,编译后放入工程里,执行sql,校验报错,最简单的sql,select name from student 1.13和1.14同样的代码执行无问题。 跟了下代码:SqlNode parsed = parser.parse(statement);这里出错了,parserImpl.class里 1.12有bug吗?

Exception in thread "main" org.apache.flink.table.api.ValidationException: SQL validation failed. null at org.apache.flink.table.planner.calcite.FlinkPlannerImpl.org$apache$flink$table$planner$calcite$FlinkPlannerImpl$$validate(FlinkPlannerImpl.scala:152) at org.apache.flink.table.planner.calcite.FlinkPlannerImpl.validate(FlinkPlannerImpl.scala:111) at org.apache.flink.table.planner.operations.SqlToOperationConverter.convert(SqlToOperationConverter.java:189) at org.apache.flink.table.planner.delegation.ParserImpl.parse(ParserImpl.java:77) at org.apache.flink.table.api.internal.TableEnvironmentImpl.executeSql(TableEnvironmentImpl.java:660) at com.big.data.app.test4.main(test4.java:37) Caused by: java.lang.UnsupportedOperationException at org.apache.flink.connector.clickhouse.catalog.ClickHouseCatalog.getTableStatistics(ClickHouseCatalog.java:452) at org.apache.flink.table.planner.catalog.DatabaseCalciteSchema.extractTableStats(DatabaseCalciteSchema.java:117) at org.apache.flink.table.planner.catalog.DatabaseCalciteSchema.getStatistic(DatabaseCalciteSchema.java:104) at org.apache.flink.table.planner.catalog.DatabaseCalciteSchema.lambda$getTable$0(DatabaseCalciteSchema.java:81) at java.util.Optional.map(Optional.java:215) at org.apache.flink.table.planner.catalog.DatabaseCalciteSchema.getTable(DatabaseCalciteSchema.java:77) at org.apache.calcite.jdbc.SimpleCalciteSchema.getImplicitTable(SimpleCalciteSchema.java:83) at org.apache.calcite.jdbc.CalciteSchema.getTable(CalciteSchema.java:289) at org.apache.calcite.sql.validate.EmptyScope.resolve_(EmptyScope.java:143) at org.apache.calcite.sql.validate.EmptyScope.resolveTable(EmptyScope.java:99) at org.apache.calcite.sql.validate.DelegatingScope.resolveTable(DelegatingScope.java:203) at org.apache.calcite.sql.validate.IdentifierNamespace.resolveImpl(IdentifierNamespace.java:112) at org.apache.calcite.sql.validate.IdentifierNamespace.validateImpl(IdentifierNamespace.java:184) at org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:84) at org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:1067) at org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:1041) at org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3205) at org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3187) at org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:3461) at org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:60) at org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:84) at org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:1067) at org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:1041) at org.apache.calcite.sql.SqlSelect.validate(SqlSelect.java:232) at org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:1016) at org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:724) at org.apache.flink.table.planner.calcite.FlinkPlannerImpl.org$apache$flink$table$planner$calcite$FlinkPlannerImpl$$validate(FlinkPlannerImpl.scala:147)

itinycheng commented 1 year ago

@huotianyu 确实是Bug,ClickHouseCatalog的一些代码变更没合并到1.12分支; 最好升级到1.13或更高版本使用,1.12版本功能也不完整;

huotianyu commented 1 year ago

谢谢,主要是现在整个项目还在使用1.12这个版本的离线计算,还没法升级到1.13,考虑着可以用clickhouse-connector,就不用1.12的batchenvironment了。 看来不好办呀。

itinycheng commented 1 year ago

谢谢,主要是现在整个项目还在使用1.12这个版本的离线计算,还没法升级到1.13,考虑着可以用clickhouse-connector,就不用1.12的batchenvironment了。 看来不好办呀。

在release-1.13分支下,修改依赖flink的版本到1.12.x,重新打包编译即可,最多修复个编译报错,应该很好解决;

release-1.12版本有点旧,晚些我会修复你说的报错,但最好用1.13分支代码,这个版本在我生产运行比较久,更稳定些;

huotianyu commented 1 year ago

你好,我在release-1.13分支下,修改flink版本到1.12,因为项目用的scala也是2.12,所以也修改了版本。 但是编译后,会在ClickHouseConfigOptions类中出现问题 1.12没有import org.apache.flink.table.catalog.CommonCatalogOptions;这个包 下面函数用的ConfigOptions.key(CommonCatalogOptions.DEFAULT_DATABASE_KEY)也会出错。 public static final ConfigOption DEFAULT_DATABASE = ConfigOptions.key(CommonCatalogOptions.DEFAULT_DATABASE_KEY) .stringType() .noDefaultValue() .withDescription("The ClickHouse default database name.");

如果我根据CommonCatalogOptions类里值,强行把这个default key写死,“default-database”,后续编译问题就更多了。

下面是一些错误信息,担心贴图看不到,贴了文字 org.apache.flink:flink-connector-clickhouse:jar:1.13.2-SNAPSHOT compile AbstractClickHouseOutputFormat.java Error:(10,38) java: 找不到符号 Error:(121,17) java: 找不到符号 Error:(143,70) java: 找不到符号 ClickHouseDynamicTableSink.java ClickHouseCatalogFactory.java ClickHouseDynamicTableFactory.java Error:(62,42) java: 找不到符号

itinycheng commented 1 year ago

你好,我在release-1.13分支下,修改flink版本到1.12,因为项目用的scala也是2.12,所以也修改了版本。 但是编译后,会在ClickHouseConfigOptions类中出现问题 1.12没有import org.apache.flink.table.catalog.CommonCatalogOptions;这个包 下面函数用的ConfigOptions.key(CommonCatalogOptions.DEFAULT_DATABASE_KEY)也会出错。 public static final ConfigOption DEFAULT_DATABASE = ConfigOptions.key(CommonCatalogOptions.DEFAULT_DATABASE_KEY) .stringType() .noDefaultValue() .withDescription("The ClickHouse default database name.");

如果我根据CommonCatalogOptions类里值,强行把这个default key写死,“default-database”,后续编译问题就更多了。

下面是一些错误信息,担心贴图看不到,贴了文字 org.apache.flink:flink-connector-clickhouse:jar:1.13.2-SNAPSHOT compile AbstractClickHouseOutputFormat.java Error:(10,38) java: 找不到符号 Error:(121,17) java: 找不到符号 Error:(143,70) java: 找不到符号 ClickHouseDynamicTableSink.java ClickHouseCatalogFactory.java ClickHouseDynamicTableFactory.java Error:(62,42) java: 找不到符号

在release-1.13分支编译1.12的flink版本确实需要修改不少内容,之前我想法错误; release-1.12分支只支持sink操作,切换到分支看下readme; 使用catalog进行sink操作,我本地测试是正常的; 如果用source,最低版本要求是1.13;