如何根据配置单元中的输入列使用分隔符拆分列
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
我在配置单元 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