Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别(二)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别(二)

3.2 逻辑运算与数学运算


加法操作: +


减法操作: -


乘法操作: *


除法操作: /


取余操作: %


位与操作: &


位或操作: |


位异或操作: ^


位取反操作: ~


逻辑与操作: AND


逻辑或操作: OR


逻辑非操作: NOT


取整函数: round


指定精度取整函数: round


向下取整函数: floor


向上取整函数: ceil


向上取整函数: ceiling


取随机数函数: rand


自然指数函数: exp


以10为底对数函数: log10


以2为底对数函数: log2


对数函数: log


幂运算函数: pow


幂运算函数: power


开平方函数: sqrt


二进制函数: bin


十六进制函数: hex


反转十六进制函数: unhex


进制转换函数: conv


绝对值函数: abs


正取余函数: pmod


正弦函数: sin


反正弦函数: asin


余弦函数: cos


反余弦函数: acos


positive函数: positive


negative函数: negative


UNIX时间戳转日期函数: from_unixtime


获取当前UNIX时间戳函数: unix_timestamp


日期转UNIX时间戳函数: unix_timestamp


指定格式日期转UNIX时间戳函数: unix_timestamp


日期时间转日期函数: to_date


日期转年函数: year


日期转月函数: month


日期转天函数: day


日期转小时函数: hour


日期转分钟函数: minute


日期转秒函数: second


日期转周函数: weekofyear


日期比较函数: datediff


日期增加函数: date_add


日期减少函数: date_sub


If函数: if


非空查找函数: COALESCE


条件判断函数:CASE


字符串长度函数:length


字符串反转函数:reverse


字符串连接函数:concat


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


字符串截取函数:substr,substring


字符串截取函数:substr,substring


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


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


去空格函数:trim


左边去空格函数:ltrim


右边去空格函数:rtrim


正则表达式替换函数:regexp_replace


正则表达式解析函数:regexp_extract


URL解析函数:parse_url


json解析函数:get_json_object


空格字符串函数:space


重复字符串函数:repeat


首字符ascii函数:ascii


左补足函数:lpad


右补足函数:rpad


分割字符串函数: split


集合查找函数: find_in_set


Map类型构建: map


Struct类型构建: struct


array类型构建: array


array类型访问: A[n]


map类型访问: M[key]


struct类型访问: S.x


Map类型长度函数: size(Map<K.V>)


array类型长度函数: size(Array<T>)


类型转换函数


1、加法操作: +


语法: A + B


操作类型:所有数值类型


说明:返回A与B相加的结果。结果的数值类型等于A的类型和B的类型的最小父类型(详见数据类型的继承关系)。比如,int + int 一般结果为int类型,而int + double 一般结果为double类型


举例:hive> select 1 + 9 from dual; 10


2、减法操作: -


语法: A – B


操作类型:所有数值类型


说明:返回A与B相减的结果。结果的数值类型等于A的类型和B的类型的最小父类型(详见数据类型的继承关系)。比如,int – int 一般结果为int类型,而int – double 一般结果为double类型


举例:hive> select 10 – 5 from dual;5


3、乘法操作 : *


语法: A * B


操作类型:所有数值类型


说明:返回A与B相乘的结果。结果的数值类型等于A的类型和B的类型的最小父类型(详见数据类型的继承关系)。注意,如果A乘以B的结果超过默认结果类型的数值范围,则需要通过cast将结果转换成范围更大的数值类型


举例:hive> select 40 * 5 from dual;200


4、除法操作 : /


语法: A / B


操作类型:所有数值类型


说明:返回A除以B的结果。结果的数值类型为double


举例:hive> select 40 / 5 from dual;8.0


注意: hive 中最高精度的数据类型是 double, 只精确到小数点后 16 位,在做除法运算的时候要 特别注意:


hive>select ceil(28.0/6.99999999999999) from dual limit 1; 4
hive>select ceil(28.0/6.99999999999999) from dual limit 1; 5


5、取余操作 : %


语法: A % B


操作类型:所有数值类型


说明:返回A除以B的余数。结果的数值类型等于A的类型和B的类型的最小父类型(详见数据类型的继承关系)。


举例:hive> select 41 % 5 from dual; 1
hive> select 8.4 % 4 from dual; 0.40000000000000036


