DML数据操作

一、数据导入

  • hive到hdfs
    load data local inpath ‘路径/文件’ [overwrite] into table table_name [partition(column=value,…)]
    从本地文件系统(hive所在服务器的本地)导入数据到hive表。hive表存储在hdfs上,所以数据就导入到hive所在的hdfs的存储路径
  • hdfs到hdfs
    load data inpath ‘路径/文件’ [overwrite] into table table_name [partition(column=value,…)]
    从hdfs导入数据到hive表,数据和hive表都存储在hdfs上,所以数据就直接移动(而非复制)到hive表中,移动后源数据就不存在了
  • 直接插入数据
    insert into/overwrite table table_name [partition(column=value,…)] values(value1,value2,…)
  • 查询其他表数据导入hive表
    insert into/overwrite table table_name [partition(column=value,…)] select * from table_name1 [where column=value and …]
    使用overwrite的时候不用加into
  • 通过查询其他表建表
    create table if not exists table_name(column data_type,…) as select * from table_name1
示例
hive本地文件系统导入数据到hdfs的hive表
hive> load data local inpath '/data/st.txt' into table st;
hive> select * from st;
hdfs文件导入到hdfs的hive表
#hdfs有文件
hive> load data inpath '/hive/data/st.txt' into table st;
hive> select * from st;
#hdfs上没有文件,可以先从hive上传文件到hdfs,然后再导入表
hive> dfs -put /data/st.txt /hive/data/;
hive> load data inpath '/hive/data/st.txt' overwrite into table st; #覆盖
hive> select * from st;
建表并制定hdfs上的位置,然后put本地数据入表
hive> create table if not exists st1(id int,name string) row format delimited fields terminated by '\t' location '/hive/data/st1';
hive> dfs -put '/data/st.txt' '/hive/data/st1';
hive> select * from st1;
直接插入数据
hive> insert into table st values(1,'cindy');
hive> select * from st;
查询其他表数据导入hive表
hive> insert into table st partition(month=202001) select id,name from hive_test where month='202001'; #单表查询
hive> select * from st;

hive> insert overwrite table st select id,name from hive_test union select id,name from hive_test1; #多表查询
hive> select * from st;
通过查询其他表建表
hive> create table if not exists st1 as select * from st;
hive> select * from st1;

二、数据导出

insert overwrite [local] directory ‘路径’ row format delimited fields terminated by row_format select * from table_name;

  • 把表的数据导出到指定路径,且指定字段分隔符
  • 导出会自动创建路径,且若路径重复,overwrite会覆盖原有路径
  • local代表导出到本地文件系统,否则导出到hdfs
示例
导出到本地
hive> insert overwrite local directory '/data/st' row format delimited fields terminated by '\t' select * from st;
[root@Hadoop01 /] cd /data
[root@Hadoop01 data] ll
[root@Hadoop01 data] cd st
[root@Hadoop01 st] ll
[root@Hadoop01 st] cat 000000_0
导出到hdfs
hive> insert overwrite directory '/hive/data/st' row format delimited fields terminated by '\t' select * from st;
[root@Hadoop01 /] hadoop fs -cd /hive/data
[root@Hadoop01 data] hadoop fs -ll
[root@Hadoop01 data] hadoop fs -cd st
[root@Hadoop01 st] hadoop fs -ll
[root@Hadoop01 st] hadoop fs -cat 000000_0
hadoop命令get数据到本地

导出库表数据时,先导出到Hadoop,再get到本地,不要直接get库表到本地,否则会乱码

[root@Hadoop01 /] hadoop fs -get /user/hive/warehouse/hive_test/month=202001 /data/test.txt
[root@Hadoop01 /] cat /data/test.txt
用hive交互命令导出数据到本地
[root@Hadoop01 /] hive -e 'select * from test.hive_test' > /data/test.txt
[root@Hadoop01 /] cat /data/test.txt

三、数据查询

查询都是类sql,排序重点了解一下

  • order by:全局排序,排序结果是一个文件,且数据也会排序
  • sort by:每个MapReduce内部排序,按照每个reduce产生的文件里的记录数排序,但数据不会排序
  • distribute by:分区排序,对每个reduce产生的文件里的数据进行排序
  • cluster by:当sort by与distribute by的字段相同时,可以使用cluster by,但只能升序不能降序
示例
MapReduce内部排序
hive> set mapreduce.job.reduces=3; #设置MapReduce任务的个数
hive> show mapreduce.job.reduces; #显示MapReduce任务的个数
hive> select * from st sort by id; #直接查询看不到结果,因为他是三个reduce,会产生三个文件
hive> insert overwrite local directory '/data/st_sortby' select * from st sort by id desc; #将结果导入本地路径,查看文件
[root@Hadoop01 /] cd /data/st_sortby
[root@Hadoop01 /] ll
[root@Hadoop01 /] cat 000000_0
[root@Hadoop01 /] cat 000001_0
[root@Hadoop01 /] cat 000002_0
MapReduce内部排序+分区排序
hive> insert overwrite local directory '/data/st_distributeby' select * from st distribute by id sort by id desc; #按mapreduce内部排序,且按照每个文件内的id降序
[root@Hadoop01 /] cd /data/st_distributeby
[root@Hadoop01 /] ll
[root@Hadoop01 /] cat 000000_0
[root@Hadoop01 /] cat 000001_0
[root@Hadoop01 /] cat 000002_0
cluster by升序
hive> insert overwrite local directory '/data/st_distributeby' select * from st cluster by id; #按mapreduce内部排序,且按照每个文件内的id升序
[root@Hadoop01 /] cd /data/st_distributeby
[root@Hadoop01 /] ll
[root@Hadoop01 /] cat 000000_0
[root@Hadoop01 /] cat 000001_0
[root@Hadoop01 /] cat 000002_0

四、数据删除

全量删除
  • truncate table table_name:清空表
  • drop table tabl_name:删除表
部分删除
  • 清空表中的部分文件
    hadoop fs -rm 文件
  • 将查询结果覆盖添加到表中
    insert overwrite table table_name select column1,column2,… from table_name where …
  • 将查询结果覆盖添加到分区表的对应分区中
    insert overwrite table table_name partition(partition_name=指定分区) select column1,column2,… from table_name where …
  • 删除指定分区
    alter table table_name drop partition(partition_name=指定分区)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值