Letitia1208 2019-11-12 10:09 采纳率: 0%
浏览 1989

IMPALA 如何实现一行转多行?

IMPALA 如何实现一行转多行?

或者有没有类似以下Oracle的connect by 用法?

Oracle的写法如下:

WITH AA AS
(
SELECT 'FRUIT' COL1,'APPLE,PEAR,BANANA,STRAWBERRY' COL2 FROM DUAL
)

SELECT aa.col1,aa.col2
       ,regexp_substr(aa.col2,'[^,]+',1,level) str
       ,level
FROM aa
connect by level <= length(aa.col2)-length(replace(aa.col2,',',''))+1
;

输出结果:

图片说明

  • 写回答

1条回答 默认 最新

  • 憧憬blog 2023-03-15 05:10
    关注

    在 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 函数更加灵活而且适用面更广。

    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?