注意:精度在 hive 中是个很大的问题,类似这样的操作最好通过round 指定精度


hive> select round(8.4 % 4 , 2) from dual;0.4


6、位与操作 : &


语法: A & B


操作类型:所有数值类型


说明:返回A和B按位进行与操作的结果。结果的数值类型等于A的类型和B的类型的最小父类型(详见数据类型的继承关系)。


举例:hive> select 4 & 8 from dual;0
hive> select 6 & 4 from dual;4


7、位或操作 : |


语法: A | B


操作类型:所有数值类型


说明:返回A和B按位进行或操作的结果。结果的数值类型等于A的类型和B的类型的最小父类型(详见数据类型的继承关系)。


举例:hive> select 4 | 8 from dual; 12
hive> select 6 | 8 from dual; 14

8、位异或操作 : ^


语法: A ^ B


操作类型:所有数值类型


说明:返回A和B按位进行异或操作的结果。结果的数值类型等于A的类型和B的类型的最小父类型(详见数据类型的继承关系)。


举例:hive> select 4 ^ 8 from dual; 12
hive> select 6 ^ 4 from dual; 2


9、位取反操作 : ~


语法: ~A


操作类型:所有数值类型


说明:返回A按位取反操作的结果。结果的数值类型等于A的类型。


举例:hive> select ~6 from dual; -7
hive> select ~4 from dual; -5


10、逻辑与操作 : AND


语法: A AND B


操作类型:boolean


说明:如果A和B均为TRUE,则为TRUE;否则为FALSE。如果A为NULL或B为NULL,则为NULL


举例:hive> select 1 from dual where 1=1 and 2=2; 1


11、逻辑或操作 : OR


语法: A OR B


操作类型:boolean


说明:如果A为TRUE,或者B为TRUE,或者A和B均为TRUE,则为TRUE;否则为FALSE


举例:hive> select 1 from dual where 1=2 or 2=2; 1


12、逻辑非操作 : NOT


语法: NOT A


操作类型:boolean


说明:如果A为FALSE,或者A为NULL,则为TRUE;否则为FALSE


举例:hive> select 1 from dual where not 1=2;


13、取整函数 : round


语法: round(double a)


返回值: BIGINT


说明: 返回double类型的整数值部分 (遵循四舍五入)


举例:hive> select round(3.1415926) from dual; 3
hive> select round(3.5) from dual; 4
hive> create table dual as select round(9542.158) fromdual;
hive> describe dual; _c0 bigint


14、指定精度取整函数 : round


语法: round(double a, int d)


返回值: DOUBLE


说明: 返回指定精度d的double类型


举例: hive> selectround(3.1415926,4) from dual; 3.1416


15、向下取整函数 : floor


语法: floor(double a)


返回值: BIGINT


说明: 返回等于或者小于该double变量的最大的整数


举例:hive> select floor(3.1415926) from dual; 3
hive> select floor(25) from dual; 25


16、向上取整函数 : ceil


语法: ceil(double a)


返回值: BIGINT


说明: 返回等于或者大于该double变量的最小的整数


举例:hive> select ceil(3.1415926) from dual; 4
hive> select ceil(46) from dual; 46

17、向上取整函数 : ceiling


语法: ceiling(double a)


返回值: BIGINT


说明: 与ceil功能相同


举例:hive> select ceiling(3.1415926) from dual; 4
hive> select ceiling(46) from dual; 46


18、取随机数函数 : rand


语法: rand(),rand(int seed)


返回值: double


说明: 返回一个0到1范围内的随机数。如果指定种子seed,则会等到一个稳定的随机数序列


举例:hive> select rand() from dual; 0.5577432776034763


19、自然指数函数 : exp


语法: exp(double a)


返回值: double


说明: 返回自然对数e的a次方


举例:hive> select exp(2) from dual; 7.38905609893065


20、自然对数函数: ln


语法: ln(double a)


返回值: double


说明: 返回a的自然对数



21、以 10 为底对数函数 :log10


语法: log10(double a)


返回值: double


说明: 返回以10为底的a的对数


举例:hive> select log10(100) from dual;2.0


22、以 2 为底对数函数 :log2


语法: log2(double a)


