Hive-常用操作(第二天)

Hive-常用操作(第二天)

一、修改表结构

alter table tablename rename to new_tablename;//修改表名

desc tablename;//查看表结构信息
desc formatted tablename;//查看详细结构信息

alter table tablename add columns(column_name1 type,column_name2 type);//添加列

alter table tablename change column column_name new_column_name type;//修改列名和类型

alter table tablename replace columns(column_name type...);//替换修改全部列


truncate tablename;//清除表中所有数据

二、数据导入

  • 1、load方式
load data [local] inpath "/path" overwrite|into table tablename;//overwrite覆盖数据,into追加数据
  • 2、insert方式
insert into|overwrite table tablename2 select XXXX from tablename1;
  • 3、as select方式
create table tablename2 as select XXXX from tablename1;
  • 4、load方式
create table tablename(
XXXX
)location "/path";

hdfs dfs -put XXX /path;
  • 5、import方式
create table tablename2 like tablename1;
export tablename1 to "/path";//导出元数据和数据等
import tablename2 from "/path";

三、数据导出

  • 1、查询结果导出到本地或HDFS上目录
insert overwrite [local] directory "/path" select * from tablename;
  • 2、查询结果进行格式化导出到本地或HDFS上目录
insert overwrite [local] directory "/path" 
row format delimited fields terminated by "分隔符"
select * from tablename;
  • 3、hadoop命令导出到本地目录
hdfs dfs -get /path1 /localpath2
  • 4、hive shell 命令
hive -e "sql语句" > /path/file;//‘>’表示覆盖和‘>>’表示追加

hive -f XXX.sql;//sql文件
  • 5、export方式到HDFS上
export tablename to "/path";

四、分区表

分区表有两种:一种是静态分区,另一种是动态分区

partitioned by (column_name1 type,column_name2 type)//column_name1为一级分区,column_name2为二级分区...

alter table tablename add partition(column_name="XXXX") partition(column_name="XXXX");//增加分区

alter table tablename drop partition(column_name="XXXX"),partition(column_name="XXXX");//删除分区

load data [local] inpath "/path" overwrite|into table tablename partition(column_name="XXXX");//overwrite覆盖数据,into追加数据   加载数据到指定的表分区中

insert into|overwrite table tablename2 partition(column_name="XXXX") select XXXX from tablename1;

show partitions tablename;//查看所有分区信息

静态分区
load数据时,手动指定分区地址。
动态分区

  • 1、先开启动态分区,设置参数
set hive.exec.dynamic.partition =true;//开启动态分区
set hive.exec.dynamic.partition.mode=nonstrict;//非严格模式
  • 2、从普通表加载数据到分区表
insert into table tablename2 partition(column_name) select XXXX,XXXX,column_name from tablename1;

加载数据时,注意字段的顺序,分区字段放在最后,否则数据加载有误

五、分桶表

分桶相对分区进行更细粒度的划分。
将整个数据按照某列属性值取hash值进行划分,具有相同hash值得数据进入同一个文件中。
hash值%分桶数
作用:
取样更高效,提升查询效率,默认是降序排列。

clustered by (column_name1,column_name2...) into  Num buckets;
  • 1、先开启分桶,设置参数
set hive.enforce.bucketing=true;
set mapreduce.job.reduces= Num buckets;
  • 2、从普通表加载数据到分桶表
insert into table tablename2 select column_name,XXXX,XXXX from tablename1;

加载数据时,注意字段顺序,分桶字段放在最前面,否则数据有误

抽样查询:
tablesample(brucket x out of y)
x表示从第几个桶开始读取数据;y表示分桶的倍数,一共从分桶数/y个中读取数据。
select * from tablename tablesample(bucket x of y);

分区表针对的是目录
分桶表针对的是文件

发布了44 篇原创文章 · 获赞 0 · 访问量 1414

猜你喜欢

转载自blog.csdn.net/weixin_44872254/article/details/105450245
今日推荐