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