返回值: double


说明: 返回以2为底的a的对数


举例:hive> select log2(8) from dual; 3.0


23、对数函数 : log


语法: log(double base, double a)


返回值: double


说明: 返回以base为底的a的对数


举例:hive> select log(4,256) from dual; 4.0


24、幂运算函数 : pow


语法: pow(double a, double p)


返回值: double


说明: 返回a的p次幂


举例:hive> select pow(2,4) from dual; 16.0


25、开平方函数 : sqrt


语法: sqrt(double a)


返回值: double


说明: 返回a的平方根


举例:hive> select sqrt(16) from dual; 4.0


26、二进制函数 : bin


语法: bin(BIGINT a)


返回值: string


说明: 返回a的二进制代码表示


举例:hive> select bin(7) from dual; 111


27、十六进制函数 : hex


语法: hex(BIGINT a)


返回值: string


说明: 如果变量是int类型,那么返回a的十六进制表示;如果变量是string类型,则返回该字符串的十六进制表示


举例:hive> select hex(17) from dual; 11
hive> select hex(‘abc’) from dual; 616263


28、反转十六进制函数 : unhex


语法: unhex(string a)


返回值: string


说明: 返回该十六进制字符串所代码的字符串


举例: hive> selectunhex(‘616263’) from dual; abc
hive> select unhex(‘11’) from dual; -
hive> select unhex(616263) from dual; abc


29、进制转换函数 : conv


语法: conv(BIGINT num, int from_base, int to_base)


返回值: string


说明: 将数值num从from_base进制转化到to_base进制


举例:hive> select conv(17,10,16) from dual; 11
hive> select conv(17,10,2) from dual; 10001


30、绝对值函数 : abs


语法: abs(double a) abs(int a)


返回值: double int


说明: 返回数值a的绝对值


举例:hive> select abs(-3.9) from dual; 3.9
hive> select abs(10.9) from dual; 10.9


31、正取余函数 : pmod


语法: pmod(int a, int b),pmod(double a, double b)


返回值: int double


说明: 返回正的a除以b的余数


举例:hive> select pmod(9,4) from dual; 1
hive> select pmod(-9,4) from dual; 3


32、正弦函数 : sin


语法: sin(double a)


返回值: double


说明: 返回a的正弦值


举例:hive> select sin(0.8) from dual; 0.7173560908995228


33、反正弦函数 : asin


语法: asin(double a)


返回值: double


说明: 返回a的反正弦值


举例:hive> select asin(0.7173560908995228) from dual; 0.8


34、余弦函数 : cos


语法: cos(double a)


返回值: double


说明: 返回a的余弦值


举例:hive> select cos(0.9) from dual; 0.6216099682706644


35、反余弦函数 : acos


语法: acos(double a)


返回值: double


说明: 返回a的反余弦值


举例:hive> select acos(0.6216099682706644) from dual; 0.9


36、positive 函数 : positive


语法: positive(int a), positive(double a)


返回值: int double


说明: 返回a


举例: hive> selectpositive(-10) from dual; -10
hive> select positive(12) from dual; 12


37、negative 函数 : negative


语法: negative(int a), negative(double a)


返回值: int double


说明: 返回-a


举例:hive> select negative(-5) from dual; 5
hive> select negative(8) from dual; -8


38、UNIX 时间戳转日期函数 : from_unixtime


语法: from_unixtime(bigint unixtime[, string format])


返回值: string


