Hive SQL

Hive SerDe

Hive SerDe:Serializer and Deserializer

SerDe用于序列化和反序列化,构建在数据存储和执行引擎之间,对两者实现解耦。

Hive同各国ROW FORMAT DELIMITED以及SERDE进行内容的读写。

 

row_format
: DELIMITED
    [FIELDS TERMINATED BY char [ESCAPED BY char]]
    [COLLECTION ITEMS TERMINATED BY char]
    [MAP KEYS TERMINATED BY char]
    [LINES TERMINATED BY char]
:SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value...)]

Hive 正则匹配

 

create table logtb1(
    host string,
    identity string,
    s_u string,
    time string,
    request string,
    referer string,
    agent string
)
row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe'
with serdeproperties(
    "input.regex" = "([^ ]*)\s+([^ ]*)\s+([^ ]*)\s+\\[(.*)\\]\s+\"(.*)\”\s+([-|[0-9]]*)\s+(.*)"
) stored as textfile;

数据格式如下

192.168.57.4 - - [29/Feb/2016:18:14:35+0800] "GET[29/Feb/2016:18:14:36+08001/tomcat.css HTTP/1.1” 304 -
192.168.57.4 - - [29/Feb/2016:18:14:35+0800] "GET[29/Feb/2016:18:14:36+08001/tomcat.css HTTP/1.1” 304 -
192.168.57.4 - - [29/Feb/2016:18:14:35+0800] "GET[29/Feb/2016:18:14:36+08001/tomcat.css HTTP/1.1” 304 -
192.168.57.4 - - [29/Feb/2016:18:14:35+0800] "GET[29/Feb/2016:18:14:36+08001/tomcat.css HTTP/1.1” 304 -
192.168.57.4 - - [29/Feb/2016:18:14:35+0800] "GET[29/Feb/2016:18:14:36+08001/tomcat.css HTTP/1.1” 304 -
192.168.57.4 - - [29/Feb/2016:18:14:35+0800] "GET[29/Feb/2016:18:14:36+08001/tomcat.css HTTP/1.1” 304 -
192.168.57.4 - - [29/Feb/2016:18:14:35+0800] "GET[29/Feb/2016:18:14:36+08001/tomcat.css HTTP/1.1” 304 -
192.168.57.4 - - [29/Feb/2016:18:14:35+0800] "GET[29/Feb/2016:18:14:36+08001/tomcat.css HTTP/1.1” 304 -
192.168.57.4 - - [29/Feb/2016:18:14:35+0800] "GET[29/Feb/2016:18:14:36+08001/tomcat.css HTTP/1.1” 304 -
192.168.57.4 - - [29/Feb/2016:18:14:35+0800] "GET[29/Feb/2016:18:14:36+08001/tomcat.css HTTP/1.1” 304 -
192.168.57.4 - - [29/Feb/2016:18:14:35+0800] "GET[29/Feb/2016:18:14:36+08001/tomcat.css HTTP/1.1” 304 -
192.168.57.4 - - [29/Feb/2016:18:14:35+0800] "GET[29/Feb/2016:18:14:36+08001/tomcat.css HTTP/1.1” 304 -
192.168.57.4 - - [29/Feb/2016:18:14:35+0800] "GET[29/Feb/2016:18:14:36+08001/tomcat.css HTTP/1.1” 304 -
192.168.57.4 - - [29/Feb/2016:18:14:35+0800] "GET[29/Feb/2016:18:14:36+08001/tomcat.css HTTP/1.1” 304 -

Hive函数

内置运算符

关系运算符(where字句中)

运算符 类型 说明
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. 其中”_”表示匹配一个字符,”%”表示匹配多个字符
A RLIKE B 字符串 如果A或B值为NULL, 结果返回NULL。字符串A与B通过JAVA进行匹配,如果相符则返回true, 否则返回false.
A REGEXP B 字符串 与RLIKE相同。使用正则表达式匹配

算术运算符

运算符 类型 说明
A + B 所有数字类型 A和B相加,结果与操作数同类型
A – B 所有数字类型 A和B相减,结果与操作数同类型
A * B 所有数字类型 A和B相乘,结果与操作值有共同类型。如果乘法造成溢出,将选择更高的类型
A / B 所有数字类型 A和B相除,结果是一个double类型的结果
A % B 所有数字类型 A除以B余数与操作数值有共同类型
A & B 所有数字类型 运算符查看两个参数的二进制表示法的值,并执行按位与操作。两个表达式的相同位为1时,结果位1;否则为0
A \ B 所有数字类型
A ^ B 所有数字类型 运算符查看两个参数的二进制表达法的值,并执行按位异或操作。当且仅当只有一个表达式的某位上为1时,结果的该位才为1.否则结果的该位为0
~A 所有数字类型 对一个表达式执行按位”非”取反操作

