关闭

Hive(十)--数据类型转换、字符串函数、条件判断

标签: hive数据类型字符串条件
7144人阅读 评论(0) 收藏 举报
分类:

数据类型转换

同Java语言一样,Hive也包括 隐式转换(implicit conversions)和显式转换(explicitly conversions)。
  Hive在需要的时候将会对numeric类型的数据进行隐式转换。比如我们对两个不同数据类型的数字进行比较,假如一个数据类型是INT型,另一个 是SMALLINT类型,那么SMALLINT类型的数据将会被隐式转换地转换为INT类型,这个到底和Java中的一样;但是我们不能隐式地将一个 INT类型的数据转换成SMALLINT或TINYINT类型的数据,这将会返回错误,除非你使用了CAST操作。

  任何整数类型都可以隐式地转换成一个范围更大的类型。TINYINT,SMALLINT,INT,BIGINT,FLOAT和STRING都可以隐式 地转换成DOUBLE;是的你没看出,STRING也可以隐式地转换成DOUBLE!但是你要记住,BOOLEAN类型不能转换为其他任何数据类型!

  下标列出了Hive内置的数据类型之间是否可以进行隐式的转换操作:

  bl tinyint si int bigint float double dm string vc ts date ba
boolean true false false false false false false false false false false false false
tinyint false true true true true true true true true true false false false
smallint false false true true true true true true true true false false false
int false false false true true true true true true true false false false
bigint false false false false true true true true true true false false false
float false false false false false true true true true true false false false
double false false false false false false true true true true false false false
decimal false false false false false false false true true true false false false
string false false false false false false true true true true false false false
varchar false false false false false false true true true true false false false
ts false false false false false false false false true true true false false
date false false false false false false false false true true false true false
binary false false false false false false false false false false false false true
  注:由于表格比较大,这里对一些比较长的字符串进行缩写,ts是timestamp的缩写,bl是boolean的缩写,sl是smallint的缩写,dm是decimal的缩写,vc是varchar的缩写,ba是binary的缩写。

  我们可以用CAST来显式的将一个类型的数据转换成另一个数据类型。如何使用?CAST的语法为cast(value AS TYPE)。举个例子:假如我们一个员工表employees,其中有name、salary等字段;salary是字符串类型的。有如下的查询:

1 SELECT name, salary FROM employees
2 WHERE cast(salary AS FLOAT) <</code> 100000.0;

  这样salary将会显示的转换成float。如果salary是不能转换成float,这时候cast将会返回NULL!
  对cast有一下几点需要说明的:
  (1)、如果将浮点型的数据转换成int类型的,内部操作是通过round()或者floor()函数来实现的,而不是通过cast实现!
  (2)、对于BINARY类型的数据,只能将BINARY类型的数据转换成STRING类型。如果你确信BINARY类型数据是一个数字类型(a number),这时候你可以利用嵌套的cast操作,比如a是一个BINARY,且它是一个数字类型,那么你可以用下面的查询:

1 SELECT (cast(cast(a as string) as double)) from src;

我们也可以将一个String类型的数据转换成BINARY类型。
  (3)、对于Date类型的数据,只能在Date、Timestamp以及String之间进行转换。下表将进行详细的说明:

有效的转换 结果
cast(date as date) 返回date类型
cast(timestamp as date) timestamp中的年/月/日的值是依赖与当地的时区,结果返回date类型
cast(string as date) 如果string是YYYY-MM-DD格式的,则相应的年/月/日的date类型的数据将会返回;但如果string不是YYYY-MM-DD格式的,结果则会返回NULL。
cast(date as timestamp) 基于当地的时区,生成一个对应date的年/月/日的时间戳值
cast(date as string) date所代表的年/月/日时间将会转换成YYYY-MM-DD的字符串。

字符串函数

字符串长度函数:length

 

Java代码  收藏代码
  1. 语法: length(string A)  
  2. 返回值: int  
  3. 说明:返回字符串A的长度  
  4. 举例:  
  5. hive> select length(‘abcedfg’) from dual;  
  6. 7  

 

字符串反转函数:reverse

 

Java代码  收藏代码
  1. 语法: reverse(string A)  
  2. 返回值: string  
  3. 说明:返回字符串A的反转结果  
  4. 举例:  
  5. hive> select reverse(‘abcedfg’) from dual;  
  6. gfdecba  

字符串连接函数:concat