说明: 转化UNIX时间戳(从1970-01-01 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式


举例:hive> select from_unixtime(1323308943,'yyyyMMdd')from dual; 20111208

39、获取当前 UNIX 时间戳函数 : unix_timestamp


语法: unix_timestamp()


返回值: bigint


说明: 获得当前时区的UNIX时间戳


举例:hive> select unix_timestamp() from dual; 1323309615


40、日期转 UNIX 时间戳函数 : unix_timestamp


语法: unix_timestamp(string date)


返回值: bigint


说明: 转换格式为"yyyy-MM-ddHH:mm:ss"的日期到UNIX时间戳。如果转化失败,则返回0。


举例:hive> select unix_timestamp('2011-12-07 13:01:03')from dual; 1323234063


41、指定格式日期转 UNIX 时间戳函数 :unix_timestamp


语法: unix_timestamp(string date, string pattern)


返回值: bigint


说明: 转换pattern格式的日期到UNIX时间戳。如果转化失败,则返回0。


举例:hive> select unix_timestamp('2011120713:01:03','yyyyMMdd HH:mm:ss') from dual; 1323234063


42、日期时间转日期函数 : to_date


语法: to_date(string timestamp)


返回值: string


说明: 返回日期时间字段中的日期部分。


举例:hive> select to_date('2011-12-08 10:03:01') fromdual;


43、日期转年函数 : year


语法: year(string date)


返回值: int


说明: 返回日期中的年。


举例:hive> select year('2011-12-08 10:03:01') fromdual;2011
hive> select year('2012-12-08') from dual; 2012

44、日期转月函数 : month


语法: month (string date)


返回值: int


说明: 返回日期中的月份。


举例:hive> select month('2011-12-08 10:03:01') fromdual;12
hive> select month('2011-08-08') from dual; 8

45、日期转天函数 : day


语法: day (string date)


返回值: int


说明: 返回日期中的天。


举例:hive> select day('2011-12-08 10:03:01') from dual; 8
hive> select day('2011-12-24') from dual; 24


46、日期转小时函数 : hour


语法: hour (string date)


返回值: int


说明: 返回日期中的小时。


举例:hive> select hour('2011-12-08 10:03:01') fromdual;10


47、日期转分钟函数 : minute


语法: minute (string date)


返回值: int


说明: 返回日期中的分钟。


举例:hive> select minute('2011-12-08 10:03:01') fromdual; 3


48、日期转秒函数 : second


语法: second (string date)


返回值: int


说明: 返回日期中的秒。


举例:hive> select second('2011-12-08 10:03:01') fromdual; 1


49、日期转周函数 : weekofyear


语法: weekofyear (string date)


返回值: int


说明: 返回日期在当前的周数。


举例:hive> select weekofyear('2011-12-08 10:03:01') fromdual;49


50、日期比较函数 : datediff


语法: datediff(string enddate, string startdate)


返回值: int


说明: 返回结束日期减去开始日期的天数。


举例:hive> select datediff('2012-12-08','2012-05-09')from dual; 213


51、日期增加函数 : date_add


语法: date_add(string startdate, int days)


返回值: string


说明: 返回开始日期startdate增加days天后的日期。


举例:hive> select date_add('2012-12-08',10) from dual;


52、日期减少函数 : date_sub


语法: date_sub (string startdate, int days)


返回值: string


说明: 返回开始日期startdate减少days天后的日期。


举例:hive> select date_sub('2012-12-08',10) from dual;


53、If 函数 : if


语法: if(boolean testCondition, T valueTrue, TvalueFalseOrNull)


返回值: T


说明: 当条件testCondition为TRUE时,返回valueTrue;否则返回valueFalseOrNull


举例:hive> select if(1=2,100,200) from dual; 200
hive> select if(1=1,100,200) from dual;100


54、非空查找函数 : COALESCE


语法: COALESCE(T v1, T v2, …)


返回值: T


说明: 返回参数中的第一个非空值;如果所有值都为NULL,那么返回NULL


举例:hive> select COALESCE(null,'100','50′)from dual; 100


55、条件判断函数: CASE


语法 : CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END


返回值 : T


说明:如果 a 等于 b ,那么返回 c ;如果 a 等于 d ,那么返回 e ;否则返回 f


举例:hive> Select case 100 when 50 then 'tom' when 100then 'mary' else 'tim' end from dual; mary


56、字符串长度函数: length


语法: length(string A)


返回值: int


说明:返回字符串A的长度


举例:hive> select length('abcedfg') from dual; 7


57、字符串反转函数: reverse


语法: reverse(string A)


返回值: string


说明:返回字符串A的反转结果


举例:hive> select reverse(abcedfg’) from dual; gfdecba


58、字符串连接函数: concat


语法: concat(string A, string B…)


返回值: string


说明:返回输入字符串连接后的结果,支持任意个输入字符串


举例:hive> select concat(‘abc’,'def’,'gh’) from dual;
abcdefgh


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


语法: concat_ws(string SEP, string A, string B…)


返回值: string


说明:返回输入字符串连接后的结果,SEP表示各个字符串间的分隔符


举例:hive> select concat_ws(',','abc','def','gh') fromdual;
abc,def,gh


60、字符串截取函数: substr,substring


语法: substr(string A, int start),substring(string A, intstart)


返回值: string


说明:返回字符串A从start位置到结尾的字符串


举例:hive> select substr('abcde',3) from dual; cde
hive> select substring('abcde',3) from dual; cde
hive> selectsubstr('abcde',-1) from dual; e


61、字符串截取函数: substr,substring


语法: substr(string A, int start, int len),substring(stringA, int start, int len)


返回值: string


说明:返回字符串A从start位置开始,长度为len的字符串


举例:hive> select substr('abcde',3,2) from dual; cd
hive> select substring('abcde',3,2) from dual; cd
hive>select substring('abcde',-2,2) from dual; de


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


语法: upper(string A) ucase(string A)


返回值: string


说明:返回字符串A的大写格式


举例:hive> select upper('abSEd') from dual; ABSED
hive> select ucase('abSEd') from dual; ABSED


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


语法: lower(string A) lcase(string A)


返回值: string


说明:返回字符串A的小写格式


举例:hive> select lower('abSEd') from dual; absed
hive> select lcase('abSEd') from dual; absed


64、去空格函数: trim


语法: trim(string A)


返回值: string


说明:去除字符串两边的空格


举例:hive> select trim(' abc ') from dual; abc


65、左边去空格函数: ltrim


语法: ltrim(string A)


返回值: string


说明:去除字符串左边的空格


举例:hive> select ltrim(' abc ') from dual; abc


64、右边去空格函数: rtrim


语法: rtrim(string A)


返回值: string


说明:去除字符串右边的空格


举例:hive> select rtrim(' abc ') from dual; abc


65、正则表达式替换函数: regexp_replace


语法: regexp_replace(string A, string B, string C)


返回值: string


说明:将字符串A中的符合java正则表达式B的部分替换为C。注意,在有些情况下要使用转义字符,类似oracle中的regexp_replace函数。


举例:hive> select regexp_replace('foobar', 'oo|ar', '')from dual; fb


66、正则表达式解析函数: regexp_extract


语法: regexp_extract(string subject, string pattern, intindex)


返回值: string


说明:将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。


举例:hive> select regexp_extract('foothebar','foo(.*?)(bar)', 1) from dual; the
hive> select regexp_extract('foothebar','foo(.*?)(bar)', 2) from dual; bar
hive> select regexp_extract('foothebar','foo(.*?)(bar)', 0) from dual; foothebar


注意,在有些情况下要使用转义字符,下面的等号要用双竖线转 义,这是 java 正则表达式的规则。


select data_field,
regexp_extract(data_field,'.*?bgStart\=(&+)',1)as aaa,
regexp_extract(data_field,'.*?contentLoaded_headStart\=(&+)',1)as bbb,
regexp_extract(data_field,'.*?AppLoad2Req\=(&+)',1)as ccc
from pt_nginx_loginlog_st
where pt = '2012-03-26' limit 2;


67、URL 解析函数: parse_url


语法: parse_url(string urlString, string partToExtract [,string keyToExtract])


返回值: string


说明:返回URL中指定的部分。partToExtract的有效值为:HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, and USERINFO.


举例:


hive>selectparse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'HOST') fromdual; facebook.com
hive> selectparse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'QUERY','k1') from dual; v1


