Select * from Employee where EmployeedDepartment in('CSE ')in Flink gives parse exception

zlwx9yxi  于 2023-05-12  发布在  Apache
关注(0)|答案(1)|浏览(182)

我已经尝试了Flink与SQL查询,当我在Flink SQL中使用IN查询时,它给出了错误。
我使用单引号,然后它给出下面的错误,因为内部单引号视为字符。

Class Employee 
private String employeId;
private String employeDepartment;

StreamTableEnvironment streamTable = ..;

Table table = streamTable.sqlQuery(
                            "select * from employee where employeDepartment In ( 'CSE')")

原因:org.apache.calcite.sql.validate. sql验证器异常:传递给IN运算符的值必须在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)在sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)在java.lang.reflect.Constructor.newInstance(Constructor.java:423)在org. apache. calcite. runtime. Resources $ExInstWithCause.ex(Resources.java:505)在org.apache.calcite. runtime.Resources$ExInst.ex(Resources.java:599)处具有兼容类型
我已经尝试了``回勾,然后它给列没有找到。如何在Flink SQL中使用IN查询。我已经传递了类似select * from employee where employeepartment IN(CSE)的值
则它给出在任何表中未找到的CSE列。

bttbmeg0

bttbmeg01#

在SQL中,字符串的文字数组的语法如下:

'{"Alice", "Bob", "Charles", "Daisy"}'

如果employee表中的employeedDepartment字段是一个字符串数组,因为你必须在IN子句中使用相同的类型,它将像这样:

SELECT * FROM employee WHERE employeDepartment IN ('{"CSE"}');

但是,employeedDepartment是一个数组似乎有些奇怪。也许它应该是一个字符串?

相关问题