当前位置:文档之家› hive函数大全

hive函数大全

hive函数大全
hive函数大全

目录

一、关系运算: (4)

1. 等值比较: = (4)

2. 不等值比较: <> (4)

3. 小于比较: < (4)

4. 小于等于比较: <= (4)

5. 大于比较: > (5)

6. 大于等于比较: >= (5)

7. 空值判断: IS NULL (5)

8. 非空判断: IS NOT NULL (6)

9. LIKE比较: LIKE (6)

10. JAVA的LIKE操作: RLIKE (6)

11. REGEXP操作: REGEXP (7)

二、数学运算: (7)

1. 加法操作: + (7)

2. 减法操作: - (7)

3. 乘法操作: * (8)

4. 除法操作: / (8)

5. 取余操作: % (8)

6. 位与操作: & (9)

7. 位或操作: | (9)

8. 位异或操作: ^ (9)

9.位取反操作: ~ (10)

三、逻辑运算: (10)

1. 逻辑与操作: AND (10)

2. 逻辑或操作: OR (10)

3. 逻辑非操作: NOT (10)

四、数值计算 (11)

1. 取整函数: round (11)

2. 指定精度取整函数: round (11)

3. 向下取整函数: floor (11)

4. 向上取整函数: ceil (12)

5. 向上取整函数: ceiling (12)

6. 取随机数函数: rand (12)

7. 自然指数函数: exp (13)

8. 以10为底对数函数: log10 (13)

9. 以2为底对数函数: log2 (13)

10. 对数函数: log (13)

11. 幂运算函数: pow (14)

12. 幂运算函数: power (14)

13. 开平方函数: sqrt (14)

14. 二进制函数: bin (14)

15. 十六进制函数: hex (15)

16. 反转十六进制函数: unhex (15)

17. 进制转换函数: conv (15)

18. 绝对值函数: abs (16)

19. 正取余函数: pmod (16)

20. 正弦函数: sin (16)

21. 反正弦函数: asin (16)

22. 余弦函数: cos (17)

23. 反余弦函数: acos (17)

24. positive函数: positive (17)

25. negative函数: negative (17)

五、日期函数 (18)

1. UNIX时间戳转日期函数: from_unixtime (18)

2. 获取当前UNIX时间戳函数: unix_timestamp (18)

3. 日期转UNIX时间戳函数: unix_timestamp (18)

4. 指定格式日期转UNIX时间戳函数: unix_timestamp (18)

5. 日期时间转日期函数: to_date (19)

6. 日期转年函数: year (19)

7. 日期转月函数: month (19)

8. 日期转天函数: day (19)

9. 日期转小时函数: hour (20)

10. 日期转分钟函数: minute (20)

11. 日期转秒函数: second (20)

12. 日期转周函数: weekofyear (20)

13. 日期比较函数: datediff (21)

14. 日期增加函数: date_add (21)

15. 日期减少函数: date_sub (21)

六、条件函数 (21)

1. If函数: if (21)

2. 非空查找函数: COALESCE (22)

3. 条件判断函数:CASE (22)

4. 条件判断函数:CASE (22)

七、字符串函数 (23)

1. 字符串长度函数:length (23)

2. 字符串反转函数:reverse (23)

3. 字符串连接函数:concat (23)

4. 带分隔符字符串连接函数:concat_ws (23)

5. 字符串截取函数:substr,substring (24)

6. 字符串截取函数:substr,substring (24)

7. 字符串转大写函数:upper,ucase (24)

8. 字符串转小写函数:lower,lcase (25)

9. 去空格函数:trim (25)

10. 左边去空格函数:ltrim (25)

11. 右边去空格函数:rtrim (25)

12. 正则表达式替换函数:regexp_replace (26)

13. 正则表达式解析函数:regexp_extract (26)

14. URL解析函数:parse_url (26)

15. json解析函数:get_json_object (27)

16. 空格字符串函数:space (27)

17. 重复字符串函数:repeat (27)

18. 首字符ascii函数:ascii (28)

19. 左补足函数:lpad (28)

20. 右补足函数:rpad (28)

21. 分割字符串函数: split (28)

22. 集合查找函数: find_in_set (29)

八、集合统计函数 (29)

1. 个数统计函数: count (29)

2. 总和统计函数: sum (29)

3. 平均值统计函数: avg (30)

4. 最小值统计函数: min (30)

5. 最大值统计函数: max (30)

6. 非空集合总体变量函数: var_pop (30)

7. 非空集合样本变量函数: var_samp (31)

8. 总体标准偏离函数: stddev_pop (31)

9. 样本标准偏离函数: stddev_samp (31)

10.中位数函数: percentile (31)

11. 中位数函数: percentile (31)

12. 近似中位数函数: percentile_approx (32)

13. 近似中位数函数: percentile_approx (32)

14. 直方图: histogram_numeric (32)

九、复合类型构建操作 (32)

1. Map类型构建: map (32)

2. Struct类型构建: struct (33)

3. array类型构建: array (33)

十、复杂类型访问操作 (33)

1. array类型访问: A[n] (33)

2. map类型访问: M[key] (34)

3. struct类型访问: S.x (34)

十一、复杂类型长度统计函数 (34)

1. Map类型长度函数: size(Map) (34)

2. array类型长度函数: size(Array) (35)

3. 类型转换函数 (35)

十二、join,group,order,distribute,常用函数 (35)

一、关系运算:

1. 等值比较: =

语法:A=B

操作类型:所有基本类型

描述: 如果表达式A与表达式B相等,则为TRUE;否则为FALSE

举例:

hive> select 1 from lxw_dual where 1=1;

1

2. 不等值比较: <>

语法: A <> B

操作类型: 所有基本类型

描述: 如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A与表达式B不相等,则为TRUE;否则为FALSE

举例:

hive> select 1 from lxw_dual where 1 <> 2;

1

3. 小于比较: <

语法: A < B

操作类型: 所有基本类型

描述: 如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A小于表达式B,则为TRUE;否则为FALSE

举例:

hive> select 1 from lxw_dual where 1 < 2;

1

4. 小于等于比较: <=

语法: A <= B

操作类型: 所有基本类型

描述: 如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A小于或者等于表达式B,则为TRUE;否则为FALSE

举例:

hive> select 1 from lxw_dual where 1 <= 1;

1

5. 大于比较: >

语法: A > B

操作类型: 所有基本类型

描述: 如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A大于表达式B,则为TRUE;否则为FALSE

举例:

hive> select 1 from lxw_dual where 2 > 1;

