如何解决Fink SQL - 无法将列表转换为数组
我写了一个小程序来试验 Flink SQL。我正在将 DataStream
转换为 Table
并尝试从该表中读取并将结果输出到标准输出流。数据流的类型为 MyClass
,定义如下:
public static class MyClass {
public @DataTypeHint("ARRAY<INTEGER>") List<Integer> numbers;
public MyClass() {
numbers = new ArrayList<>();
}
public MyClass(Integer ...elements) {
numbers = new ArrayList<>(elements.length);
numbers.addAll(Arrays.asList(elements));
}
}
这是我要运行的代码:
public static void main(String[] args) {
try {
Configuration config = new Configuration();
config.setInteger("rest.port",8093);
StreamExecutionEnvironment bsEnv = StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(config);
EnvironmentSettings bsSettings = EnvironmentSettings.newInstance().useBlinkPlanner().inStreamingMode().build();
StreamTableEnvironment bsTableEnv = StreamTableEnvironment.create(bsEnv,bsSettings);
DataStream<MyClass> inputStream = bsEnv.fromElements(new MyClass(1,2,3),new MyClass(4,5,6,7));
Table table = bsTableEnv.fromDataStream(inputStream);
table.printSchema();
bsTableEnv.executeSql("CREATE TABLE print_table(info INTEGER) WITH ( 'connector' = 'print') ");
bsTableEnv.executeSql("INSERT INTO print_table SELECT numbers[1] FROM " + table);
} catch (Exception e) {
e.printStackTrace();
}
}
我的数据流将有 2 个对象,我将尝试打印出该对象的 numbers 字段的第一个元素。但是,我收到以下消息的异常:
org.apache.flink.table.api.TableException: Type is not supported: ANY
此外,这是打印出来的表的架构:
root
|-- numbers: LEGACY('RAW','ANY<java.util.List>')
为什么我不能在数字字段中使用 [] 运算符?它不应该被视为整数数组而不是 ANY<java.util.List>
吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。