apache hive常用命令

本文详细介绍了如何在Hive中创建和删除数据库,创建内部表和外部表,查询表类型,以及进行数据导入和导出的操作。特别讨论了内外部表的区别,如何进行表类型的转化,并详细阐述了分区表和分桶表的创建及使用方法。
摘要由CSDN通过智能技术生成

目录

创建数据库

删除数据库

创建内部表(创建外部表以及一些高级用法在文章后面逐一讲解)

 外部表创建

查询表类型

 内、外部表类型转化

数据导入

数据导出

分区表

分桶表


创建数据库

create database myhive;

    如果需要指定数据库创建在hdfs中的位置,可以使用以下代码

create database myhive location '/myhive';

    这里的/myhive是绝对路径,默认路径应该为hdfs下的/user/hive/warehouse

删除数据库

drop database myhive;

    但是如果被删除数据库不为空,会报错,可以使用以下代码强制删除(删除后对应在hdfs中文件也会删除)

drop database myhive cascade;

创建内部表(创建外部表以及一些高级用法在文章后面逐一讲解)

create table [if not exists] mytable(id int, name string);

    创建表时自定义分隔符

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

    自定义分隔符在查看hdfs文件内容时有区别,展示如下(student1为默认,student2为自定义)

 外部表创建

create external mytable(id int, name string) row format delimited fields terminated by '\t' location 'path';

    这里的path为自定义在hdfs上的目录,此处演示代码是先创建外部表,再移动数据到path里面去

    完成表的创建之后,自己在Linux创建txt文件,然后使用

hadoop fs -put txt文件的路径 path

    然后在查询,就可以看到结果

select * from mytable;

    当然也可以先有数据,存在hdfs中,再在创建表的时候指明path,也可以创建外部表。

    显然,元数据与外部表相互独立,所以当我们删除外部表时,元数据并不会受到影响,这一点与内部表不同(内部表删除表,元数据也会删除)。

查询表类型

desc formatted mytable;

    内部表:

     外部表

 内、外部表类型转化

    内部表转化为外部表

alter table mytable set tblproperties('EXTERNAL'='TRUE');

    外部转内部将TRUE改为FALSE即可,区分大小写

数据导入

load data [local] inpath 'path' [overwrite] into table mytable;

    其中【】包括的内容可有可没有。分为以下情况

      1、如果数据在Linux本地上传,加上【local】

      2、如果数据在hdfs上传,不用加【local】

      3、如果需要覆盖表中原有内容,加上【overwrite】,否则不加

    注意,hdfs导入数据相当于是移动数据到表的存储位置,导入后数据在path中就没有了,需要去表存储的位置找。

数据导出

insert overwrite [local] directory 'path' [row format delimited fields terminated by '\t']
select * from mytable;

    path是导出的文件夹名字,导出文件夹有类似下图的文件,可以cat查看

分区表

create table mytable(id string) partitioned by (分区列 列类型) row format delimited fields terminated by '\t';

      创建语句中(分区列,列类型可以填多个),填一个是单分区表,多个为多分区表,例如(year string, month string),分区列在后续加载数据中必须写全

      创建好之后加载数据

load data inpath 'path' into table mytable partition(year='自定义',month='自定义');

分桶表

      首先需要开启分桶的自动化(自动匹配reduce task数量=分桶数量)

set hive.enforce.bucketing=true;

      分桶表创建语句

create table mytable(id string, name string) clustered by(id) into 3 buckets row format delimited fields terminated by '\t' ;

      分桶表不能使用load data加载数据,因为分桶表需要进行hash取模的计算,load data不能启动mapreduce计算,因此应该使用insert select方法加载数据,该方法需要将数据加载到一个临时表,再通过insert select加载到分桶表。

create table mytable_temp(id string, name string)  row format delimited fields terminated by '\t' ;
load data inpath 'path' into table mytable_temp;
insert overwrite table mytable select * from mytable_temp cluster by(id);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值