1

6. 大于等于比较: >=

语法: A >= B

操作类型: 所有基本类型

描述: 如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A大于或者等于表达式B,则为TRUE;否则为FALSE

举例:

hive> select 1 from lxw_dual where 1 >= 1;

1

注意:String的比较要注意(常用的时间比较可以先to_date之后再比较)

hive> select * from lxw_dual;

OK

2011111209 00:00:00 2011111209

hive> select a,b,ab,a=b from lxw_dual;

2011111209 00:00:00 2011111209 false true false

7. 空值判断: IS NULL

语法: A IS NULL

操作类型: 所有类型

描述: 如果表达式A的值为NULL,则为TRUE;否则为FALSE

举例:

hive> select 1 from lxw_dual where null is null;

1

8. 非空判断: IS NOT NULL

语法: A IS NOT NULL

操作类型: 所有类型

描述: 如果表达式A的值为NULL,则为FALSE;否则为TRUE

举例:

hive> select 1 from lxw_dual where 1 is not null;

1

9. LIKE比较: LIKE

语法: A LIKE B

操作类型: strings

描述: 如果字符串A或者字符串B为NULL,则返回NULL;如果字符串A符合表达式B 的正则语法,则为TRUE;否则为FALSE。B中字符”_”表示任意单个字符,而字

符”%”表示任意数量的字符。

举例:

hive> select 1 from lxw_dual where 'football' like 'foot%';

1

hive> select 1 from lxw_dual where 'football' like 'foot____';

1

注意:否定比较时候用NOT A LIKE B

hive> select 1 from lxw_dual where NOT 'football' like 'fff%';

1

10. JAVA的LIKE操作: RLIKE

语法: A RLIKE B

操作类型: strings

描述: 如果字符串A或者字符串B为NULL,则返回NULL;如果字符串A符合JAVA正则表达式B的正则语法,则为TRUE;否则为FALSE。

举例:

hive> select 1 from lxw_dual where 'footbar’ rlike '^f.*r$’;

1

注意:判断一个字符串是否全为数字:

hive>select 1 from lxw_dual where '123456' rlike '^\\d+$';

1

hive> select 1 from lxw_dual where '123456aa' rlike '^\\d+$';

11. REGEXP操作: REGEXP

语法: A REGEXP B

操作类型: strings

描述: 功能与RLIKE相同

举例:

hive> select 1 from lxw_dual where 'footbar' REGEXP '^f.*r$';

1

二、数学运算:

1. 加法操作: +

语法: A + B

操作类型:所有数值类型

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

举例:

hive> select 1 + 9 from lxw_dual;

10

hive> create table lxw_dual as select 1 + 1.2 from lxw_dual;

hive> describe lxw_dual;

_c0 double

2. 减法操作: -

语法: A –B

操作类型:所有数值类型

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

举例:

hive> select 10 – 5 from lxw_dual;

5

hive> create table lxw_dual as select 5.6 – 4 from lxw_dual;

hive> describe lxw_dual;

_c0 double

3. 乘法操作: *

语法: A * B

操作类型:所有数值类型

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

举例:

hive> select 40 * 5 from lxw_dual;

200

4. 除法操作: /

语法: A / B

操作类型:所有数值类型

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

举例:

hive> select 40 / 5 from lxw_dual;

8.0

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

hive>select ceil(28.0/6.999999999999999999999) from lxw_dual limit 1;

结果为4

hive>select ceil(28.0/6.99999999999999) from lxw_dual limit 1;

结果为5

5. 取余操作: %

语法: A % B

操作类型:所有数值类型

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

举例:

hive> select 41 % 5 from lxw_dual;

1

hive> select 8.4 % 4 from lxw_dual;

0.40000000000000036

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

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

0.4

6. 位与操作: &

语法: A & B

操作类型:所有数值类型

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

举例:

hive> select 4 & 8 from lxw_dual;

hive> select 6 & 4 from lxw_dual;

4

7. 位或操作: |

语法: A | B

操作类型:所有数值类型

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

举例:

hive> select 4 | 8 from lxw_dual;

12

hive> select 6 | 8 from lxw_dual;

14

8. 位异或操作: ^

语法: A ^ B

操作类型:所有数值类型

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

举例:

hive> select 4 ^ 8 from lxw_dual;

12

hive> select 6 ^ 4 from lxw_dual;

2

9.位取反操作: ~

语法: ~A

操作类型:所有数值类型

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

举例:

hive> select ~6 from lxw_dual;

-7

hive> select ~4 from lxw_dual;

-5

三、逻辑运算:

1. 逻辑与操作: AND

语法: A AND B

操作类型:boolean

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

举例:

hive> select 1 from lxw_dual where 1=1 and 2=2;

1

2. 逻辑或操作: OR

语法: A OR B

操作类型:boolean

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

hive> select 1 from lxw_dual where 1=2 or 2=2;

1

3. 逻辑非操作: NOT

语法: NOT A

操作类型:boolean

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

举例:

hive> select 1 from lxw_dual where not 1=2;

1

四、数值计算

1. 取整函数: round

语法: round(double a)

返回值: BIGINT

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

举例:

hive> select round(3.1415926) from lxw_dual;

3

hive> select round(3.5) from lxw_dual;

4

hive> create table lxw_dual as select round(9542.158) from lxw_dual;

hive> describe lxw_dual;

_c0 bigint

2. 指定精度取整函数: round

语法: round(double a, int d)

返回值: DOUBLE

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

举例:

hive> select round(3.1415926,4) from lxw_dual;

3.1416

3. 向下取整函数: floor

语法: floor(double a)

返回值: BIGINT

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

举例:

hive> select floor(3.1415926) from lxw_dual;

3

hive> select floor(25) from lxw_dual;

25

4. 向上取整函数: ceil

语法: ceil(double a)

返回值: BIGINT

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

举例:

hive> select ceil(3.1415926) from lxw_dual;

4

hive> select ceil(46) from lxw_dual;

46

5. 向上取整函数: ceiling

语法: ceiling(double a)

返回值: BIGINT

说明: 与ceil功能相同

举例:

hive> select ceiling(3.1415926) from lxw_dual;

4

hive> select ceiling(46) from lxw_dual;

46

6. 取随机数函数: rand

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

返回值: double

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

举例:

hive> select rand() from lxw_dual;

0.5577432776034763

hive> select rand() from lxw_dual;

0.6638336467363424

hive> select rand(100) from lxw_dual;

0.7220096548596434

hive> select rand(100) from lxw_dual;

0.7220096548596434

