createTemporaryView接口注册table时,fieldname支持中横线(-)

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

createTemporaryView接口注册table时,fieldname支持中横线(-)

Jun Zou
Hi,all:
我使用flink1.11.2进行作业开发,由于要兼容内部历史代码,需要把source手动注册成一张表,调用为:

> tableEnv.createTemporaryView(tableSource.getName, source, fields.toArray:
> _*)
>
其中,tableEnv为 StreamTableEnvironment类型,source是 DataStream[Row] 类型,代表source
connector生成的算子,fields是 由处理过的source table的 filed name 转换成的 Expression,将filed
name转换成expression 使用 *ExpressionParser.parseExpression* 这个方法

正常情况下,都能注册成功。
但是,当field name带中横线,如 source中一个字段名称为
“X-Oem”时,经过 ExpressionParser.parseExpression 会被解析为 “minus(X, Model)”
而非预期的“X-Oem”,导致注册成的表与DML语句中操作的字段名不一致报错。

有什么方法能够处理这种情况么?
Reply | Threaded
Open this post in threaded view
|

Re: createTemporaryView接口注册table时,fieldname支持中横线(-)

Qishang Zhong
Hi Jun Zou.
tEnv.createTemporaryView("`Word-Count`", input, $("word"), $("frequency"));
加上 ` 试一下。

Jun Zou <[hidden email]> 于2021年5月26日周三 下午4:33写道:

> Hi,all:
> 我使用flink1.11.2进行作业开发,由于要兼容内部历史代码,需要把source手动注册成一张表,调用为:
>
> > tableEnv.createTemporaryView(tableSource.getName, source, fields.toArray:
> > _*)
> >
> 其中,tableEnv为 StreamTableEnvironment类型,source是 DataStream[Row] 类型,代表source
> connector生成的算子,fields是 由处理过的source table的 filed name 转换成的 Expression,将filed
> name转换成expression 使用 *ExpressionParser.parseExpression* 这个方法
>
> 正常情况下,都能注册成功。
> 但是,当field name带中横线,如 source中一个字段名称为
> “X-Oem”时,经过 ExpressionParser.parseExpression 会被解析为 “minus(X, Model)”
> 而非预期的“X-Oem”,导致注册成的表与DML语句中操作的字段名不一致报错。
>
> 有什么方法能够处理这种情况么?
>