Hive知识图谱
2024-10-28 15:23:00 1 举报
AI智能生成
hive知识图谱大全
作者其他创作
大纲/内容
Hive参数配置
命令行
1、 -i 初始化 HQL 文件。
2、 -e 后面跟着sql语句
3、 -f 执行 HQL 脚本
4、 -v 输出执行的 HQL 语句到控制台
5、 -p connect to Hive Server on port number
6、 -hiveconf x=y Use this to set hive/hadoop configuration variables.
2、 -e 后面跟着sql语句
3、 -f 执行 HQL 脚本
4、 -v 输出执行的 HQL 语句到控制台
5、 -p
6、 -hiveconf x=y Use this to set hive/hadoop configuration variables.
数据仓库
概念
Data Warehouse(DW) 数据仓库的目的就是为了构建面向分细的集成化的数据环境,为企业提供决策支持,
本身并不产生数据,也不消费数据
本身并不产生数据,也不消费数据
特点
面向主题
分析的对象,确立好主题再去获取数据,一个主题相关的数据通常分布在多个操作型系统中
集成
数据仓库是不会产生数据的,数据全部来源于外部通过对数据库的数据进行ETL来得到数据仓库的数据,各个的数据源:传统关系型数据库、日志、爬虫、市场调研等
非易失(不可更新性)
全部都是发生过的数据(历史数据)
时变
定期的加载和更新
数仓和数据库的区别
1、数据库是面向事务,数据仓库面向主题
2、数据库存储的业务数据,数据仓库存储的是历史数据
3、数据库为了捕获数据而存在,数据仓库是为了分析数据而存在
4、数据仓库并不是大型的数据库,也不是为了取代数据库而出现
分层架构
源数据层(ODS):贴源层,数据来源于各种数据源的数据
数据仓库层(DW):将源数据层的数据进行ETL操作,得到结构清晰的干净规整的数据
数据应用层(DA):报表展示、即席查询、数据挖掘
hive
概念
hive是基于hadoop的数据仓库的工具,既不负责数据的存储--HDFS,也不负责数据的计算--MapReduce
作用
可以将结构化的数据文件==映射==为一张表,可以通过类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 启动即可使用
缺点: 不同路径启动 hive,每一个 hive 拥有一套自己的元数据,都会形成一个Metastore.db,无法共享。
缺点: 不同路径启动 hive,每一个 hive 拥有一套自己的元数据,都会形成一个Metastore.db,无法共享。
2、本地
启动metastore
连接 bin/hive
3、远程
启动metastore,hiveserver2
基本操作
DDL操作(数据定义语言)创建、修改和删除库、表、字段
建表语法
create [external] table [if not exists] table_name
[(col_name data_type [comment col_comment], ...)] 数据类型
[comment table_comment] 表注释
[partitioned by (col_name data_type [comment col_comment], ...)] 分区
[clustered by (col_name, col_name, ...) 分桶
[sorted by (col_name [asc|desc], ...)] into num_buckets buckets]
[row format row_format] 行的格式化,用什么分隔符来分割
[stored as file_format] 文件存储的格式
[location hdfs_path] 创建外部表时指定的路径
[(col_name data_type [comment col_comment], ...)] 数据类型
[comment table_comment] 表注释
[partitioned by (col_name data_type [comment col_comment], ...)] 分区
[clustered by (col_name, col_name, ...) 分桶
[sorted by (col_name [asc|desc], ...)] into num_buckets buckets]
[row format row_format] 行的格式化,用什么分隔符来分割
[stored as file_format] 文件存储的格式
[location hdfs_path] 创建外部表时指定的路径
like
允许用户复制现有的表结构,但是不复制数据。
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name LIKE existing_table;
row format delimited
[FIELDS TERMINATED BY char]
[COLLECTION ITEMS TERMINATED BY char]
[MAP KEYS TERMINATED BY char]
[LINES TERMINATED BY char] | SERDE serde_name
[WITH SERDEPROPERTIES
[COLLECTION ITEMS TERMINATED BY char]
[MAP KEYS TERMINATED BY char]
[LINES TERMINATED BY char] | SERDE serde_name
[WITH SERDEPROPERTIES
外部表
create external table tablename(字段名 字段类型) row format delimited fields terminated by ',' location '/stu';
内部表和外部表的区别
内部表:==删除的时候,元数据信息和hdfs上文件数据都被删除掉==
外部表:==删除外部表的,元数据会被删除,HDFS的文件数据不会被删除的==
外部表:==删除外部表的,元数据会被删除,HDFS的文件数据不会被删除的==
分区表
会在表的文件夹下创建多个子目录,数据会放到各个子目录中
create table tablename(字段名 类型) partitioned by (guojia string,等多级分区);
--注意顺序问题
--分区的字段不能是表当中的字段
--注意顺序问题
--分区的字段不能是表当中的字段
加载数据
==必须登陆到hive的窗口执行==
load data local inpath '绝对文件路径' into table 表名 partition (guojia='usa',等多级分区);
查看分区
show partitions day_hour_table;
分桶表
clustered by(字段名)
into num(分桶数) buckets
--如果该分桶字段是string,会根据字符串的hashcode % bucketsNum
--如果该分桶字段是数值类型,数值 % bucketsNum
into num(分桶数) buckets
--如果该分桶字段是string,会根据字符串的hashcode % bucketsNum
--如果该分桶字段是数值类型,数值 % bucketsNum
指定开启分桶
set hive.enforce.bucketing = true;
set mapreduce.job.reduces=4;
set mapreduce.job.reduces=4;
加载数据
insert overwrite table stu_buck select * from student cluster by(Sno);
--默认不让直接使用分桶表
--默认不让直接使用分桶表
修改表
增加分区
ALTER TABLE table_name ADD PARTITION (dt='2008-08-08', country='us') location
'路径' PARTITION (dt='2008-08-09', country='us') location
'路径'; //一次添加多个分区
'路径' PARTITION (dt='2008-08-09', country='us') location
'路径'; //一次添加多个分区
删除分区
ALTER TABLE table_name DROP IF EXISTS PARTITION (dt='2008-08-08', country='us');
修改分区
ALTER TABLE table_name PARTITION (dt='2008-08-08') RENAME TO PARTITION (dt='20080808');
添加列
ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name STRING);
注: ADD 是代表新增一个字段, 新增字段位置在所有列后面(partition 列前)
REPLACE 则是表示替换表中所有字段
注: ADD 是代表新增一个字段, 新增字段位置在所有列后面(partition 列前)
REPLACE 则是表示替换表中所有字段
修改列
ALTER TABLE table_name CHANGE a a1 INT; //修改 a 字段名
DCL操作(数据库的控制语言) 授权
DQL操作(数据库查询语言) select
DML操作(数据库的操作语言) 增删改
load
load data [local] inpath 'filepath' [overwrite] into table table_name [partition(partcol1=val1, partcol2=val2 ...)]
insert + select
insert overwrite table stu_buck
select * from student cluster by(Sno);
select * from student cluster by(Sno);
select
SELECT [all | distinct] select_expr,select_expr,....
FROM table_name
JOIN table_other ON expr
[where where_condition]
[group by col_list[having condition]]
[CLUSTER BY col_list
| [DISTRIBUTE BY col_list] [SORT BY| ORDER BY col_list]
]
[LIMIT number]
FROM table_name
JOIN table_other ON expr
[where where_condition]
[group by col_list[having condition]]
[CLUSTER BY col_list
| [DISTRIBUTE BY col_list] [SORT BY| ORDER BY col_list]
]
[LIMIT number]
hive join
inner join
左右表都满足条件的数据
left join
以左边的表为主表,左边的表的字段都会显示
right join
以右边的表为主表,右边的表的字段都会显示
outer join
full outer 会显示所有的表的字段,没有匹配到的有NULL来表示
Hive函数
内置运算符、函数
自定义函数
UDF( User-Defined-Function) 普通函数 一进一出
UDAF( User-Defined Aggregation Function) 聚合函数,多进一出
UDTF( User-Defined Table-Generating Functions) 表生成函数 一进多出
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;
2011-12-08
2011-12-08
日期转年/月/日/时。。。。函数
year,month,day,hour,minute,second,weekofyear
hive> select year('2011-12-08 10:03:01') from dual;
2011
2011
日期比较函数
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) 普通函数 一进一出
UDAF( User-Defined Aggregation Function) 聚合函数,多进一出
UDTF( User-Defined Table-Generating Functions) 表生成函数 一进多出
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;
2011-12-08
2011-12-08
日期转年/月/日/时。。。。函数
year,month,day,hour,minute,second,weekofyear
hive> select year('2011-12-08 10:03:01') from dual;
2011
2011
日期比较函数
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;
2011-12-08
2011-12-08
日期转年/月/日/时。。。。函数
year,month,day,hour,minute,second,weekofyear
hive> select year('2011-12-08 10:03:01') from dual;
2011
2011
日期比较函数
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) 普通函数 一进一出
UDAF( User-Defined Aggregation Function) 聚合函数,多进一出
UDTF( User-Defined Table-Generating Functions) 表生成函数 一进多出
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;
2011-12-08
2011-12-08
日期转年/月/日/时。。。。函数
year,month,day,hour,minute,second,weekofyear
hive> select year('2011-12-08 10:03:01') from dual;
2011
2011
日期比较函数
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;
2011-12-08
2011-12-08
日期转年/月/日/时。。。。函数
year,month,day,hour,minute,second,weekofyear
hive> select year('2011-12-08 10:03:01') from dual;
2011
2011
日期比较函数
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 条评论
下一页