7. 自然指数函数: exp

语法: exp(double a)

返回值: double

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

举例:

hive> select exp(2) from lxw_dual;

7.38905609893065

自然对数函数: ln

语法: ln(double a)

返回值: double

说明: 返回a的自然对数

举例:

hive> select ln(7.38905609893065) from lxw_dual;

2.0

8. 以10为底对数函数: log10

语法: log10(double a)

返回值: double

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

举例:

hive> select log10(100) from lxw_dual;

2.0

9. 以2为底对数函数: log2

语法: log2(double a)

返回值: double

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

举例:

hive> select log2(8) from lxw_dual;

3.0

10. 对数函数: log

语法: log(double base, double a)

返回值: double

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

举例:

hive> select log(4,256) from lxw_dual;

4.0

11. 幂运算函数: pow

语法: pow(double a, double p)

返回值: double

说明: 返回a的p次幂

举例:

hive> select pow(2,4) from lxw_dual;

16.0

12. 幂运算函数: power

语法: power(double a, double p)

返回值: double

说明: 返回a的p次幂,与pow功能相同

举例:

hive> select power(2,4) from lxw_dual;

16.0

13. 开平方函数: sqrt

语法: sqrt(double a)

返回值: double

说明: 返回a的平方根

举例:

hive> select sqrt(16) from lxw_dual;

4.0

14. 二进制函数: bin

语法: bin(BIGINT a)

返回值: string

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

举例:

hive> select bin(7) from lxw_dual;

111

15. 十六进制函数: hex

语法: hex(BIGINT a)

返回值: string

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

举例:

hive> select hex(17) from lxw_dual;

11

hive> select hex(‘abc’) from lxw_dual;

616263

16. 反转十六进制函数: unhex

语法: unhex(string a)

返回值: string

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

举例:

hive> select unhex(‘616263’) from lxw_dual;

abc

hive> select unhex(‘11’) from lxw_dual;

-

hive> select unhex(616263) from lxw_dual;

abc

17. 进制转换函数: conv

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

返回值: string

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

举例:

hive> select conv(17,10,16) from lxw_dual;

11

hive> select conv(17,10,2) from lxw_dual;

10001

18. 绝对值函数: abs

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

返回值: double int

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

举例:

hive> select abs(-3.9) from lxw_dual;

3.9

hive> select abs(10.9) from lxw_dual;

10.9

19. 正取余函数: pmod

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

返回值: int double

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

举例:

hive> select pmod(9,4) from lxw_dual;

1

hive> select pmod(-9,4) from lxw_dual;

3

20. 正弦函数: sin

语法: sin(double a)

返回值: double

说明: 返回a的正弦值

举例:

hive> select sin(0.8) from lxw_dual;

0.7173560908995228

21. 反正弦函数: asin

语法: asin(double a)

返回值: double

说明: 返回a的反正弦值

举例:

hive> select asin(0.7173560908995228) from lxw_dual;

22. 余弦函数: cos

语法: cos(double a)

返回值: double

说明: 返回a的余弦值

举例:

hive> select cos(0.9) from lxw_dual;

0.6216099682706644

23. 反余弦函数: acos

语法: acos(double a)

返回值: double

说明: 返回a的反余弦值

举例:

hive> select acos(0.6216099682706644) from lxw_dual;

0.9

24. positive函数: positive

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

返回值: int double

说明: 返回a

举例:

hive> select positive(-10) from lxw_dual;

-10

hive> select positive(12) from lxw_dual;

12

25. negative函数: negative

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

返回值: int double

说明: 返回-a

举例:

hive> select negative(-5) from lxw_dual;

5

hive> select negative(8) from lxw_dual;

五、日期函数

1. 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 lxw_dual;

20111208

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

语法: unix_timestamp()

返回值: bigint

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

举例:

hive> select unix_timestamp() from lxw_dual;

1323309615

3. 日期转UNIX时间戳函数: unix_timestamp

语法: unix_timestamp(string date)

返回值: bigint

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

举例:

hive> select unix_timestamp('2011-12-07 13:01:03') from lxw_dual;

1323234063

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

语法: unix_timestamp(string date, string pattern)

返回值: bigint

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

举例:

hive> select unix_timestamp('20111207 13:01:03','yyyyMMdd HH:mm:ss') from lxw_dual;

1323234063

5. 日期时间转日期函数: to_date

语法: to_date(string timestamp)

返回值: string

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

举例:

hive> select to_date('2011-12-08 10:03:01') from lxw_dual;

2011-12-08

6. 日期转年函数: year

语法: year(string date)

返回值: int

说明: 返回日期中的年。

举例:

hive> select year('2011-12-08 10:03:01') from lxw_dual;

2011

hive> select year('2012-12-08') from lxw_dual;

2012

7. 日期转月函数: month

语法: month (string date)

返回值: int

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

举例:

hive> select month('2011-12-08 10:03:01') from lxw_dual;

12

hive> select month('2011-08-08') from lxw_dual;

8

8. 日期转天函数: day

语法: day (string date)

返回值: int

说明: 返回日期中的天。

举例:

hive> select day('2011-12-08 10:03:01') from lxw_dual;

hive> select day('2011-12-24') from lxw_dual;

24

9. 日期转小时函数: hour

语法: hour (string date)

返回值: int

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

举例:

hive> select hour('2011-12-08 10:03:01') from lxw_dual;

10

10. 日期转分钟函数: minute

语法: minute (string date)

返回值: int

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

举例:

hive> select minute('2011-12-08 10:03:01') from lxw_dual;

3

11. 日期转秒函数: second

语法: second (string date)

返回值: int

说明: 返回日期中的秒。

举例:

hive> select second('2011-12-08 10:03:01') from lxw_dual;

1

12. 日期转周函数: weekofyear

语法: weekofyear (string date)

返回值: int

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

举例:

hive> select weekofyear('2011-12-08 10:03:01') from lxw_dual;

整理和总结hive sql