逻辑运算符

运算符 类型 说明
A AND B 布尔值 A和B同时为true是,结果为true, 否则为false
A && B 布尔值 与AND相同
A OR B 布尔值 A或B 中任何一个结果为true, 则结果为true, 否则为false. 如果A和B同时为NULL, 则结果为NULL
A \ B 布尔值
NOT A 布尔值 如果A为NULL或结果为false时,返回true. 否则返回false
!A 布尔值 与NOT相同

内置函数

复杂类型函数

函数 类型 说明
map (key1, value2, key2, value2..) 通过指定的键/值对,创建一个map
struct (val1, val2, val3…) 通过指定的字段值,创建一个结构。结构字段名称将COL1, COL2…
array (val1, val2, val3…) 通过指定的元素,创建一个数组

对复杂类型函数操作

函数 类型 说明
A[n] A是一个数组,n是一个整型 返回数组A中的第n个元素,第一个元素下标从0开始
M[]key] M是Map<K,V>,关键K型 返回Map中键key对应的值
S.x S为struct类型 返回结构S中的x属性的值

数学函数

返回类型 函数 说明
BIGINT round(double a) 四舍五入
DOUBLE round(double a,int d) 小数部分d位之后数字四舍五入
BIGINT floor(double a) 对给定的数字A进行向下取整最接近的整数
BIGINT ceil(double, a), ceiling(double a) 将给定数字a向上取整
double rand(), rand(int seed) 返回大于或等于0且小于1的平均分布随机数。
double exp(double a) 返回e的a次方
double ln(double a) 返回给定数值的自然对数
double log10(double a) 返回给定数值的以10为底自然对数
double log2(double a) 返回给定数值的以2为底自然对数
double log(double base, double a) 返回给定数值a的以base为底自然对数
double pow(double a, double p), power(double a, double p) 返回数字a的p次幂的结果
double sqrt(double a) 返回数值的平方根
string bing(bigint a) 返回二进制格式
string hex(bigint a) hex(string a) 将证书或字符串转换为十六进制字符串
string unhex(string a) 将十六进制字符串转换为由数字表示的字符串
string conv(bigint num, int from_base, int to_base) 将指定数值,由原来的度量体系转换为指定的试题体系
double abs(double a) 取绝对值
int double pmod(int am, int b), pmod(double a, double b) 返回a除以b的余数的绝对值
double sin(double a) 返回给定角度的正弦值

搜集函数

返回类型 函数 说明
int size(Map<key, value>) 返回map类型的元素数量
int site(Array) 返回数组类型的元素数量

类型转换函数

INT -> BIGINT自动转换, BIGINT -> INT需要强制转换类型

返回类型 函数 说明
指定 type cast(expr as ) 类型转换。

日期函数

返回类型 函数 说明
string from_unixtime(bigint unixtime[, string format]) UNIX_TIMESTAMP参数表示返回一个值”yyyy-MM-dd HH:mm:ss”或”yyyyMMddHHmmss.uuuuuu”格式,这取决于是否在一个字符串或数字语境中使用的功能,该值表示当前的时区的时间
bigint unix_timestamp() 如果不带参数的调用,返回一个unix时间戳,从1970年开始计算
bigint unix_timestamp(string date) 指定日期参数调用UNIX_TIMESTAMP(), 返回从1970年到指定时间的秒数
bigint unix_timestamp(string date, string pattern) 指定时间输入格式,返回从1970到指定日期的秒数
string to_date(string timestamp) 返回时间中的年月日
string to_dates(string date) 给定一个日期date, 返回一个天数
int year(string date) 返回指定时间的年份
int month(string date) 返回指定时间的月份
int day(string date) 返回指定时间的日期

条件函数

返回 函数 说明
T if(boolean testCondition, T valueTrue, T valueFaseOrNull) 判断是否满足条件,如果满足返回一个值,如果不满足则返回另外一个值
T COALESCE(T v1, T v2…) 返回一组数据中,第一个不为NULL的值,如果均为NULL, 返回NULL
T CASE a WHEN  b THEN c [WHEN  d THEN e]*[ELSE f] END 当a=b时,返回c; 当a=d时,返回e, 否则返回f
T CASE WHEN a THEN b [WHEN c THEN d] *[ELSE e] END 当值为a时返回b, 当值为c时返回d, 否则返回e

如果你要找的是自定义函数,可以查看有关文章哟~~

Leave a Comment

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注