68、json 解析函数: get_json_object


语法: get_json_object(string json_string, string path)


返回值: string


说明:解析json的字符串json_string,返回path指定的内容。如果输入的json字符串无效,那么返回NULL。


举例:


hive> select get_json_object('{"store":
> {"fruit":[{"weight":8,"type":"apple"},{"weight":9,"type":"pear"}],
> "bicycle":{"price":19.95,"color":"red"}
> },
> "email":"amy@only_for_json_udf_test.net",
> "owner":"amy"
> }
> ','$.owner') from dual;
amy


69、空格字符串函数: space


语法: space(int n)


返回值: string


说明:返回长度为n的字符串


举例:


hive> select space(10) from dual;
hive> select length(space(10)) from dual; 10


70、重复字符串函数: repeat


语法: repeat(string str, int n)


返回值: string


说明:返回重复n次后的str字符串


举例:hive> select repeat('abc',5) from dual;abcabcabcabcabc


71、首字符 ascii 函数: ascii


语法: ascii(string str)


返回值: int


说明:返回字符串str第一个字符的ascii码


举例:hive> select ascii('abcde') from dual; 97

72、左补足函数: lpad


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


返回值: string


说明:将str进行用pad进行左补足到len位


举例:hive> select lpad('abc',10,'td') from dual;tdtdtdtabc