进入hive shell #hive或者hive --service cli Hive 的启动方式: hive 命令行模式,直接输入/hive/bin/hive的执行程序,或者输入hive –service cli hive web界面的启动方式,hive –service hwi hive 远程服务(端口号10000) 启动方式,hive --service hiveserver hive 远程后台启动(关闭终端hive服务不退出): nohup hive -–service hiveserver & 显示所有函数: hive> show functions; 查看函数用法: hive> describe function substr; 查看hive为某个查询使用多少个MapReduce作业 hive> Explain select a.id from tbname a; -------------------------------------------------------------------------- 表结构操作: 托管表和外部表 托管表会将数据移入Hive的warehouse目录;外部表则不会。经验法则是,如果所有处理都由Hive完成, 应该使用托管表;但如果要用Hive和其它工具来处理同一个数据集,则使用外部表。 创建表(通常stored as textfile): hive> create table tbName (id int,name string) stored as textfile; 创建表并且按分割符分割行中的字段值(即导入数据的时候被导入数据是以该分割符划分的,否则导入后为null,缺省列为null); hive> create table tbName (id int,name string) row format delimited fields terminated by ','; 创建外部表: hive>create external table extbName(id int, name string); 创建表并创建单分区字段ds(分区表指的是在创建表时指定的partition的分区空间。): hive> create table tbName2 (id int, name string) partitioned by (ds string); 创建表并创建双分区字段ds: hive> create table tbname3 (id int, content string) partitioned by (day string, hour string); 表添加一列: hive> alter table tbName add columns (new_col int); 添加一列并增加列字段注释: hive> alter table tbName add columns (new_col2 int comment 'a comment'); 更改表名: hive> alter table tbName rename to tbName3; 删除表(删除表的元数据,如果是托管表还会删除表的数据): hive>drop table tbName; 只删除内容(只删除表的内容,而保留元数据,则删除数据文件): hive>dfs –rmr ‘warehouse/my-table’; 删除分区,分区的元数据和数据将被一并删除: hive>alter table tbname2 drop partition (dt='2008-08-08', hour='09'); -------------------------------------------------------------------------- 元数据存储(从HDFS中将数据导入到表中都是瞬时的):

hive自定义函数说明

Hive自定义函数说明函数清单:

用法: getID 通过UUID来生成每一行的唯一ID: select getid() ; oracle_concat hive的concat函数遇到空值的情况下会直接返回空,而在oracle中对于字符串类型空字符串与null是等价对待的 select default.oracle_concat('ff-',null,'','--cc'); Select concat('ff-',null,'','--cc'); getBirthDay 从身份证号码中截取生日信息,返回日期格式为’yyyy-MM-dd’

getGoodsInfo self_date_format 为格式化来自oracle的时间格式,将格式为’yyyy/MM/dd’和’yyyy/MM/dd HH:mm:ss’的日期格式转换为’yyyy-MM-dd’ Select default. self_date_format(‘2012-12-12’); Select default. self_date_format(‘20121212’,’yyyyMMdd’); oracle_months_between 由于当前版本hive不带months_between函数,所以添加 oracle_decode hive中的decode函数为字符编码函数和encode对应。Oracle中decode函数类似case when 函数,添加oracle_decode函数减少sql的改写。与为与oracle功能同步,本函数将null和字符串’’等价对待。 select default.oracle_decode('',null,1,2) r1, default.oracle_decode(null,'',1,2) r2, default.oracle_decode('aaa','','Nnull','aaa','is a*3','aaa') r3, default.oracle_decode('ccc','', 'Nnull','aaa','is a*3','aaa') r4, default.oracle_decode('','', 'Nnull','aaa','is a*3','aaa') r5; BinomialTest _FUNC_(expr1, expr2, p_value, alternativeHypothesis) alternativeHypothesis: 接受指定值的字符串 取值:TWO_SIDED , GREATER_THAN , LESS_THAN 二项分布检测函数。实现oracle中的二项分布检测功能。 计算expr1 等于exper2 的值占数据总数的二项分布检测结果,类型依据alternativeHypothesis 确定

hive函数大全

目录 一、关系运算: (4) 1. 等值比较: = (4) 2. 不等值比较: <> (4) 3. 小于比较: < (4) 4. 小于等于比较: <= (4) 5. 大于比较: > (5) 6. 大于等于比较: >= (5) 7. 空值判断: IS NULL (5) 8. 非空判断: IS NOT NULL (6) 9. LIKE比较: LIKE (6) 10. JAVA的LIKE操作: RLIKE (6) 11. REGEXP操作: REGEXP (7) 二、数学运算: (7) 1. 加法操作: + (7) 2. 减法操作: - (7) 3. 乘法操作: * (8) 4. 除法操作: / (8) 5. 取余操作: % (8) 6. 位与操作: & (9) 7. 位或操作: | (9) 8. 位异或操作: ^ (9) 9.位取反操作: ~ (10) 三、逻辑运算: (10) 1. 逻辑与操作: AND (10) 2. 逻辑或操作: OR (10) 3. 逻辑非操作: NOT (10) 四、数值计算 (11) 1. 取整函数: round (11) 2. 指定精度取整函数: round (11) 3. 向下取整函数: floor (11) 4. 向上取整函数: ceil (12) 5. 向上取整函数: ceiling (12) 6. 取随机数函数: rand (12) 7. 自然指数函数: exp (13) 8. 以10为底对数函数: log10 (13) 9. 以2为底对数函数: log2 (13) 10. 对数函数: log (13) 11. 幂运算函数: pow (14) 12. 幂运算函数: power (14) 13. 开平方函数: sqrt (14) 14. 二进制函数: bin (14)

Hadoop试题试题库

1. 以下哪一项不属于Hadoop可以运行的模式___C___。 A. 单机(本地)模式 B. 伪分布式模式 C. 互联模式 D. 分布式模式 2. Hadoop 的作者是下面哪一位__B____。 A. Martin Fowler B. Doug cutting C. Kent Beck D. Grace Hopper 3. 下列哪个程序通常与NameNode 在同一个节点启动__D___。 A. TaskTracker B. DataNode C. SecondaryNameNode D. Jobtracker 4. HDFS 默认Block Size 的大小是___B___。 A.32MB B.64MB C.128MB D.256M 5. 下列哪项通常是集群的最主要瓶颈____C__。 A. CPU B. 网络 C. 磁盘IO D. 内存 6. 下列关于MapReduce说法不正确的是_____C_。 A. MapReduce 是一种计算框架 B. MapReduce 来源于google 的学术论文 C. MapReduce 程序只能用java 语言编写 D. MapReduce 隐藏了并行计算的细节,方便使用 8. HDFS 是基于流数据模式访问和处理超大文件的需求而开发的,具有高容错、高可靠性、高可扩展性、高吞吐率等特征,适合的读写任务是__D____。 A.一次写入,少次读 B.多次写入,少次读 C.多次写入,多次读 D.一次写入,多次读

