在 Impala 中,可以使用 LATERAL VIEW 和 explode 函数来实现一行转多行的功能。具体操作如下:
假设有以下样例数据:
+-------+---------------------------+
| col1 | col2 |
+-------+---------------------------+
| FRUIT | APPLE,PEAR,BANANA,STRAWBERRY |
+-------+---------------------------+
则可以按照以下方式进行查询:
SELECT col1, str
FROM table_name LATERAL VIEW explode(split(col2,',')) exploded_table AS str
其中,explode 函数会将 col2 字段按照逗号进行切割成多个字符串,然后将每个子字符串展开成一个新的行,从而实现了一行转多行的功能。最后的结果如下:
+-------+-------------+
| col1 | str |
+-------+-------------+
| FRUIT | APPLE |
| FRUIT | PEAR |
| FRUIT | BANANA |
| FRUIT | STRAWBERRY |
+-------+-------------+
需要注意的是,使用这种方式能够获得相同的结果,但是与 Oracle 的 connect by 用法并不一样,Impala 的 LATERAL VIEW 和 explode 函数更加灵活而且适用面更广。