hive map 转string_Hive之SELECT语句的实用技巧 (一) | 每日五分钟学大数据

dff579a1637351d8c2c924e2c1f30fe4.png

SELECT是SQL中的射影算子,FROM子句标识了从哪个表、视图或嵌套查询中选择记录。对于一个给定的记录,SELECT指定了要保存的列以及输出函数需要调用的一个或 多个列(例如,像 count(*) 这样的聚合函数)。来看这样一个数据类型稍复杂的例子
CREATE TABLE employees (name STRING,salary  FLOAT,subordinates ARRAY,deductions MAP,address STRUCT)PARTITIONED BY (country STRING, state STRING);
当用户选择的列是集合数据类型时,Hive会使用JSON 语法应用于输出。subordinates 列为一个数组,其值使用一个被括在 内的以逗号分隔的列表进行表示。注意,集合的字符串元素是加上引号的,而基本数据类型STRING的列值是不加引号的。
hive> SELECT  subordinates FROM employees;["Mary Smith", "Todd Jones”] ["Bill King"]
deductions列是一个MAP,其使用JSON格式来表达map,即使用一个被括在{...}内的 以逗号分隔的键:值对列表进行表示:
hive> SELECT deductions from employees;{”FederalTaxes" : 0.2, HState Taxes" : 0.05, ''Insurance": 0.1}
最后,address列是一个STRUCT,其也是使用JSON map格式进行表示的:
hive> SELECT name, address FROM employees;{ "street" : nl Michigan Ave. ", "city” :"Chicago*', "state**: nIL", nzip":60600}
接下来,让我们看看如何引用集合数据类型中的元素。首先,数组索引是基于0的,这个和在Java中是一样的。这里是一个选择subordinates数 组中的第1个元素的查询:
hive> SELECT name, subordinates[0] FROM employees; John DoeMary SmithTodd JonesBill King
注意,引用一个不存在的元素将会返回NULL。同时,提取出的STRING数据类型的 值将不再加引号!为了引用一个MAP元素,用户还可以使用ARRAY[.„]语法,但是使用的是键值而不是整数索引。最后,为了引用STRUCT中的一个元素,用户可以使用“点”符号,类似于前面提到的 “表的别名.列名”这样的用法:
hive> SELECT name, address.city FROM employees;John DoeMary SmithTodd JonesBill King
WHERE子句中同样可以使用这些引用方式,后面还会有一篇特别介绍where语句。 其他的一些SELECT技巧1. 使用正则表达式来指定列我们甚至可以使用正则表达式来选择我们想要的列。下面的查询将会从表Stocks中选 择symbol列和所有列名以price作为前缀的列:
hive> SELECT symbol, 'price.*' FROM stocks;
2. 算术运算符Hive中支持所有典型的算术运算符

运算符

类型

描述

A + B

数值

A和B相加

A-B

数值

A减去B

A*B

数值

A和B相乘

A/B

数值

A除以B。如果能整除,那么返回商数(译者注:商数是一个整 数,表示在不考虑有余数的情况下,除数可以除被除数的次数)

A%B

数值

A除以B的余数

A&B

数值

A和B按位取与

A|B

数值

A和B按位取或

~A

数值

A按位取反

算术运算符接受任意的数值类型。不过,如果数据类型不同,那么两种类型中值范围 较小的那个数据类型将转换为其他范围更广的数据类型。(范围更广在某种意义上就是指一个类型具有更多的字节从而可以容纳更大范围的值)

参考资料:

1.《Hive编程指南》 

2. Hive官方wiki:

https://cwiki.apache.org/confluence/display/HIVE


- END - 智能人工推荐:

说说实时流式计算

大数据 SQL Boy 脱坑指南

>>  点击查看更多    想跟老蒙一对一学大数据?点这里 ed35509dbd5e00e4e2ecead11d61e3ec.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值