Hive DML 操作(数据的导入、导出、清空表数据)(不涉及表数据的查询)

数据导入

Load 方式向表中装载数据

语法:load data [loacl] inpath '文件' [overwriter] into table 表名 [partition(指定分区)]

  • load data:加载数据
  • [loacl]:本地加载,不写表示从 HDFS 上加载,注意从 HDFS 上加载的数据,原文件会被移动
  • inpath ‘文件’:文件路径
  • [overwriter]: overwriter 表示覆盖重写
  • [partition(指定分区)] :如果是分区表 需要指定分区则 加上
# 从 HDFS 上导入 追加
load data inpath '/student.txt' into table hive_db;

# 从 HDFS 上导入 覆盖
load data inpath '/student.txt' overwrite into table hive_db;

通过查询语句向表中插入数据(Insert)

首先创建一张分区表

create table test_p(
    id int,
    name string
    )
    partitioned by (day string)
    row format delimited
    fields terminated by '\t';

基本插入数据
语法:insert into table 表名 字段 values(值, 值)

# 它会提交一个 MapReduce 任务

hive> insert into table test_p partition(day="08") values(1,"tp");
Query ID = root_20200108180532_9006dc63-78cd-4afc-9527-028387b366aa
Total jobs = 3
Launching Job 1 out of 3
Number of reduce tasks is set to 0 since there's no reduce operator
.....
Stage-Stage-1: Map: 1   Cumulative CPU: 3.35 sec   HDFS Read: 3765 HDFS Write: 79 SUCCESS
Total MapReduce CPU Time Spent: 3 seconds 350 msec
OK
Time taken: 84.034 seconds

基本模式插入(根据单张表查询结果)

# 语法
insert into | overwriter table 指定表   # 结果插入的表
select 字段 from 表名;                  # 查询的表

# 实例 会跑一个 MapReduce 任务
hive> insert into table test_p partition(day="9")
    > select * from hive_db;
Query ID = root_20200109100135_356015e5-d696-43cd-a6af-68e29fa246e2
Total jobs = 3
Launching Job 1 out of 3
Number of reduce tasks is set to 0 since there's no reduce operator
......
Total MapReduce CPU Time Spent: 2 seconds 350 msec
OK
Time taken: 79.799 seconds

多插入模式(根据多张表查询结果)
查询的结果字段需要 与 插入的字段对应,不能多也 不能少

# 这个会 提交一个 MapReduce 任务

from hive_db
insert into table test_p partition(day="15")
select * 
insert into table test_p partition(day="16")
select *;

创表时通过 location 指定加载数据的位置

创建表

create table lo_db(
            id int,
            name string
        )
        row format delimited
        fields terminated by '\t'
        location '/hive';

上传数据到 /hive 目录下

[root@master ~]# hadoop fs -put st.txt /hive

查看表的数据

hive> select * from lo_db;
OK
4    aa
5    bb
6    
Time taken: 0.119 seconds, Fetched: 3 row(s)

使用 import 导入数据

数据必须是 export 导出的(应为会有元数据)

语法:import table 表名 from 路径;

表可以不存在

路径下使用 export 导出的所有数据

hive> import table stu1 from '/export';
Copying data from hdfs://192.168.176.65:9000/export/data
Copying file: hdfs://192.168.176.65:9000/export/data/student.txt
Loading data to table test.stu1
OK
Time taken: 0.62 seconds

数据导出

使用 insert 导出数据

语法

insert overwrite [local] directory '/root'  --> 导出的路径 去掉 loacl 就是导出到 HDFS
row format delimited fields terminated by '\t' --> 导出的分隔符
select * from hive_db; --> 需要导出的内容

使用

# 执行HQL 跑一个 MR程序
hive> insert overwrite local directory '/root/hive'
    > row format delimited fields terminated by '\t'
    > select * from hive_db;
Query ID = root_20200115161857_48aa5b8a-1bd4-45b9-9642-9b7135bf9009
Total jobs = 1
...
Copying data to local directory /root/hive
Copying data to local directory /root/hive
MapReduce Jobs Launched: 
Stage-Stage-1: Map: 1   Cumulative CPU: 1.91 sec   HDFS Read: 3034 HDFS Write: 21 SUCCESS
Total MapReduce CPU Time Spent: 1 seconds 910 msec
OK
Time taken: 77.28 seconds

# 查看本地文件

[root@master hive]# pwd
/root/hive
[root@master hive]# ll
总用量 4
-rw-r--r--. 1 root root 21 1月  15 16:20 000000_0
[root@master hive]# cat 000000_0 
1    Bob
2    Black
3    Jeck

使用 Hadoop shell 命令下载数据

hive> dfs -get /hive/st.txt /root/hive;

使用 Hive shell 命令导出

格式 bin/hive -e ‘HQL语句或HQL文件’ > 导出的文件名

[root@master src]# hive -e 'select * from test.hive_db' > /root/hive/a.txt

Logging initialized using configuration in jar:file:/usr/local/src/hive/apache-hive-1.2.2-bin/lib/hive-common-1.2.2.jar!/hive-log4j.properties
OK
Time taken: 12.103 seconds, Fetched: 3 row(s)

# 查看导出wenjian
[root@master hive]# cat a.txt 
1    Bob
2    Black
3    Jeck
[root@master hive]# pwd
/root/hive

export 导出数据(不是很常用)

格式: export table 表名 to HDFS路径;

hive> export table hive_db to '/export';
Copying data from file:/usr/local/src/hive/tmpdir/hive/8edfc4e3-3832-43c1-9d4b-d863ef85d0eb/hive_2020-01-15_16-41-17_608_2632318306276412864-1/-local-10000/_metadata
Copying file: file:/usr/local/src/hive/tmpdir/hive/8edfc4e3-3832-43c1-9d4b-d863ef85d0eb/hive_2020-01-15_16-41-17_608_2632318306276412864-1/-local-10000/_metadata
Copying data from hdfs://192.168.176.65:9000/user/hive/warehouse/test.db/hive_db
Copying file: hdfs://192.168.176.65:9000/user/hive/warehouse/test.db/hive_db/student.txt
OK
Time taken: 0.601 seconds

导出的信息结构

export\
   |_ _metadata  元数据文件
   |_data\
        |_导出的数据

清空表数据

只能清空内部表(管理表)数据,不能清空外部表数据

truncate table 表名
hive> truncate table stu1;
OK
发表评论 / Comment

用心评论~