Hive知识图谱
2024-10-28 15:23:00 1 举报
AI智能生成
hive知识图谱大全
作者其他创作
大纲/内容
Hive参数配置
命令行
1、 -i 初始化 HQL 文件。<br>2、 -e 后面跟着sql语句<br>3、 -f 执行 HQL 脚本<br>4、 -v 输出执行的 HQL 语句到控制台<br>5、 -p <port> connect to Hive Server on port number<br>6、 -hiveconf x=y Use this to set hive/hadoop configuration variables.</port>
数据仓库
概念
Data Warehouse(DW) 数据仓库的目的就是为了构建面向分细的集成化的数据环境,为企业提供决策支持,<br><b><font color="#c41230">本身并不产生数据,也不消费数据</font></b>
特点
面向主题
分析的对象,确立好主题再去获取数据,一个主题相关的数据通常分布在多个操作型系统中
集成
数据仓库是不会产生数据的,数据全部来源于外部通过对数据库的数据进行ETL来得到数据仓库的数据,各个的数据源:传统关系型数据库、日志、爬虫、市场调研等
非易失(不可更新性)
全部都是发生过的数据(历史数据)
时变
定期的加载和更新
数仓和数据库的区别
1、数据库是面向事务,数据仓库面向主题
2、数据库存储的业务数据,数据仓库存储的是历史数据
3、数据库为了捕获数据而存在,数据仓库是为了分析数据而存在
4、数据仓库并不是大型的数据库,也不是为了取代数据库而出现
分层架构
源数据层(ODS):贴源层,数据来源于各种数据源的数据
数据仓库层(DW):将源数据层的数据进行ETL操作,得到结构清晰的干净规整的数据
数据应用层(DA):报表展示、即席查询、数据挖掘
hive
概念
hive是基于hadoop的数据仓库的工具,<b>既不负责数据的存储--HDFS,</b><b>也不负责数据的计算--MapReduce</b>
作用
可以将结构化的数据文件==映射==为一张表,可以通过类SQL进行查询
本质
将SQL转化为MR运行
用途
用于离线数据分析
架构
数据模型
db
在 hdfs 中表现为 hive.metastore.warehouse.dir 目录下一个文件夹 eg:user.db
table
在 hdfs 中表现所属 db 目录下一个文件夹
external table
数据存放位置可以在 HDFS 任意指定路径
partition
在 hdfs 中表现为 table 目录下的子目录
bucket
在 hdfs 中表现为同一个表目录下根据 hash 散列之后的多个文件
配置
1、内嵌
解压 hive 安装包 bin/hive 启动即可使用<br>缺点: 不同路径启动 hive,每一个 hive 拥有一套自己的元数据,都会形成一个Metastore.db,无法共享。
2、本地
启动metastore
连接 bin/hive
3、远程
启动metastore,hiveserver2
基本操作
DDL操作(数据定义语言)创建、修改和删除库、表、字段
建表语法
create [external] table [if not exists] table_name <br> [(col_name data_type [comment col_comment], ...)] 数据类型<br> [comment table_comment] 表注释<br> [partitioned by (col_name data_type [comment col_comment], ...)] 分区<br> [clustered by (col_name, col_name, ...) 分桶<br> [sorted by (col_name [asc|desc], ...)] into num_buckets buckets] <br> [row format row_format] 行的格式化,用什么分隔符来分割<br> [stored as file_format] 文件存储的格式<br> [location hdfs_path] 创建外部表时指定的路径
like
允许用户<font color="#c41230">复制现有的表结构</font>,但是不复制数据。
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name <font color="#c41230">LIKE</font> existing_table;
row format delimited
[FIELDS TERMINATED BY char]<br>[COLLECTION ITEMS TERMINATED BY char]<br>[MAP KEYS TERMINATED BY char]<br>[LINES TERMINATED BY char] | SERDE serde_name<br>[WITH SERDEPROPERTIES
外部表
create <font color="#c41230" style="">external</font> table tablename(字段名 字段类型) <font color="#c41230">row format delimited fields terminated by</font> ',' <font color="#c41230">location</font> '/stu';
内部表和外部表的区别
内部表:==删除的时候,元数据信息和hdfs上文件数据都被删除掉==<br>外部表:==删除外部表的,元数据会被删除,HDFS的文件数据不会被删除的==
分区表
会在表的文件夹下创建多个子目录,数据会放到各个子目录中
create table tablename(字段名 类型) <font color="#c41230">partitioned by (guojia string,等多级分区);</font><br>--注意顺序问题<br>--分区的字段不能是表当中的字段<br>
加载数据
==必须登陆到hive的窗口执行==
<font color="#c41230">load data local inpath</font> '绝对文件路径' <font color="#c41230">into table</font> 表名 <font color="#c41230">partition</font> (guojia='usa',等多级分区);<br>
查看分区
show partitions day_hour_table;
分桶表
clustered by(字段名) <br>into num(分桶数) buckets<br>--如果该分桶字段是string,会根据字符串的hashcode % bucketsNum<br>--如果该分桶字段是数值类型,数值 % bucketsNum<br>
指定开启分桶
set hive.enforce.bucketing = true;<br>set mapreduce.job.reduces=4;
加载数据
<font color="#c41230">insert overwrite</font> table stu_buck <font color="#c41230">select</font> * from student cluster by(Sno);<br>--默认不让直接使用分桶表
修改表
增加分区
<font color="#c41230">ALTER</font> TABLE table_name <font color="#c41230">ADD PARTITION</font> (dt='2008-08-08', country='us') <font color="#c41230">location</font><br>'路径' <font color="#c41230">PARTITION</font> (dt='2008-08-09', country='us') <font color="#c41230">location</font><br>'路径'; //一次添加多个分区
删除分区
<font color="#c41230">ALTER</font> TABLE table_name <font color="#c41230">DROP</font> IF EXISTS <font color="#c41230">PARTITION</font> (dt='2008-08-08', country='us');
修改分区
<font color="#c41230">ALTER </font>TABLE table_name <font color="#c41230">PARTITION</font> (dt='2008-08-08') <font color="#c41230">RENAME TO</font> PARTITION (dt='20080808');
添加列
<font color="#c41230">ALTER</font> TABLE table_name <font color="#c41230">ADD|REPLACE COLUMNS</font> (col_name STRING);<br>注: ADD 是代表新增一个字段, 新增字段位置在所有列后面(partition 列前)<br>REPLACE 则是表示替换表中所有字段
修改列
<font color="#c41230">ALTER</font> TABLE table_name <font color="#c41230">CHANGE</font> a <font color="#c41230">a1 INT</font>; //修改 a 字段名
DCL操作(数据库的控制语言) 授权
DQL操作(数据库查询语言) select
DML操作(数据库的操作语言) 增删改
load
<font color="#c41230">load data</font> [local] <font color="#c41230">inpath</font> 'filepath' [overwrite] <font color="#c41230">into table</font> table_name [partition(partcol1=val1, partcol2=val2 ...)]
insert + select
<font color="#c41230">insert overwrite table</font> stu_buck<br><font color="#c41230">select</font> * from student cluster by(Sno);
select
<font color="#c41230">SELECT</font> [all | distinct] select_expr,select_expr,....<br><font color="#c41230">FROM</font> table_name<br><font color="#c41230">JOIN</font> table_other <font color="#c41230">ON</font> expr<br>[where where_condition] <br>[group by col_list[having condition]]<br>[<font color="#c41230">CLUSTER BY</font> col_list<br> | [<font color="#c41230">DISTRIBUTE BY</font> col_list] [<font color="#c41230">SORT BY</font>| <font color="#c41230">ORDER BY</font> col_list]<br>]<br>[LIMIT number]<br>
hive join
inner join
左右表都满足条件的数据
left join
以左边的表为主表,左边的表的字段都会显示
right join
以右边的表为主表,右边的表的字段都会显示
outer join
full outer 会显示所有的表的字段,没有匹配到的有NULL来表示
Hive函数
内置运算符、函数
自定义函数
UDF( User-Defined-Function) <b><font color="#c41230">普通函数</font></b> 一进一出
UDAF( User-Defined Aggregation Function) <b><font color="#c41230">聚合函数</font></b>,多进一出
UDTF( User-Defined Table-Generating Functions) <b><font color="#c41230">表生成函数</font></b> 一进多出
explode
特殊的分隔符处理
函数的高阶特性
lateral view 侧视图
行列转换
多行转单列
单列转多行
reflect
select reflect(class_name,method_name,col1,col2) from test_udf2;
内置运算符、函数
关系运算
等值与不等值比较 =, <>
小于 大于比较
<, <=, >, >=
空与非空判断
is null, is not null
like比较
A like B
java的like比较
rlike
regexp
功能和rlike一样
逻辑与数学运算
加减乘除取余
位与(&)/或(|)/异或(^)/取反(~)
算的时候是走的二进制
逻辑与或非(and or not)
数值运算
取整 round
向下取整floor 向上取整ceil
取随机数 rand
日期函数
unix时间戳转日期
from_unixtime
from_unixtime
from_unixtime(1323308943,'yyyyMMdd')
获取当前UNIX时间戳函数
unix_timestamp()
unix_timestamp()
日期转UNIX时间戳函数
unix_timestamp()
unix_timestamp()
unix_timestamp('2011-12-07 13:01:03')
日期时间转日期函数
to_date()
to_date()
hive> select to_date('2011-12-08 10:03:01') from dual;<br>2011-12-08<br>
日期转年/月/日/时。。。。函数
year,month,day,hour,minute,second,weekofyear
hive> select year('2011-12-08 10:03:01') from dual;<br>2011<br>
日期比较函数
datediff
datediff(string enddate, string startdate)
日期增加减少函数
date_add,date_sub
date_add(string startdate, int days)
条件函数
if
if(boolean testCondition, T valueTrue, T valueFalseOrNull)
非空查找 coalesce
COALESCE(T v1, T v2, …)
case 条件判断
CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
字符串函数
长度 length()
反转 recerse()
连接 concat()
带分隔符的连接 concat_ws()
字符串截取 substr
转大写 upper,ucase
转小写 lower,lcase
去空格 trim
左边去空格 ltrim
右边去空格 rtrim
正则表达式替换 regexp_replace
url解析 parse_url
json 解释 get_json_object
左补足 lpad
右补足 rpad
Hive窗口函数
Hive数据压缩
Hive数据存储格式
Hive函数
内置运算符、函数
自定义函数
UDF( User-Defined-Function) <b><font color="#c41230">普通函数</font></b> 一进一出
UDAF( User-Defined Aggregation Function) <b><font color="#c41230">聚合函数</font></b>,多进一出
UDTF( User-Defined Table-Generating Functions) <b><font color="#c41230">表生成函数</font></b> 一进多出
explode
特殊的分隔符处理
函数的高阶特性
lateral view 侧视图
行列转换
多行转单列
单列转多行
reflect
select reflect(class_name,method_name,col1,col2) from test_udf2;
内置运算符、函数
内置运算符、函数
内置运算符、函数
关系运算
等值与不等值比较 =, <>
小于 大于比较
<, <=, >, >=
空与非空判断
is null, is not null
like比较
A like B
java的like比较
rlike
regexp
功能和rlike一样
逻辑与数学运算
加减乘除取余
位与(&)/或(|)/异或(^)/取反(~)
算的时候是走的二进制
逻辑与或非(and or not)
数值运算
取整 round
向下取整floor 向上取整ceil
取随机数 rand
日期函数
unix时间戳转日期
from_unixtime
from_unixtime
from_unixtime(1323308943,'yyyyMMdd')
获取当前UNIX时间戳函数
unix_timestamp()
unix_timestamp()
日期转UNIX时间戳函数
unix_timestamp()
unix_timestamp()
unix_timestamp('2011-12-07 13:01:03')
日期时间转日期函数
to_date()
to_date()
hive> select to_date('2011-12-08 10:03:01') from dual;<br>2011-12-08<br>
日期转年/月/日/时。。。。函数
year,month,day,hour,minute,second,weekofyear
hive> select year('2011-12-08 10:03:01') from dual;<br>2011<br>
日期比较函数
datediff
datediff(string enddate, string startdate)
日期增加减少函数
date_add,date_sub
date_add(string startdate, int days)
条件函数
if
if(boolean testCondition, T valueTrue, T valueFalseOrNull)
非空查找 coalesce
COALESCE(T v1, T v2, …)
case 条件判断
CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
字符串函数
长度 length()
反转 recerse()
连接 concat()
带分隔符的连接 concat_ws()
字符串截取 substr
转大写 upper,ucase
转小写 lower,lcase
去空格 trim
左边去空格 ltrim
右边去空格 rtrim
正则表达式替换 regexp_replace
url解析 parse_url
json 解释 get_json_object
左补足 lpad
右补足 rpad
Hive函数
内置运算符、函数
关系运算
等值与不等值比较 =, <>
小于 大于比较
<, <=, >, >=
空与非空判断
is null, is not null
like比较
A like B
java的like比较
rlike
regexp
功能和rlike一样
逻辑与数学运算
加减乘除取余
位与(&)/或(|)/异或(^)/取反(~)
算的时候是走的二进制
逻辑与或非(and or not)
数值运算
取整 round
向下取整floor 向上取整ceil
取随机数 rand
日期函数
unix时间戳转日期
from_unixtime
from_unixtime
from_unixtime(1323308943,'yyyyMMdd')
获取当前UNIX时间戳函数
unix_timestamp()
unix_timestamp()
日期转UNIX时间戳函数
unix_timestamp()
unix_timestamp()
unix_timestamp('2011-12-07 13:01:03')
日期时间转日期函数
to_date()
to_date()
hive> select to_date('2011-12-08 10:03:01') from dual;<br>2011-12-08<br>
日期转年/月/日/时。。。。函数
year,month,day,hour,minute,second,weekofyear
hive> select year('2011-12-08 10:03:01') from dual;<br>2011<br>
日期比较函数
datediff
datediff(string enddate, string startdate)
日期增加减少函数
date_add,date_sub
date_add(string startdate, int days)
条件函数
if
if(boolean testCondition, T valueTrue, T valueFalseOrNull)
非空查找 coalesce
COALESCE(T v1, T v2, …)
case 条件判断
CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
字符串函数
长度 length()
反转 recerse()
连接 concat()
带分隔符的连接 concat_ws()
字符串截取 substr
转大写 upper,ucase
转小写 lower,lcase
去空格 trim
左边去空格 ltrim
右边去空格 rtrim
正则表达式替换 regexp_replace
url解析 parse_url
json 解释 get_json_object
左补足 lpad
右补足 rpad
自定义函数
UDF( User-Defined-Function) <b><font color="#c41230">普通函数</font></b> 一进一出
UDAF( User-Defined Aggregation Function) <b><font color="#c41230">聚合函数</font></b>,多进一出
UDTF( User-Defined Table-Generating Functions) <b><font color="#c41230">表生成函数</font></b> 一进多出
explode
内置运算符、函数
关系运算
等值与不等值比较 =, <>
小于 大于比较
<, <=, >, >=
空与非空判断
is null, is not null
like比较
A like B
java的like比较
rlike
regexp
功能和rlike一样
逻辑与数学运算
加减乘除取余
位与(&)/或(|)/异或(^)/取反(~)
算的时候是走的二进制
逻辑与或非(and or not)
数值运算
取整 round
向下取整floor 向上取整ceil
取随机数 rand
日期函数
unix时间戳转日期
from_unixtime
from_unixtime
from_unixtime(1323308943,'yyyyMMdd')
获取当前UNIX时间戳函数
unix_timestamp()
unix_timestamp()
日期转UNIX时间戳函数
unix_timestamp()
unix_timestamp()
unix_timestamp('2011-12-07 13:01:03')
日期时间转日期函数
to_date()
to_date()
hive> select to_date('2011-12-08 10:03:01') from dual;<br>2011-12-08<br>
日期转年/月/日/时。。。。函数
year,month,day,hour,minute,second,weekofyear
hive> select year('2011-12-08 10:03:01') from dual;<br>2011<br>
日期比较函数
datediff
datediff(string enddate, string startdate)
日期增加减少函数
date_add,date_sub
date_add(string startdate, int days)
条件函数
if
if(boolean testCondition, T valueTrue, T valueFalseOrNull)
非空查找 coalesce
COALESCE(T v1, T v2, …)
case 条件判断
CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
字符串函数
长度 length()
反转 recerse()
连接 concat()
带分隔符的连接 concat_ws()
字符串截取 substr
转大写 upper,ucase
转小写 lower,lcase
去空格 trim
左边去空格 ltrim
右边去空格 rtrim
正则表达式替换 regexp_replace
url解析 parse_url
json 解释 get_json_object
左补足 lpad
右补足 rpad
特殊的分隔符处理
函数的高阶特性
lateral view 侧视图
行列转换
多行转单列
单列转多行
reflect
select reflect(class_name,method_name,col1,col2) from test_udf2;
内置运算符、函数
内置运算符、函数
关系运算
等值与不等值比较 =, <>
小于 大于比较
<, <=, >, >=
空与非空判断
is null, is not null
like比较
A like B
java的like比较
rlike
regexp
功能和rlike一样
逻辑与数学运算
加减乘除取余
位与(&)/或(|)/异或(^)/取反(~)
算的时候是走的二进制
逻辑与或非(and or not)
数值运算
取整 round
向下取整floor 向上取整ceil
取随机数 rand
日期函数
unix时间戳转日期
from_unixtime
from_unixtime
from_unixtime(1323308943,'yyyyMMdd')
获取当前UNIX时间戳函数
unix_timestamp()
unix_timestamp()
日期转UNIX时间戳函数
unix_timestamp()
unix_timestamp()
unix_timestamp('2011-12-07 13:01:03')
日期时间转日期函数
to_date()
to_date()
hive> select to_date('2011-12-08 10:03:01') from dual;<br>2011-12-08<br>
日期转年/月/日/时。。。。函数
year,month,day,hour,minute,second,weekofyear
hive> select year('2011-12-08 10:03:01') from dual;<br>2011<br>
日期比较函数
datediff
datediff(string enddate, string startdate)
日期增加减少函数
date_add,date_sub
date_add(string startdate, int days)
条件函数
if
if(boolean testCondition, T valueTrue, T valueFalseOrNull)
非空查找 coalesce
COALESCE(T v1, T v2, …)
case 条件判断
CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
字符串函数
长度 length()
反转 recerse()
连接 concat()
带分隔符的连接 concat_ws()
字符串截取 substr
转大写 upper,ucase
转小写 lower,lcase
去空格 trim
左边去空格 ltrim
右边去空格 rtrim
正则表达式替换 regexp_replace
url解析 parse_url
json 解释 get_json_object
左补足 lpad
右补足 rpad
0 条评论
下一页