Closed zenvzenv closed 1 year ago
@zenvzenv 这个看起来应该是flink没 projection column;把count(1)换成具count(column_name)应该就可以了; 类似问题详细可以关注:https://github.com/itinycheng/flink-connector-clickhouse/pull/65
非常感谢你的回复 @itinycheng
按照你说的方式我对代码进行了修改,我将 count(1)
换成了 count(具体的字段)
,代码没有报错,但好像结果不是我预期的那样。修改后的代码如下所示:
public static void main(String[] args) {
EnvironmentSettings settings = EnvironmentSettings
.newInstance()
.inStreamingMode()
.useBlinkPlanner()
.build();
TableEnvironment tEnv = TableEnvironment.create(settings);
Map<String, String> props = new HashMap<>();
props.put(ClickHouseConfig.DATABASE_NAME, "default");
props.put(ClickHouseConfig.TABLE_NAME, "lineorder_flat");
props.put(ClickHouseConfig.URL, "clickhouse://20.20.44.223:8123");
props.put(ClickHouseConfig.USERNAME, "default");
props.put(ClickHouseConfig.PASSWORD, "123456");
props.put(ClickHouseConfig.SINK_FLUSH_INTERVAL, "30s");
Catalog cHcatalog = new ClickHouseCatalog("clickhouse", props);
tEnv.registerCatalog("clickhouse", cHcatalog);
tEnv.useCatalog("clickhouse");
System.out.println(System.currentTimeMillis());
TableResult tableResult = tEnv.executeSql("select count(LO_ORDERKEY) from lineorder_flat");
tableResult.print();
System.out.println(System.currentTimeMillis());
}
返回的结果是:
| +U | 21393709 |
| -U | 21393709 |
| +U | 21393710 |
我理解的是应该是返回一个数字,这个返回结果有点看不懂。 还有就是读取速度有点慢,我的测试表里面有1亿条数据,上面的程序需要运行很久
非常感谢你的回复 @itinycheng 按照你说的方式我对代码进行了修改,我将
count(1)
换成了count(具体的字段)
,代码没有报错,但好像结果不是我预期的那样。修改后的代码如下所示:public static void main(String[] args) { EnvironmentSettings settings = EnvironmentSettings .newInstance() .inStreamingMode() .useBlinkPlanner() .build(); TableEnvironment tEnv = TableEnvironment.create(settings); Map<String, String> props = new HashMap<>(); props.put(ClickHouseConfig.DATABASE_NAME, "default"); props.put(ClickHouseConfig.TABLE_NAME, "lineorder_flat"); props.put(ClickHouseConfig.URL, "clickhouse://20.20.44.223:8123"); props.put(ClickHouseConfig.USERNAME, "default"); props.put(ClickHouseConfig.PASSWORD, "123456"); props.put(ClickHouseConfig.SINK_FLUSH_INTERVAL, "30s"); Catalog cHcatalog = new ClickHouseCatalog("clickhouse", props); tEnv.registerCatalog("clickhouse", cHcatalog); tEnv.useCatalog("clickhouse"); System.out.println(System.currentTimeMillis()); TableResult tableResult = tEnv.executeSql("select count(LO_ORDERKEY) from lineorder_flat"); tableResult.print(); System.out.println(System.currentTimeMillis()); }
返回的结果是:
| +U | 21393709 | | -U | 21393709 | | +U | 21393710 |
我理解的是应该是返回一个数字,这个返回结果有点看不懂。 还有就是读取速度有点慢,我的测试表里面有1亿条数据,上面的程序需要运行很久
@zenvzenv
当前示例中count()
是不会下推到ClickHouse的,在Flink端会有一个count()
aggregator operator,传递给ClickHouse的SQL是select LO_ORDERKEY from lineorder_flat
,返回数据在Flink中做count计算;
这个看起来应该是flink没 projection column;把count(1)换成具count(column_name)应该就可以了;
在table api的情况下,count(column_name) 依旧报错。生成的sql是 select from `database`.`table`
我使用的是 Flink 1.13.2,flink-connector-clickhouse 1.13.2-SNAPSHOT,clickhouse 23.3.1.2823 我的代码如下:
lineorder_flat 表已经事先在 clickhouse 中建好了,表里面也是有数据的。 select count(1) from
default
.lineorder_flat
这条语句在 sql 工具中能够运行。 select 1 能够正常执行返回结果。 但是运行程序报如下错误:还希望指点下~