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 |
如果你要找的是自定义函数,可以查看有关文章哟~~