注意:与 GP , ORACLE 不同, pad 不能默认


73、右补足函数: rpad


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


返回值: string


说明:将str进行用pad进行右补足到len位


举例:hive> select rpad('abc',10,'td') from dual;abctdtdtdt


74、分割字符串函数 : split


语法: split(stringstr, string pat)


返回值: array


说明: 按照pat字符串分割str,会返回分割后的字符串数组


举例:


hive> select split('abtcdtef','t') from dual;
["ab","cd","ef"]


75、集合查找函数 : find_in_set


语法: find_in_set(string str, string strList)


返回值: int


说明: 返回str在strlist第一次出现的位置,strlist是用逗号分割的字符串。如果没有找该str字符,则返回0


举例:hive> select find_in_set('ab','ef,ab,de') fromdual;2
hive> select find_in_set('at','ef,ab,de') from dual;0


76、集合统计函数


语法: count(*), count(expr), count(DISTINCT expr[, expr_.])


返回值: int


说明: count(*)统计检索出的行的个数,包括NULL值的行;count(expr)返回指定字段的非空值的个数;count(DISTINCTexpr[, expr_.])返回指定字段的不同的非空值的个数


举例:


hive> select count(*) from dual; 20
hive> select count(distinct t) from dual; 10


77、总和统计函数 : sum


语法: sum(col), sum(DISTINCT col)


返回值: double


说明: sum(col)统计结果集中col的相加的结果;sum(DISTINCT col)统计结果中col不同值相加的结果


举例:


hive> select sum(t) from dual; 100
hive> select sum(distinct t) from dual; 70


78、平均值统计函数 : avg


语法: avg(col), avg(DISTINCT col)


返回值: double


说明: avg(col)统计结果集中col的平均值;avg(DISTINCT col)统计结果中col不同值相加的平均值


举例:

hive> select avg(t) from dual; 50
hive> select avg (distinct t) from dual; 30


79、最小值统计函数 : min


语法: min(col)


返回值: double


说明: 统计结果集中col字段的最小值


举例:


hive> select min(t) from dual; 20


80、最大值统计函数 : max


语法: maxcol)


返回值: double


说明: 统计结果集中col字段的最大值


举例:hive> select max(t) from dual; 120


81、Map 类型构建 : map


语法: map (key1, value1, key2, value2, …)


说明:根据输入的key和value对构建map类型


举例:


hive> Create table alex_testas select map('100','tom','200','mary') as t from dual;
hive> describe alex_test;
t map<string,string>
hive> select t from alex_test;
{"100":"tom","200":"mary"}


82、Struct 类型构建 : struct


语法: struct(val1, val2, val3, …)


说明:根据输入的参数构建结构体struct类型


举例:


hive> create table alex_test as selectstruct('tom','mary','tim') as t from dual;
hive> describe alex_test;
t structcol1:string,col2:string,col3:string
hive> select t from alex_test;
{"col1":"tom","col2":"mary","col3":"tim"}


83、array 类型构建 : array


语法: array(val1, val2, …)


说明:根据输入的参数构建数组array类型


举例:


hive> create table alex_test as selectarray("tom","mary","tim") as t from dual;
hive> describe alex_test;
t array<string>
hive> select t from alex_test;
["tom","mary","tim"]

84、array 类型访问 : A[n]


语法: A[n]


操作类型: A为array类型,n为int类型


说明:返回数组A中的第n个变量值。数组的起始下标为0。比如,A是个值为['foo','bar']的数组类型,那么A[0]将返回'foo',而A[1]将返回'bar'


举例:


hive> create table alex_test as selectarray("tom","mary","tim") as t from dual;
hive> select t[0],t[1],t[2] from alex_test; tom mary tim


