Python大数据之Hadoop学习——day06_hive学习02

一.hive内外表操作

1. 建表语法

create [external] table [if not exists] 表名(字段名 字段类型 ,字段名 字段类型,...)

[partitioned by (分区字段名 分区字段类型)]        # 分区表固定格式

[clustered by (分桶字段名) into 桶个数 buckets]        # 分桶表固定格式

[sorted by (排序字段名 asc|desc)]

[row format delimited fields terminated by '字段分隔符' ]        # 自定义字段分隔固定格式

[stored as textfile]        # 默认即可

[location 'hdfs://域名:8020/user/hive/warehouse/库名.db/表名'] # 默认即可

; # 注意: 最后一定加分号结尾

2. 数据类型

基本数据类型:

整数        int

小数        float double

字符串        string varchar

时间        date timestamp

3. 表分类

Hive中可以创建的表有好几种类型,分别是:

内部表(管理表或者托管表)

外部表(非管理表或者非托管表)

二.内部表基本操作

1. 知识点

创建内部表:create table [if not exists] 内部表名(字段名 字段类型,字段名 字段类型...)

[row format delimited fields terminated by '字段分隔符'];

复制内部表:方式1:like方式复制表结构        方式2:as方式复制表结构和数据

删除内部表:drop table 内部表名;

        注意:删除内部表效果是mysql中表的相关元数据被删除,同时存储在hdfs中业务数据本身也被删除

查看表格式话信息:desc formatted 表名;

-- 内部表类型:MANAGED_TABLE

注意:还可以使用truncate清空内部表数据        格式:truncate table 内部表名

三. 外部表基本操作[练习]

1. 知识点

创建外部表:create external table [if not exists] 外部表名(字段名 字段类型,字段名 字段类型,...)[row format delimited fields terminated by '字段分隔符'];

 

复制表:方式1:like方式复制表结构

注意:as 方式不可以使用

 

删除外部表:drop table 外部表名

注意:删除外部表效果是mysql中元数据被删除,但是存储在hdfs的业务数据本身被保存

 

查看表格式化信息:desc formatted 表名;

-- 外部表类型:EXTERNAL_TABLE

 

注意:外部表不能使用truncate清空数据本身

四 .查看/修改表

1. 知识点

查看所有表:show tables;

查看建表语句:show create table 表名;

查看表信息:desc 表名;

查看表结构信息:desc 表名;

查看表格式化信息:desc formatted 表名;        注意:formatted能够展示详细信息

修改表名:alter table 旧表名rename to 新表名

字段添加:alter table 表名 add columns (字段名 字段类型);

字段的替换:alter table 表名 replace columns (字段名 字段类型,...)

字段名和字段类型同时修改:alter table 表名 change 旧字段名 新字段名 新字段类型;

注意:字符串类型不能直接改数值类型

 

修改表路径:alter table 表名 set location ‘hdfs中存储路径’;

修改表属性:alter table 表名 set tblproperties('属性名'=‘属性值’)

五.默认分隔符

1.知识点:

创建表的时候,如果不指定分隔符,以后表只能识别默认的分隔符

一般为:\0001,SOH,^A,□

六.快速映射表

1. 知识点:

创建表的时候指定分隔符:create [external] table 表名(字段名 字段类型) row format delimited fields terminated by 符号;

 

加载数据:load data [local] inpath '结构话数据文件' into table 表名;

七.数据导入和导出

文件数据加载导入
1.直接上传文件

window页面上传

linux本地put上传

hdfs dfs -put 文件 路径

2.load加载文件:

从hdfs路径把文件移动到表对应存储路径中:

load data inpath 'HDFS文件路径' [overwrite] into table 表名;

 

从linux本地把文件上传到表对应存储路径中:

load data local inpath 'Linux文件路径' [overwrite] into table 表名;

3.insert插入数据

从其他表查询数据'追加'插入到当前表中:insert into [table] 表名 select 语句;

从其他表查询数据'覆盖'插入到当前表中:insert overwrite table 表名 select 语句;

文件数据导出
1.直接下载文件

web页面下载

get命令下载文件

需求: 已知search_log.txt文件在HFDS的/user/hive/warehouse/hive02.db/search_log路径下,要下载到linux系统

[root@node1 binzi]# hdfs dfs -get /user/hive/warehouse/hive02.db/search_log/search_log.txt /binzi
2. insert导出数据

查询数据导出到hdfs其他路径:insert overwrite directory 'hdfs存储该数据路径' select语句;

 

查询数据导出到linux本地中:insert overwrite local directory 'linux存储该数据路径' select语句;

 

注意:  overwrite默认是覆盖重写,所以在指定存储该数据路径的时候尽量指定一个空的目录

注意: 导出数据的时候不指定分隔符采用默认分隔符SOH,0001,?...

 

导出数据指定分隔符添加:row format delimite fields terminated by ‘分隔符’

3.hive_shell命令

hive命令执行sql语句:  hive -e "sql语句" > 存储该结果数据的文件路径

hive命令执行sql脚本:  hive -f sql脚本文件 > 存储该结果数据的文件路径

hql语句导出

# 以下命令都是在linux的shell命令行执行
# 3.1使用hive -e sql语句方式导出数据
[root@node1 ~]# hive -e 'select * from hive02.search_log;' > /home/hs1.txt
[root@node1 ~]# cat hs1.txt

hql语句

# 3.2使用hive -f 脚本文件方式导出数据
[root@node1 ~]# echo 'select * from hive02.search_log;' > /home/export.sql
[root@node1 ~]# hive -f export.sql > /home/hs2.txt
[root@node1 ~]# cat hs2.txt

你可能感兴趣的:(大数据,hadoop,学习)