DML数据操作
浅小兮由于最近个人原因断更了2个月
数据导入
向表中装载数据(Load)
-
基本语法
1 | hive(default)> load data [local] inpath '数据的 path' [overwrite] into table table_name [partition |
Load data | 加载数据 |
---|---|
Local | 表示从本地加载数据到hive表,否则是从HDFS加载数据到Hive表 |
Inpath | 表是加载数据的路径 |
Overwrite | 表示覆盖表中已有数据,否则表示追加 |
Into table | 表示加载数据到哪张表中 |
Partition | 表示加载数据到指定分区 |
-
实操案例
-
创建一张表student
1 | hive (default)> create table student( |
1. 加载本地文件到hive
1 | hive (default)> load data local inpath '/opt/module/hive/datas/student.txt' into table |
2. 加载HDFS文件到hive中
1. 上传文件到HDFS
hive (default)> dfs -put /opt/module/hive/datas/student.txt /input;
2. 加载HDFS上数据
hive (default)> load data inpath '/input/student.txt' into table default.student;
3. 加载数据覆盖表中已有的数据
加载数据覆盖表中已有的数据
1 | hive (default)> load data inpath '/input/student.txt' overwrite into table default.student; |
竟然报错了,信息显示文件不存在?显然,加载HDFS上的文件到hive表中,采用的类似剪切的方式,将文件拷贝到表的映射目录下。
上传文件到HDFS
1 | hive (default)> dfs -put /opt/module/hive/datas/student.txt /input; |
加载HDFS上数据
1 | hive (default)> load data inpath '/input/student.txt' overwrite into table default.student; |
查看表中数据是否被覆盖。
向表中插入数据(Insert)
-
创建一张表
1 | hive (default)> create table student2(id int, name string) row format delimited fields |
-
基本插入数据
1 | hive (default)> insert into table student2 values(1,'wangwu'),(2,'zhaoliu'); |
-
将查询结果插入表中
1 | hive (default)> insert overwrite table student2 select id, name from student ; |
Insert into: | 以追加数据的方式插入到表或分区,原有数据不会删除 |
---|---|
Insert overwrite: | 会覆盖表中已存在的数据 |
注意:insert不支持插入部分字段。
查询语句中创建表并加载数据(As Select)
根据查询结果创建表(查询的结果会添加到新创建的表中)
1 | hive(default)> create table if not exists student4 |
创建表时通过Location指定加载数据路径
-
上传数据到hdfs上
1 | hive (default)> dfs -mkdir /input/student; |
-
创建表,并指定在hdfs上的位置
1 | hive (default)> create external table if not exists student5( |
-
查询数据
1 | hive (default)> select * from student5; |
注意:hive创建表时,默认时将表的名字作为默认HDFS上表对应的存储路径的名字,但是,如果你通过 localtion指定存储路径,就不会修改路径名字为表名了。如上边的表名为student5和其在HDFS上的存储 路径student。
数据导出
Insert导出
-
将查询的结果导出到本地
1 | hive (default)> insert overwrite local directory '/opt/module/hive/datas/export/student' |
-
将查询的结果
格式化
导出到本地
1 | hive(default)> insert overwrite local directory '/opt/module/hive/datas/export/student' |
-
将查询的结果导出到HDFS上(
没有local
)
1 | hive (default)> insert overwrite directory '/output/student' |
注意:insert 导出时,hive 会自动创建导出目录,但是由于是 overwrite,所以导出路径一定要写准确,否 则存在误删数据的可能。
数据迁移
export 和import 命令主要用于两个Hadoop平台集群之间Hive表迁移。(元数据源+真实数据)
Export 导出到HDFS 上
hive(default)> export table default.student2 to '/地址'; 导出到哪里
Import 数据到指定Hive 表中
注意:先用export导出后,再将数据导入。
hive (default)> import table student2 from '/地址 '; 从哪里导入