如何根据配置单元中的输入列使用分隔符拆分列

How to split the column with a delimiter based on input column in hive

我在配置单元 werin 中有一个基于输入列“lang”的要求。我在这里寻找语言英语 (eng) 和法语 (fra),此列由分隔符 ';' 分隔。它应该从col1。 并根据语言将其放在 col_eng 或 col_fra 中。

例如:lang 是 bel;fra;eng ,它应该从 col1 中选择相应的法语和英语值,以“;”分隔ABC/WSC;ASA/SAS;ASA/SD 即 ASA/SAS 在 col_fra 和 ASA/SD 到 col_eng.

我在下面列出了一些场景。我尝试使用拆分正则表达式并将其放在 case 语句中,但我无法捕获所有这些场景。

例如:

case when lang like ('eng;fra%') then split(mnemonic,';')[0] as mnemonic_eng,split(mnemonic,';')[1] as mnemonic_fr

有没有更好的办法解决this.Below所有的场景都想要output.Could请大家帮忙

     lang                 col1                  col_eng     col_fra

1   fra;eng             ABC/DEF;EFH/ASD         EFH/ASD      ABC/DEF
2   eng;fra             ABC/DEF;EFH/ASD         ABC/DEF      EFH/ASD
3   bel;fra;eng         ABC/WSC;ASA/SAS;ASA/SD  ASA/SD       ASA/SAS
4   eng;eng;fra         WSX/ASD;WSX/ASD;SEF/DFF WSX/ASD      SEF/DFF
5   eng;fra;rus         QAZ/WER;AST/RS;ASD/DFG  QAZ/WER      AST/RS
6   rum;eng             AQW/WER;WER/DF          WER/DF       null
7   rum;fra;eng         ABC/WSC;ASA/SAS;ASA/SD  ASA/SD      ASA/SAS
8   spa;fra             ASD/AWE;WER/ERT          null       WER/ERT
9   eng                 asd/ert                 asd/ert      null
10  fra                 AWE/ERR                             AWE/ERR
11  fra;eng;rus         ;data_eng;dara_rus     data_eng      null
12  fra;eng             data_fra;                null      data_fra

您可以使用 find_in_set(从 1 开始)计算 'eng' 和 'fra' 的位置,然后将其应用于 split:

生成的数组
select lang, col1, 
       split(col1,'3')[find_in_set('eng',regexp_replace(lang,'3',','))-1] as col_eng,
       split(col1,'3')[find_in_set('fra',regexp_replace(lang,'3',','))-1] as col_fra