Java代码  收藏代码
  1. 语法: concat(string A, string B…)  
  2. 返回值: string  
  3. 说明:返回输入字符串连接后的结果,支持任意个输入字符串  
  4. 举例:  
  5. hive> select concat(‘abc’,'def’,'gh’) from dual;  
  6. abcdefgh   

带分隔符字符串连接函数:concat_ws

 

Java代码  收藏代码
  1. 语法: concat_ws(string SEP, string A, string B…)  
  2. 返回值: string  
  3. 说明:返回输入字符串连接后的结果,SEP表示各个字符串间的分隔符  
  4. 举例:  
  5. hive> select concat_ws(‘,’,'abc’,'def’,'gh’) from dual;  
  6. abc,def,gh  


字符串截取函数:substr,substring

 

Java代码  收藏代码
  1. 语法: substr(string A, int start),substring(string A, int start)  
  2. 返回值: string  
  3. 说明:返回字符串A从start位置到结尾的字符串  
  4. 举例:  
  5. hive> select substr(‘abcde’,3) from dual;  
  6. cde  
  7. hive> select substring(‘abcde’,3) from dual;  
  8. cde  
  9. hive>  select substr(‘abcde’,-1) from dual;  (和ORACLE相同)  
  10. e  


 

字符串截取函数:substr,substring

 

Java代码  收藏代码
  1. 语法: substr(string A, int start, int len),substring(string A, int start, int len)  
  2. 返回值: string  
  3. 说明:返回字符串A从start位置开始,长度为len的字符串  
  4. 举例:  
  5. hive> select substr(‘abcde’,3,2) from dual;  
  6. cd  
  7. hive> select substring(‘abcde’,3,2) from dual;  
  8. cd  
  9. hive>select substring(‘abcde’,-2,2) from dual;  
  10. de  

 

字符串转大写函数:upper,ucase

 

Java代码  收藏代码
  1. 语法: upper(string A) ucase(string A)  
  2. 返回值: string  
  3. 说明:返回字符串A的大写格式  
  4. 举例:  
  5. hive> select upper(‘abSEd’) from dual;  
  6. ABSED  
  7. hive> select ucase(‘abSEd’) from dual;  
  8. ABSED  

 

字符串转小写函数:lower,lcase

 

Java代码  收藏代码
  1. 语法: lower(string A) lcase(string A)  
  2. 返回值: string  
  3. 说明:返回字符串A的小写格式  
  4. 举例:  
  5. hive> select lower(‘abSEd’) from dual;  
  6. absed  
  7. hive> select lcase(‘abSEd’) from dual;  
  8. absed  

 

去空格函数:trim

 

Java代码  收藏代码
  1. 语法: trim(string A)  
  2. 返回值: string  
  3. 说明:去除字符串两边的空格  
  4. 举例:  
  5. hive> select trim(‘ abc ‘) from dual;  
  6. abc  

 

左边去空格函数:ltrim

 

Java代码  收藏代码
  1. 语法: ltrim(string A)  
  2. 返回值: string  
  3. 说明:去除字符串左边的空格  
  4. 举例:  
  5. hive> select ltrim(‘ abc ‘) from dual;  
  6. abc  

 

右边去空格函数:rtrim

 

Java代码  收藏代码
  1. 语法: rtrim(string A)  
  2. 返回值: string  
  3. 说明:去除字符串右边的空格  
  4. 举例:  
  5. hive> select rtrim(‘ abc ‘) from dual;  
  6. abc  

 

 

正则表达式解析函数:regexp_extract

其中的index,是按照正则字符串()的位置

 

Java代码  收藏代码
  1. 语法: regexp_extract(string subject, string pattern, int index)  
  2. 返回值: string  
  3. 说明:将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。注意,在有些情况下要使用转义字符  
  4. 举例:  
  5. hive> select regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 1) from dual;  
  6. the  
  7. hive> select regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 2) from dual;  
  8. bar  
  9. hive> select regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 0) from dual;  
  10. foothebar  

 

 

函数parse_url,解析URL字符串

 

Java代码  收藏代码
  1. parse_url(url, partToExtract[, key]) - extracts a part from a URL  
  2. 解析URL字符串,partToExtract的选项包含[HOST,PATH,QUERY,REF,PROTOCOL,FILE,AUTHORITY,USERINFO]。  
  3.   
  4. 举例:  
  5. * parse_url('http://facebook.com/path/p1.php?query=1''HOST')返回'facebook.com'   
  6. * parse_url('http://facebook.com/path/p1.php?query=1''PATH')返回'/path/p1.php'   
  7. * parse_url('http://facebook.com/path/p1.php?query=1''QUERY')返回'query=1',  
  8. 可以指定key来返回特定参数,例如  
  9. * parse_url('http://facebook.com/path/p1.php?query=1''QUERY','query')返回'1',  
  10.   
  11. * parse_url('http://facebook.com/path/p1.php?query=1#Ref''REF')返回'Ref'   
  12. * parse_url('http://facebook.com/path/p1.php?query=1#Ref''PROTOCOL')返回'http'  

 