85、map 类型访问 : M[key]


语法: M[key]


操作类型: M为map类型,key为map中的key值


说明:返回map类型M中,key值为指定值的value值。比如,M是值为{'f' -> 'foo', 'b' -> 'bar', 'all' -> 'foobar'}的map类型,那么M['all']将会返回'foobar'


举例:


hive> Create table alex_test as selectmap('100','tom','200','mary') as t from dual;
hive> select t['200'],t['100'] from alex_test; mary tom


86、struct 类型访问 : S.x


语法: S.x


操作类型: S为struct类型


说明:返回结构体S中的x字段。比如,对于结构体struct foobar {int foo, int bar},foobar.foo返回结构体中的foo字段


举例:


hive> create table alex_test as selectstruct('tom','mary','tim') as t from dual;
hive> describe alex_test;
t structcol1:string,col2:string,col3:string
hive> select t.col1,t.col3from alex_test;
tom tim


87、Map 类型长度函数 :size(Map<K.V>)


语法: size(Map<K.V>)


返回值: int


说明: 返回map类型的长度


举例:hive> select size(map('100','tom','101','mary'))from dual; 2


88、array 类型长度函数 :size(Array<T>)


语法: size(Array<T>)


返回值: int


说明: 返回array类型的长度


举例:hive> select size(array('100','101','102','103'))from dual; 4


89、类型转换函数


类型转换函数: cast


语法: cast(expr as <type>)


返回值: Expected "=" to follow "type"


说明: 返回array类型的长度


举例:hive> select cast(1 as bigint) from dual; 1


4 Hive JDBC


4.1 基本操作对象的介绍


1、Connection

说明:与Hive连接的Connection对象


Hive的连接


jdbc:hive://IP:10000/default“



获取Connection的方法


DriverManager.getConnection("jdbc:hive://IP:10000/default","", "");


2、Statement


说明: 用于执行语句


创建方法


Statementstmt = con.createStatement();


主要方法


executeQuery


execute


3、ResultSet


说明:用来存储结果集


创建方法


stmt.executeQuery


主要方法


getString()


4、特殊类型的处理


Array


Map


Struct



4.2 datafile写操作


try {
Class.forName(driverName);
Connection con =DriverManager.getConnection("jdbc:hive://IP:10000/default","", "");
Statement stmt =con.createStatement();
String sql = "show tables";
// show tables
System.out.println("Running:" + sql);
ResultSet res =stmt.executeQuery(sql);
if (res.next()) {
System.out.println(res.getString(1));
}


4.3 基于Hive的数据库连接池


使用DataSource作为数据源的实现


DBConnectionManager采用单例模式


提供获得连接,关闭连接的方法


setupDataSource()
DBConnectionManagergetInstance()
close(Connectionconn)
synchronizedConnection getConnection()


相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-13-Hive 启动Hive 修改启动参数命令行启动测试 几句简单的HQL了解Hive
Hadoop-13-Hive 启动Hive 修改启动参数命令行启动测试 几句简单的HQL了解Hive
56 2
|
16天前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
62 2
|
17天前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第26天】本文详细探讨了Hadoop与Spark在大数据处理中的协同作用,通过具体案例展示了两者的最佳实践。Hadoop的HDFS和MapReduce负责数据存储和预处理,确保高可靠性和容错性;Spark则凭借其高性能和丰富的API,进行深度分析和机器学习,实现高效的批处理和实时处理。
57 1
|
1月前
|
SQL 分布式计算 Hadoop
手把手的教你搭建hadoop、hive
手把手的教你搭建hadoop、hive
87 1
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
51 3
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
44 2
|
1月前
|
SQL 存储 分布式计算
Hive和Pig的区别是什么?如何选择?
【10月更文挑战第9天】Hive和Pig的区别是什么?如何选择?
23 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
84 0
|
3月前
|
分布式计算 资源调度 Hadoop
Hadoop 1 与 Hadoop 2 的区别详解
【8月更文挑战第31天】
77 0
|
5月前
|
分布式计算 Hadoop 大数据
Spark与Hadoop的区别?
【6月更文挑战第15天】Spark与Hadoop的区别?
57 8