删除 HIVE 中的部分字符串
Deleting Part of a string in HIVE
我正在尝试删除 HIVE 中的字符串的一部分。我想删除列中所有记录的最后十一个字符。数据如下:
1018492743|0001-01-01
我希望它看起来像:
1018492743
我试过的代码如下:
Select 右(a.ord_id, len(a.ord_id)-ll)
它不起作用,因为 len 不是 HIVE 中的函数
我遇到的另一个问题是一些记录的格式已经正确。这是否意味着我需要创建一个 case 语句来检查这个?
您可以使用正则表达式提取 |
字符前的数字:
hive> select regexp_extract('1018492743|0001-01-01','([0-9]*)\|',1);
OK
1018492743
或使用 substr 获取前 10 个字符:
hive> select substr('1018492743|0001-01-01',1,10);
OK
1018492743
或者完全像您描述的那样使用 length 和 substr 来获取没有最后 11 个字符的子字符串:
hive> select substr('1018492743|0001-01-01',1,length('1018492743|0001-01-01')-11);
OK
1018492743
使用 split()
的另一种解决方案:
hive> select split('1018492743|0001-01-01','\|')[0];
OK
1018492743
在此处查看文档:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
hive> select substring_index('1018492743|0001-01-01','|',1);
OK
1018492743
要从字符串中删除最后 11 个字符,您可以使用:
hive> select substr('1018492743|0001-01-01',1, length('1018492743|0001-01-01')-11);
好的
1018492743
我正在尝试删除 HIVE 中的字符串的一部分。我想删除列中所有记录的最后十一个字符。数据如下:
1018492743|0001-01-01
我希望它看起来像:
1018492743
我试过的代码如下:
Select 右(a.ord_id, len(a.ord_id)-ll)
它不起作用,因为 len 不是 HIVE 中的函数
我遇到的另一个问题是一些记录的格式已经正确。这是否意味着我需要创建一个 case 语句来检查这个?
您可以使用正则表达式提取 |
字符前的数字:
hive> select regexp_extract('1018492743|0001-01-01','([0-9]*)\|',1);
OK
1018492743
或使用 substr 获取前 10 个字符:
hive> select substr('1018492743|0001-01-01',1,10);
OK
1018492743
或者完全像您描述的那样使用 length 和 substr 来获取没有最后 11 个字符的子字符串:
hive> select substr('1018492743|0001-01-01',1,length('1018492743|0001-01-01')-11);
OK
1018492743
使用 split()
的另一种解决方案:
hive> select split('1018492743|0001-01-01','\|')[0];
OK
1018492743
在此处查看文档:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
hive> select substring_index('1018492743|0001-01-01','|',1);
OK
1018492743
要从字符串中删除最后 11 个字符,您可以使用:
hive> select substr('1018492743|0001-01-01',1, length('1018492743|0001-01-01')-11);
好的 1018492743