7. HBase 依靠__A____存储底层数据。 A. HDFS B. Hadoop C. Memory D. MapReduce 8. HBase 依赖___D___提供强大的计算能力。 A. Zookeeper B. Chubby C. RPC D. MapReduce 9. HBase 依赖___A___提供消息通信机制 A. Zookeeper B. Chubby C. RPC D. Socket 10. 下面与HDFS类似的框架是___C____? A. NTFS B. FAT32 C. GFS D. EXT3 11. 关于SecondaryNameNode 下面哪项是正确的___C___。 A. 它是NameNode 的热备 B. 它对内存没有要求 C. 它的目的是帮助NameNode 合并编辑日志,减少NameNode 启动时间 D. SecondaryNameNode 应与NameNode 部署到一个节点 12. 大数据的特点不包括下面哪一项___D___。 A. 巨大的数据量 B. 多结构化数据 C. 增长速度快 D. 价值密度高 HBase测试题 9. HBase 来源于哪一项? C

HiveQL详解

HiveQL详解 HiveQL是一种类似SQL的语言, 它与大部分的SQL语法兼容, 但是并不完全支持SQL标准, 如HiveQL不支持更新操作, 也不支持索引和事务, 它的子查询和join操作也很局限, 这是因其底层依赖于Hadoop云平台这一特性决定的, 但其有些特点是SQL所无法企及的。例如多表查询、支持create table as select和集成MapReduce脚本等, 本节主要介绍Hive的数据类型和常用的HiveQL操作。 1.hive client命令 a.hive命令参数 -e: 命令行sql语句 -f: SQL文件 -h, --help: 帮助 --hiveconf: 指定配置文件 -i: 初始化文件 -S, --silent: 静态模式(不将错误输出) -v,--verbose: 详细模式 b.交互模式 hive> show tables; #查看所有表名 hive> show tables 'ad*' #查看以'ad'开头的表名 hive>set命令 #设置变量与查看变量; hive>set-v #查看所有的变量 hive>set hive.stats.atomic #查看hive.stats.atomic变量 hive>set hive.stats.atomic=false #设置hive.stats.atomic变量 hive> dfs -ls #查看hadoop所有文件路径 hive> dfs -ls /user/hive/warehouse/ #查看hive所有文件 hive> dfs -ls /user/hive/warehouse/ptest #查看ptest文件 hive> source file #在client里执行一个hive脚本文件 hive> quit #退出交互式shell hive>exit #退出交互式shell hive> reset #重置配置为默认值 hive> !ls #从Hive shell执行一个shell命令 2.操作及函数 查看函数: hive> show functions; 正则查看函数名: show functions 'xpath.*'; 查看具体函数内容:

Hadoop、openstack、nosql虚拟化2048G资源分享

Hadoop、openstack、nos ql、虚拟化云资源资料大全 about云资源汇总指引V1.4 hadoop资料 云端云计算2G基础课程 (Hadoop简介、安装与范例) 炼数成金3G视频分享下载 虚拟机三种网络模式该如何上网指导此为视频 Hadoop传智播客七天hadoop(3800元)视频,持续更新 Hadoop传智播客最新的hadoop学习资料第一季 (1)需要简单了解Linux操作系统(本课程使用CentOS6.4操作系统); (2)需要java基础,因为hadoop是java语言写的,课程中会对hadoop源码进行简析。 第一天资料: 传智播客hadoop教程01-课程介绍以及hadoop的国内外发展状况 传智播客hadoop教程02-hadoop生态圈介绍,介绍hadoop周边的很多框架 传智播客hadoop教程03-hadoop的概念及其发展历程 传智播客hadoop教程04-HDFS和MapReduce的体系结构 传智播客hadoop教程05-hadoop的特点和集群特点 传智播客hadoop教程06-配置Linux的环境,为搭建hadoop做准备 传智播客hadoop教程07-介绍如何使用SSH进行免密码登陆以及如何安装JDK

传智播客hadoop教程08-介绍hadoop的伪分布安装过程 传智播客hadoop教程09-使用eclipse查看hadoop源码 传智播客hadoop教程10-去除hadoop的启动过程中警告信息 第二天资料: 传智播客hadoop教程11-分布式文件系统简介 传智播客hadoop教程12-HDFS的shell操作 传智播客hadoop教程13-NameNode体系结构 传智播客hadoop教程14-DataNode体系结构 传智播客hadoop教程15-使用浏览器查看HDFS目录结构 传智播客hadoop教程16-使用java操作HDFS 传智播客hadoop教程17-Hadoop的RPC通信原理 传智播客hadoop教程18-NameNode的RPC通信过程 ....... Hadoop技术内幕深入解析HADOOP COMMON和HDFS架构设计与实现原理大全1-9章如何进行Hadoop二次开发指导视频下载 hadoop架构40篇文档下载 DaaS for Iaas.pdf IaaS 存储架构分析 Oracle性能优化精髓 OpenShift:从中间件到PaaS云 软件架构趋势 OPenstack建设公有云平台 从企业角度重塑企业IT架构 SAE落地过程中的经验分享 大型企业集团于SaaS的核心业务平台建设 云计算加速企业创新 hadoop平台大数据整合 Cloud Foundry Paas平台对软件开发的影响 专家集成系统开启企业云计算之旅 我们为什么不赞同openstack 基于web标准的移动开发和测试 分布式存储在网盘和在线备份的应用研究 当当在大数据挖掘分析与管理一个性话精准营销方面的探索 高并发环境下数据产品的架构设计 低成本构建有效的云存储运维体系 将企业级软件迁移到共有云平台

常用函数大全

常用函数大全 mysql_affected_rows
mysql_affected_rows — 取得前一次 MySQL 操作所影响的记录行数 mysql_fetch_array —从结果集中取得一行作为关联数组或数字数组或二者兼 有:
mysql_fetch_array($result, MYSQL_NUM) , MYSQL_NUM 可用 MYSQL_BOTH 或
MYSQL_ASSOC 代替,也可以不写,默认为 MYSQL_BOTH
mysql_fetch_row — 从结果集中取得一行作为枚举数组: mysql_fetch_row($result); mysql_fetch_assoc($result)
mysql_fetch_row()从和指定的结果标识关联的结果集中取得一行数据并作为数组返回。每个结果 的列储存在一个数组的单元中,偏移量从 0 开始。 依次调用 mysql_fetch_row()将返回结果集中的下一行,如果没有更多行则返回 FALSE。 mysql_fetch_assoc — 从结果集中取得一行作为关联数组 :
mysql_fetch_assoc() 和用 mysql_fetch_array() 加上第二个可选参数 MYSQL_ASSOC 完全相同。它 仅仅返回关联数组。这也是 mysql_fetch_array()起初始的工作方式。如果在关联索引之外还需要数字 索引,用 mysql_fetch_array()。 如果结果中的两个或以上的列具有相同字段名,最后一列将优先。要访问同名的其它列,要么用 mysql_fetch_row()来取得数字索引或给该列起个别名。参见 mysql_fetch_array() 例子中有关别名说 明。 有一点很重要必须指出,用 mysql_fetch_assoc()并不明显 比用 mysql_fetch_row()慢,而且还提供了 明显更多的值。
mysql_query()
仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句返回一个资源标识符,
如果查询执行不正确则返回 FALSE。对于其它类型的 SQL 语句,mysql_query()在执行成功时返回 TRUE,出错时返回 FALSE。非 FALSE 的返回值意味着查询是合法的并能够被服务器执行。这并不说明 任何有关影响到的或返回的行数。 很有可能一条查询执行成功了但并未影响到或并未返回任何行。