json解析函数:get_json_object

语法: get_json_object(string json_string, string path)

Java代码  收藏代码
  1. 返回值: string  
  2. 说明:解析json的字符串json_string,返回path指定的内容。如果输入的json字符串无效,那么返回NULL。  
  3. 举例:  
  4. hive> select  get_json_object(‘{“store”:  
  5. >   {“fruit”:\[{"weight":8,"type":"apple"},{"weight":9,"type":"pear"}],  
  6. >    “bicycle”:{“price”:19.95,”color”:”red”}  
  7. >   },  
  8. >  “email”:”amy@only_for_json_udf_test.net”,  
  9. >  “owner”:”amy”  
  10. > }  
  11. > ‘,’$.owner’) from dual;  
  12. amy  

 使用实例:

 

Java代码  收藏代码
  1. select get_json_object('{"store":{"fruit":\["aa","bb","cc"]},"owner":"amy"}','$.store.fruit[0]') from test_msg limit 1;  

 

 

空格字符串函数:space

语法: space(int n)

Java代码  收藏代码
  1. 返回值: string  
  2. 说明:返回长度为n的字符串  
  3. 举例:  
  4. hive> select space(10) from dual;  
  5. hive> select length(space(10)) from dual;  
  6. 10  

 

 

重复字符串函数:repeat

语法: repeat(string str, int n)

Java代码  收藏代码
  1. 返回值: string  
  2. 说明:返回重复n次后的str字符串  
  3. 举例:  
  4. hive> select repeat(‘abc’,5) from dual;  
  5. abcabcabcabcabc  

 

 

首字符ascii函数:ascii

语法: ascii(string str)

Java代码  收藏代码
  1. 返回值: int  
  2. 说明:返回字符串str第一个字符的ascii码  
  3. 举例:  
  4. hive> select ascii(‘abcde’) from dual;  
  5. 97  

 

 

左补足函数:lpad

语法: lpad(string str, int len, string pad)

Java代码  收藏代码
  1. 返回值: string  
  2. 说明:将str进行用pad进行左补足到len位  
  3. 举例:  
  4. hive> select lpad(‘abc’,10,’td’) from dual;  
  5. tdtdtdtabc  

 

 

与GP,Oracle不同,pad 不能默认

右补足函数:rpad

语法: rpad(string str, int len, string pad)

Java代码  收藏代码
  1. 返回值: string  
  2. 说明:将str进行用pad进行右补足到len位  
  3. 举例:  
  4. hive> select rpad(‘abc’,10,’td’) from dual;  
  5. abctdtdtdt  

 

 

分割字符串函数: split

语法:  split(string str, string pat)

