tongchenkeji 发表于:2023-12-20 19:16:080次点击 已关注取消关注 关注 私信 Flink sql将数组炸开,实现hive的explode函数的效果,还有什么其他好的方式?[阿里云] 暂停朗读为您朗读 Flink sql将数组炸开,实现hive的explode函数的效果,除了用cross join的方式以外,还有什么其他好的方式? 「点点赞赏,手留余香」 赞赏 还没有人赞赏,快来当第一个赞赏的人吧! 海报 阿里云# HIVE122# SQL1285# 实时计算 Flink版3179# 流计算2236
小周sirAM 2023-12-21 6:56:44 1 除了使用CROSS JOIN的方式,Flink SQL还可以使用LATERAL VIEW和TABLE除了使用CROSS JOIN的方式,Flink SQL还可以使用LATERAL VIEW和TABLE API来实现Hive的explode函数的效果。 LATERAL VIEW: SELECT col1, col2, ..., valueFROM table_nameLATERAL VIEW explode(array_column) explodedTable AS value; 其中,table_name是包含数组列的表名,array_column是要炸开的数组列名,col1, col2, ...是表中的其他列名。 TABLE API: import org.apache.flink.table.api.Table;import org.apache.flink.table.api.bridge.java.StreamTableEnvironment;import org.apache.flink.types.Row;// 创建流式表环境StreamTableEnvironment env = StreamTableEnvironment.create(environment);// 注册要操作的表env.executeSql("CREATE TABLE myTable (id INT, array ARRAY) WITH (...)");// 将数组展开为多行数据Table table = env.from("myTable") .as("t", "explode(array) as value") .select("t.id", "value"); 其中,myTable是包含数组列的表名,array是要炸开的数组列名,id是表中的其他列名。
除了使用CROSS JOIN的方式,Flink SQL还可以使用LATERAL VIEW和TABLE除了使用CROSS JOIN的方式,Flink SQL还可以使用LATERAL VIEW和TABLE API来实现Hive的explode函数的效果。
其中,
table_name
是包含数组列的表名,array_column
是要炸开的数组列名,col1, col2, ...
是表中的其他列名。其中,
myTable
是包含数组列的表名,array
是要炸开的数组列名,id
是表中的其他列名。UNNEST。此回答整理自钉群“实时计算Flink产品交流群”