Hive函数

关系运算 等值比较: = 语法:A = B 操作类型: 所有基本类型 描述: 如果表达式A与表达式B相等,则为TRUE;否则为FALSE 举例: hive> select 1 from dual where 1=1; 1 不等值比较: <> 语法: A <> B 操作类型: 所有基本类型 描述: 如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A 与表达式B不相等,则为TRUE;否则为FALSE 举例: hive> select 1 from dual where 1 <> 2; 1 小于比较: < 语法: A < B 操作类型: 所有基本类型 描述: 如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A 小于表达式B,则为TRUE;否则为FALSE 举例:

hive> select 1 from dual where 1 < 2; 1 小于等于比较: <= 语法: A <= B 操作类型: 所有基本类型 描述: 如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A 小于或者等于表达式B,则为TRUE;否则为FALSE 举例: hive> select 1 from dual where 1 <= 1; 1 大于比较: > 语法: A > B 操作类型: 所有基本类型 描述: 如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A 大于表达式B,则为TRUE;否则为FALSE 举例: hive> select 1 from dual where 2 > 1; 1 大于等于比较: >= 语法: A >= B 操作类型: 所有基本类型 描述: 如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A 大于或者等于表达式B,则为TRUE;否则为FALSE

Hive学习总结及应用

一、文档说明 熟悉Hive功能,了解基本开发过程,及在项目中的基本应用。 注意:本文档中但凡有hive库操作的语句,其后面的“;”是语句后面的,非文档格式需要。每个hive语句都要以“;”来结束,否则将视相邻两个分号“;”之间的所有语句为一条语句。 二、Hive(数据提取)概述 Hive是构建在HDFS 和Map/Reduce之上的可扩展的数据仓库。是对HADOOP的Map-Reduce进行了封装,类似于sql语句(hive称之为HQL)计算数据从而代替编写代码对mapreduce的操作,数据的来源还是HDFS上面的文件。 Hive中的表可以分为托管表和外部表,托管表的数据移动到数据仓库目录下,由Hive管理,外部表的数据在指定位置,不在Hive 的数据仓库中,只是在Hive元数据库中注册。创建外部表采用“create external tablename”方式创建,并在创建表的同时指定表的位置。 Hive本身是没有专门的数据存储格式,也没有为数据建立索引,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据。所以往Hive表里面导入数据只是简单的将数据移动到表所在的目录中(如果数据是在HDFS上;但如果数据是在本地文件系统中,那么是将数据复制到表所在的目录中)。

三、Hive的元数据 Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。由于Hive的元数据需要不断的更新、修改,而HDFS系统中的文件是多读少改的,这显然不能将Hive的元数据存储在HDFS中。目前Hive将元数据存储在数据库中,如Mysql、Derby中。 Hive metastore 三种存储方式: Hive的meta 数据支持以下三种存储方式,其中两种属于本地存储,一种为远端存储。远端存储比较适合生产环境。 1、使用derby数据库存储元数据(内嵌的以本地磁盘作为存储),这称为“内嵌配置”。 这种方式是最简单的存储方式,只需要在或做如下配置便可。使用derby存储方式时,运行hive会在当前目录生成一个derby文件和一个metastore_db目录。这种存储方式的弊端是在同一个目录下同时只能有一个hive客户端能使用数据库,否则会提示如下错误(这是一个很常见的错误)。 2、使用本机mysql服务器存储元数据,这称为“本地metastore”。这种存储方式需要在本地运行一个mysql服务器, 3、使用远端mysql服务器存储元数据。这称为“远程metastore”。这种存储方式需要在远端服务器运行一个mysql服务器,并且需要在Hive服务器启动meta服务。

hive常用函数参考手册

函数分类 HIVE CLI命令 显示当前会话有多少函数可用 SHOW FUNCTIONS; 显示函数的描述信息 DESC FUNCTION concat; 显示函数的扩展描述信息 DESC FUNCTION EXTENDED concat; 简单函数

函数的计算粒度为单条记录。 关系运算 数学运算 逻辑运算 数值计算 类型转换 日期函数 条件函数 字符串函数 统计函数 聚合函数 函数处理的数据粒度为多条记录。sum()—求和 count()—求数据量 avg()—求平均直 distinct—求不同值数 min—求最小值 max—求最人值 集合函数 复合类型构建 复杂类型访问 复杂类型长度 特殊函数 窗口函数

