本人新手才学Hive,不对的地方额昂大佬评论区指出
Hive操作表语法
create table if not exists 表 :创建表的时候如果表存在会忽略后面代码,不会报错
create database 库名 location '地址'
---comment '数据库描述信息'
---with dbproperties('key'='value') //键值对形式描述信息
---describe databese (extended):输出数据库(键值对)的详细信息
drop **if exists** partition 删除表是不会报错
drop database if exists 库名 cascade:删除数据库时会自动删除库中的表数据
注:删除数据库时必须是空库,否则不会删除。
创建表时插入数据
create table if not exists table_str as select * from table_a;
或
create table str as select a.id,a.name,b.age from a left join b where a.id=b.id;
插入数据
insert into table_str(id,age) values(1,23);
hive函数
贴一个链接:https://blog.csdn.net/s_hizhi/article/details/99223549
字符串函数
替换函数:
translate(string str1,string str2,string str3) :str1中出现str2就把str2换成str3并返回、如果没有不做任何操作并返回
find_in_set(string str,string str1):返回str在str1中出现的位置,str1必须由,号分割;参数为逗号或查找失败返回0,任一参数为NULL返回NULL
连接函数:
concat():将括号里的字符串成一个字符串
concat_ws(string S,string a,string b):用第一个参数作为间隔符把两个参数穿起来
截取:
substring():截取字符串,可能会从0、1开始计算
substr(str, int n):从n的位置截取字符串并返回
sunstr(str,int n,int len):从n截取,长度为len返回
sunstr_index():substring_index('www.apache.org', '.', 2) = 'www.apache'..
截取第count分隔符之前的字符串,如count为正则从左边开始截取,如果为负则从右边开始截取
分组(列转行):
collect_list:是对分好组的字段,按照分组的字段汇总。即列转行
collect_set:同上,只是list不去重,set去重
拆分:
explode:是把split拆分的字段逐行输出
lateral view :为了跟explode连用从而输出多个字段
json_tuple:对json字符串的多个字段进行解析
get_json_object():对json字符串的某一个字段进行解析
(如果输入的JSON是非法的将返回NULL,注意此路径上JSON字符串只能由数字 字母 下划线组成且不能有大写字母和特殊字符,且key不能由数字开头,这是由于Hive对列名的限制)
其他
ascii(string str):返回str中首个ASCII字符串的整数值
format_number(number x,int d):把数值x转换为#,###,###,##格式的字符串,保留d位小数;如果d为0则四舍五入
in_file(string str,string filename):如果名为filename的文件中包含str字符串就返回true
instr(string str,string substr):返回substr在str中出现的位置(从1开始),失败返回0,任一参数为NULL则返回NULL
length(str):返回字符串str的长度
locate(string substr,string str[,int pos]):返回字符串substr在str中pos后面首次出现的位置
lower(str):返回小写
lcase(str):
lpad(str,int,pad):从左边开始对字符串str使用字符串pad填充,最终len长度为止,如果字符串str本身长度比len大的话,将去掉多余的部分
rpad(str,int,pad):
ltrim(str):去掉str前面的空格
rtrim(str):去掉后面的空格
repeat(str,n):重复输出str字符串n次
reverse(str):反转字符串
space(int n):返回n个空格
数学函数
row_number(*):取出最新的最大的
over(partition by *):按照字段进行分组
over(order by salary):按照字段排序并累加
as:给当前表取一个别名
row_number() over(distribute by id sort(order) by age) 把id相同的发往一个reduce上,并按照age组内排序
nvl(a,b):如果a为空就返回b
hiveconf:是在Hive上下文中设置参数的
hivevar:变量替换
define:简写形式为-d 用途与hivevar一样
cast(字段名 as 转换的类型) 例子:cast(aa as 转换的类型) 【aa=2015-11-03 15:31:26】
date 日期型 ----------------> 2015-11-03
datetime 日期和时间型 ----------------> 2015-11-03 15:31:26
signed int ----------------> 20151103153126
time 时间型 ----------------> 15:31:26