Flink sql将数组炸开,实现hive的explode函数的效果,还有什么其他好的方式?[阿里云]

Flink sql将数组炸开,实现hive的explode函数的效果,除了用cross join的方式以外,还有什么其他好的方式?

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
1 条回复 A 作者 M 管理员
  1. 除了使用CROSS JOIN的方式,Flink SQL还可以使用LATERAL VIEW和TABLE除了使用CROSS JOIN的方式,Flink SQL还可以使用LATERAL VIEW和TABLE API来实现Hive的explode函数的效果。

    1. LATERAL VIEW:
    SELECT col1, col2, ..., valueFROM table_nameLATERAL VIEW explode(array_column) explodedTable AS value;

    其中,table_name是包含数组列的表名,array_column是要炸开的数组列名,col1, col2, ...是表中的其他列名。

    1. 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是表中的其他列名。

  2. UNNEST。此回答整理自钉群“实时计算Flink产品交流群”