如何在Hive表中按最后一个连字符拆分单列?
在Hive中按最后一个连字符拆分name列并新增new_name列
这里提供两种高效的HiveQL实现方式,满足你拆分最后一个-后提取后缀的需求:
方法1:利用反转+拆分+反转组合
这种方法逻辑直观,适合处理任意数量连字符的场景:
SELECT name, age, reverse(split(reverse(name), '-')[0]) AS new_name FROM your_table;
逻辑说明:
reverse(name):将原字符串反转,比如a-b-c-d_b反转后变成b_d-c-b-asplit(..., '-'):用-拆分反转后的字符串,得到数组["b_d", "c", "b", "a"]- 取数组第一个元素
"b_d",再通过reverse()转回来,最终得到d_b
方法2:利用字符串截取+位置计算
这种方法通过计算最后一个-的位置直接截取,性能更优:
SELECT name, age, substr(name, length(name) - instr(reverse(name), '-') + 2) AS new_name FROM your_table;
逻辑说明:
instr(reverse(name), '-'):找到反转后第一个-的位置,对应原字符串最后一个-到末尾的长度length(name) - instr(...) + 1:计算出原字符串中最后一个-的索引位置substr(name, ... + 2):从最后一个-的下一位开始截取,得到目标后缀
示例验证
输入表数据:
| name | age |
|---|---|
| a-b-c-d_b | 22 |
| d-e-f-g_e | 44 |
执行上述任意SQL后,输出结果:
| name | age | new_name |
|---|---|---|
| a-b-c-d_b | 22 | d_b |
| d-e-f-g_e | 44 | g_e |
内容的提问来源于stack exchange,提问作者Sai Sasidhar
相关产品推荐
相关产品推荐