应用场景 用于分区排序 动态Group By Top N 累计计算 层次查询 Windowing functions lead lag FIRST_VALUE LAST_VALUE 分析函数 Analytics functions RANK ROW_NUMBER DENSE_RANK CUME_DIST PERCENT_RANK NTILE 混合函数 java_method(class,method [,arg1 [,arg2])reflect(class,method [,arg1 [,arg2..]])hash(a1 [,a2...])

UDTF lateralView: LATERAL VIEW udtf(expression) tableAlias AS columnAlias (‘,‘ columnAlias)*fromClause: FROM baseTable (lateralView)* ateral view用于和split, explode等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。lateral view首先为原始表的每行调用UDTF,UTDF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。 常用函数Demo: create table employee( id string, money double, type string)row format delimited fields terminated by‘\t‘ lines terminated by‘\n‘ stored as textfile;load data local inpath ‘/liguodong/hive/data‘into table employee;select*from employee; 优先级依次为NOT AND OR select id,money from employee where(id=‘1001‘or id=‘1002‘)and money=‘100‘;

hive创建自定义函数

hive默认的函数并不是太完整,以后我们使用的使用肯定需要自己补充一些。 下面这个例子是个简单的测试,关于自定义函数的。 函数代码 package com.example.hive.udf; import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.io.Text; public final class Lower extends UDF { public Text evaluate(final Text s) { if (s == null) { return null; } return new Text(s.toString().toLowerCase()); } } 打包 javac -d Lower Lower.java jar -cvf Lower.jar -C Lower/ . 在hive中添加包 hive> add jar /home/hjl/sunwg/Lower.jar; Added /home/hjl/sunwg/Lower.jar to class path 在hive中创建函数 hive> create temporary function my_lower as …com.example.hive.udf.Lower?; OK Time taken: 0.407 seconds 使用函数 hive> select my_lower(name) from test10; 上面介绍了HIVE中的自定义函数,有一些函数是比较基础的,公用的,每次都要create temporary function不免太麻烦了。 这样的基础函数需要直接集成到hive中去,避免每次都要创建。 1,添加函数文件 $HIVE_HOME/src/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFSunwg.java package org.apache.hadoop.hive.ql.udf; import org.apache.hadoop.hive.ql.exec.Description; import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text;

hive语法和常用函数

Hive就是一个基于Hadoop分布式系统上的数据仓库,最早就是由Facebook公司开发的,Hive极大的推进了Hadoop ecosystem在数据仓库方面上的发展。 Facebook的分析人员中很多工程师比较擅长而SQL而不善于开发MapReduce程序,为此开发出Hive,并对比较熟悉SQL的工程师提供了一套新的SQL-like方言——Hive QL。 Hive SQL方言特别与MySQL方言很像,并提供了Hive QL的编程接口。Hive QL语句最终被Hive解析器引擎解析为MarReduce程序,作为job提交给Job Tracker运行。这对MapReduce框架就是一个很有力的支持。 Hive就是一个数据仓库,它提供了数据仓库的部分功能:数据ETL(抽取、转换、加载)工具,数据存储管理,大数据集的查询与分析能力。 由于Hive就是Hadoop上的数据仓库,因此Hive也具有高延迟、批处理的的特性,即使处理很小的数据也会有比较高的延迟。故此,Hive的性能就与居于传统数据库的数据仓库的性能不能比较了。 Hive不提供数据排序与查询的cache功能,不提供索引功能,不提供在线事物,也不提供实时的查询功能,更不提供实时的记录更性的功能,但就是,Hive能很好地处理在不变的超大数据集上的批量的分析处理功能。Hive就是基于hadoop平台的,故有很好的扩展性(可以自适应机器与数据量的动态变化),高延展性(自定义函数),良好的容错性,低约束的数据输入格式。 下面我们来瞧一下Hive的架构与执行流程以及编译流程:

用户提交的Hive QL语句最终被编译为MapReduce程序作为Job提交给Hadoop执行。 Hive的数据类型 Hive的基本数据类型有:TINYINT,SAMLLINT,INT,BIGINT,BOOLEAN,FLOAT,DOUBLE,STRING,TIMESTAMP(V0、8、0+)与BINARY(V0、8、0+)。 Hive的集合类型有:STRUCT,MAP与ARRAY。 Hive主要有四种数据模型(即表):(内部)表、外部表、分区表与桶表。 表的元数据保存传统的数据库的表中,当前hive只支持Derby与MySQL数据库。 内部表: Hive中的表与传统数据库中的表在概念上就是类似的,Hive的每个表都有自己的存储目录,除了外部表外,所有的表数据都存放在配置在hive-site、xml文件的${hive、metastore、warehouse、dir}/table_name目录下。 Java代码 1.CREATE TABLE IF NOT EXISTS students(user_no INT,name STRING,sex STRING, 2.grade STRING COMMOT '班级')COMMONT '学生表' 3.ROW FORMAT DELIMITED

hive利用udf函数直接将统计结果导入mysql的方法详解

如何把hive中的数据导入到mysql中去,方法很多,在网上找到一个用udf函数直接把hive 中数据导入到mysql中去,按照网上的例子操作了很久也没有导入成功,甚是捉急。。。。。 1、使用udf函数导数据到mysql需要两个jar包 在hive>提示符中: Hive>add jar /home/hadoop/hive/lib/hive-contrib-0.13.1.jar; 。。。。。。。此去省略执行提示N个字 Hive>add jar /home/hadoop/hive/lib/mysql-connector-java-5.1.17.jar; 。。。。。。。此去省略执行提示N个字 2、为udf函数命名别名红色的字体dboutput,使用起来就方便点 hive>create temporary function dboutput AS 'org.apache.hadoop.hive.contrib.genericudf.example.GenericUDFDBOutput'; 3、开始导入 Hive>select dboutput('jdbc:mysql://192.168.199.1:3306/dbtest','root','123456','INSERT INTO ep(tid,tname) VALUES (?,?)',tid,tname) from ttv; ----这里只是测试,所以from ttv 后面没带条件也没限制记录数,真实环境就不说了 ----ep为mysql中的表,ttv为hive中的表 4、导入时,你会发现执行失败,有错误冒出:java.io.FileNotFoundException: File does not exist: hdfs://mymast:9000/home/hadoop/hive/lib/hive-contrib-0.13.1.jar ,这个就是上面第1条需要增加的两个jar包之一,这个错很明显,就是在hdfs上找不到jar包,马上在hdfs 上创建home/hadoop/hive/lib目录,然后把两个jar都扔进去,错误就解决了。 5、解决错误继续导入: Hive>select dboutput('jdbc:mysql://192.168.199.1:3306/dbtest','root','123456','INSERT INTO ep(tid,tname) VALUES (?,?)',tid,tname) from ttv; 结果提示任务执行倒是成功了,但是状态码为2,表示导入失败,为0才表示导入成功,又捉急了,在网上找了很久找不到答案。。。。。。一个小时在百度上过去了,抱着试试的心态,想了一下元数据连接名称是hive,是不是用hive可以呢?立马改为hive :

Hive 查询优化总结

一、join优化 Join查找操作的基本原则:应该将条目少的表/子查询放在Join 操作符的左边。原因是在Join 操作的Reduce 阶段,位于Join 操作符左边的表的内容会被加载进内存,将条目少的表放在左边,可以有效减少发生内存溢出错误的几率。 Join查找操作中如果存在多个join,且所有参与join的表中其参与join的key都相同,则会将所有的join合并到一个mapred程序中。 案例: SELECT a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key1) 在一个mapre程序中执行join SELECT a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key2) 在两个mapred程序中执行join Map join的关键在于join操作中的某个表的数据量很小,案例: SELECT /*+ MAPJOIN(b) */ a.key, a.value FROM a join b on a.key = b.key Mapjoin 的限制是无法执行a FULL/RIGHT OUTER JOIN b,和map join相关的hive参数:hive.join.emit.interval hive.mapjoin.size.key hive.mapjoin.cache.numrows 由于join操作是在where操作之前执行,所以当你在执行join时,where条件并不能起到减少join数据的作用;案例: SELECT a.val, b.val FROM a LEFT OUTER JOIN b ON (a.key=b.key) WHERE a.ds='2009-07-07' AND b.ds='2009-07-07' 最好修改为: SELECT a.val, b.val FROM a LEFT OUTER JOIN b ON (a.key=b.key AND b.ds='2009-07-07' AND a.ds='2009-07-07') 在join操作的每一个mapred程序中,hive都会把出现在join语句中相对靠后的表的数据stream化,相对靠前的变的数据缓存在内存中。当然,也可以手动指定stream化的表:SELECT /*+ STREAMTABLE(a) */ a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key1) 二、group by 优化 Map端聚合,首先在map端进行初步聚合,最后在reduce端得出最终结果,相关参数:? hive.map.aggr = true是否在Map 端进行聚合,默认为True ? hive.groupby.mapaggr.checkinterval = 100000在Map 端进行聚合操作的条目数目 数据倾斜聚合优化,设置参数hive.groupby.skewindata = true,当选项设定为true,生成的查询计划会有两个MR Job。第一个MR Job 中,Map 的输出结果集合会随机分布到Reduce 中,每个Reduce 做部分聚合操作,并输出结果,这样处理的结果是相同的Group By Key 有可能被分发到不同的Reduce 中,从而达到负载均衡的目的;第二个MR Job 再