Java代码  收藏代码
  1. 返回值:  array  
  2. 说明: 按照pat字符串分割str,会返回分割后的字符串数组  
  3. 举例:  
  4. hive> select split(‘abtcdtef’,'t’) from dual;  
  5. ["ab","cd","ef"]  

 

 

集合查找函数: find_in_set

语法: find_in_set(string str, string strList)

Java代码  收藏代码
  1. 返回值: int  
  2. 说明: 返回str在strlist第一次出现的位置,strlist是用逗号分割的字符串。如果没有找该str字符,则返回0  
  3. 举例:  
  4. hive> select find_in_set(‘ab’,'ef,ab,de’) from dual;  
  5. 2  
  6. hive> select find_in_set(‘at’,'ef,ab,de’) from dual;  
  7. 0  


条件判断

CONDITIONAL FUNCTIONS IN HIVE

Hive supports three types of conditional functions. These functions are listed below:

IF( Test Condition, True Value, False Value ) 
The IF condition evaluates the “Test Condition” and if the “Test Condition” is true, then it returns the “True Value”. Otherwise, it returns the False Value.
Example: IF(1=1, 'working', 'not working') returns 'working'

COALESCE( value1,value2,... )

The COALESCE function returns the fist not NULL value from the list of values. If all the values in the list are NULL, then it returns NULL.
Example: COALESCE(NULL,NULL,5,NULL,4) returns 5

CASE Statement

The syntax for the case statement is:
CASE  [ expression ]
  WHEN condition1 THEN result1
  WHEN condition2 THEN result2
  ...
  WHEN conditionn THEN resultn
  ELSE result
END
Here expression is optional. It is the value that you are comparing to the list of conditions. (ie: condition1, condition2, ... conditionn).

All the conditions must be of same datatype. Conditions are evaluated in the order listed. Once a condition is found to be true, the case statement will return the result and not evaluate the conditions any further.

All the results must be of same datatype. This is the value returned once a condition is found to be true.

IF no condition is found to be true, then the case statement will return the value in the ELSE clause. If the ELSE clause is omitted and no condition is found to be true, then the case statement will return NULL

Example: 

CASE Fruit
  WHEN 'APPLE' THEN 'The owner is APPLE'
  WHEN 'ORANGE' THEN 'The owner is ORANGE'
  ELSE 'It is another Fruit'
END
The other form of CASE is

CASE 
  WHEN Fruit = 'APPLE' THEN 'The owner is APPLE'
  WHEN Fruit = 'ORANGE' THEN 'The owner is ORANGE'
  ELSE 'It is another Fruit'
END



0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

hive数据类型及其数据转换

由于需要使用hive sql进行数据查询,同时涉及多个不同类型的字段的组合,看Hive sql的文档相关和资料才知道,hive是支持大部分基础数据类型之间的相互转换的。 那么,hive本身支持哪些数据...
  • zbc1090549839
  • zbc1090549839
  • 2016-04-08 21:39
  • 16785

HIVE 数据类型转换

在《Hive内置数据类型》文 章中,我们提到了Hive内置数据类型由基本数据类型和复杂数据类型组成。今天的话题是Hive数据类型之间的转换。同Java语言一样,Hive也包括 隐式转换(implici...
  • xiaoshunzi111
  • xiaoshunzi111
  • 2017-01-11 14:40
  • 4272

hive对科学计数法字符串的转换

Hive中int , float , double这些数值类型在存储大额度数字时,在前端展现上总是使用科学计数法来表示,例如: hive> select pow(10,8) from dual; ...
  • fengyuanshen
  • fengyuanshen
  • 2015-11-17 10:38
  • 3616

hive常用字符串函数

字符串长度函数:length   Java代码   语法: length(string A)   返回值: int   说明:返回字符串A的长度   举例: ...
  • jamesjxin
  • jamesjxin
  • 2015-09-14 15:38
  • 31406

Hive日期格式转换用法

1.日期函数UNIX时间戳转日期函数: from_unixtime语法:from_unixtime(bigint unixtime[, stringformat])  返回值: string 说明: ...
  • lichangzai
  • lichangzai
  • 2014-02-18 13:32
  • 76659

Hive日期格式转换用法

1.日期函数UNIX时间戳转日期函数: from_unixtime语法:from_unixtime(bigint unixtime[, stringformat]) 返回值: string 说明...
  • leen0304
  • leen0304
  • 2016-12-29 17:13
  • 2971

hive数组字段转字符串

环境:  1. hive版本0.13.0  2. 表test_array有数组字段例如: select c_array  from test_array  where dt='2016-09-2...
  • gongmf
  • gongmf
  • 2016-09-27 15:06
  • 5659

Hive中对科学计数法表示的字符串的转换

Hive中int , float , double这些数值类型在存储大额度数字时,在前端展现上总是使用科学计数法来表示,例如: hive> select pow(10,8) from dua...
  • zreodown
  • zreodown
  • 2013-11-12 18:32
  • 6504

Hive学习之Hive数据类型

Hive到0.13.0版本为止已经支持越来越多的数据类型,像传统数据库中的VCHAR、CHAR、DATE以及所特有的复合类型MAP、STRUCT等。Hive中的数据类型可以分为数值类型、字符串类型、日...
  • sky_walker85
  • sky_walker85
  • 2014-05-29 17:09
  • 22467

Hive函数大全

目录 一、关系运算:... 4 1. 等值比较: =. 4 2. 不等值比较: . 4 3. 小于比较: . 4 4. 小于等于比较: . 4 5. 大于比较: >. 5 6. 大于等于比较: >=....
  • wisgood
  • wisgood
  • 2013-12-17 14:18
  • 106946
    个人资料
    • 访问:436567次
    • 积分:6198
    • 等级:
    • 排名:第4677名
    • 原创:207篇
    • 转载:33篇
    • 译文:0篇
    • 评论:36条
    感谢打赏 微信二维码
    感谢打赏 支付宝二维码
    文章分类
    最新评论