hive函数参考手册

1.内置运算符 1.1关系运算符 运算符类型说明 A = B 所有原始类型如果A与B相等,返回TRUE,否则返回FALSE A == B 无失败,因为无效的语法。SQL使用”=”,不使用”==”。 A <> B 所有原始类型如果A不等于B返回TRUE,否则返回FALSE。如果A或B值为”NULL”,结果返回”NULL”。 A < B 所有原始类型如果A小于B返回TRUE,否则返回FALSE。如果A或B值为”NULL”,结果返回”NULL”。 A <= B 所有原始类型如果A小于等于B返回TRUE,否则返回FALSE。如果A或B值为”NULL”,结果返回”NULL”。 A > B 所有原始类型如果A大于B返回TRUE,否则返回FALSE。如果A或B值为”NULL”,结果返回”NULL”。 A >= B 所有原始类型如果A大于等于B返回TRUE,否则返回FALSE。如果A或B值为”NULL”,结果返回”NULL”。 A IS NULL 所有类型如果A值为”NULL”,返回TRUE,否则返回FALSE A IS NOT NULL 所有类型如果A值不为”NULL”,返回TRUE,否则返回FALSE A LIKE B 字符串如果A或B值为”NULL”,结果返回”NULL”。字符串A与B通过sql进行匹配,如果相符返回TRUE,不符返回FALSE。B字符串中的”_”代表任一字符,”%”则代表多个任意字符。例如:(…foobar?like …foo?)返回FALSE,(…foobar? like …foo_ _ _?或者…foobar? like …foo%?)则返回TURE A RLIKE B 字符串如果A或B值为”NULL”,结果返回”NULL”。字符串A与B通过java进行匹配,如果相符返回TRUE,不符返回FALSE。例如:(…foobar? rlike …foo?)返回FALSE,(?foobar? rlike …^f.*r$?)返回TRUE。 A REGEXP B 字符串与RLIKE相同。 1.2算术运算符 运算符类型说明 A + B 所有数字类型A和B相加。结果的与操作数值有共同类型。例如每一个整数是一个浮点数,浮点数包含整数。所以,一个浮点数和一个整数相加结果也是一个浮点数。 A – B 所有数字类型A和B相减。结果的与操作数值有共同类型。 A * B 所有数字类型A和B相乘,结果的与操作数值有共同类型。需要说明的是,如果乘法造成溢出,将选择更高的类型。 A / B 所有数字类型A和B相除,结果是一个double(双精度)类型的结果。 A % B 所有数字类型A除以B余数与操作数值有共同类型。 A & B 所有数字类型运算符查看两个参数的二进制表示法的值,并执行按位”与”操作。两个表达式

大数据技术原理与应用 林子雨版 课后习题答案

第一章 1.试述信息技术发展史上的3次信息化浪潮及具体内容。 2.试述数据产生方式经历的几个阶段 答:运营式系统阶段,用户原创内容阶段,感知式系统阶段。 3.试述大数据的4个基本特征 答:数据量大、数据类型繁多、处理速度快和价值密度低。 4.试述大数据时代的“数据爆炸”的特性 答:大数据时代的“数据爆炸”的特性是,人类社会产生的数据一致都以每年50%的速度增长,也就是说,每两年增加一倍。 5.数据研究经历了哪4个阶段?

答:人类自古以来在科学研究上先后历经了实验、理论、计算、和数据四种范式。 6.试述大数据对思维方式的重要影响 答:大数据时代对思维方式的重要影响是三种思维的转变:全样而非抽样,效率而非精确,相关而非因果。 7.大数据决策与传统的基于数据仓库的决策有什么区别 答:数据仓库具备批量和周期性的数据加载以及数据变化的实时探测、传播和加载能力,能结合历史数据和实时数据实现查询分析和自动规则触发,从而提供对战略决策和战术决策。 大数据决策可以面向类型繁多的、非结构化的海量数据进行决策分析。 8.举例说明大数据的基本应用 答: 9.举例说明大数据的关键技术

答:批处理计算,流计算,图计算,查询分析计算 10.大数据产业包含哪些关键技术。 答:IT基础设施层、数据源层、数据管理层、数据分析层、数据平台层、数据应用层。 11.定义并解释以下术语:云计算、物联网 答:云计算:云计算就是实现了通过网络提供可伸缩的、廉价的分布式计算机能力,用户只需要在具备网络接入条件的地方,就可以随时随地获得所需的各种IT资源。 物联网是物物相连的互联网,是互联网的延伸,它利用局部网络或互联网等通信技术把传感器、控制器、机器、人类和物等通过新的方式连在一起,形成人与物、物与物相连,实现信息化和远程管理控制。 12.详细阐述大数据、云计算和物联网三者之间的区别与联系。

相关主题
文本预览
相关文档 最新文档