11.大数据之Hive的基本操作

本文详细介绍了Hive的基础操作,包括内部表和外部表的创建与区别,数据导入导出的方法,以及DDL操作如创建表。外部表在删除时仅删除元数据,数据仍保留在HDFS上,而内部表则会同时删除数据。此外,文章还讲解了Hive的分区、分桶和索引的概念及其作用,强调了它们在提高查询效率和数据管理中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基础操作知识

1.Hive的外部表和内部表

内部表 (管理表) 默认情况下 创建的表 都是内部表 
外部表  (托管表) external  create external 
内部表与外部表就一个本质区别 : 当drop 一个表时  内部表会被删除  同时 hdfs上所对应的目录和数据都会被删除

但是  当drop 一个外部表时  只会将hive中的表删除  hdfs上的数据没有任何变化

外部表的创建:

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

 location '/user/1510b/hive'; 

内部表的创建:

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

 

2、Hive几种数据导入方式

1:从本地文件系统中导入数据到Hive表;

 load data [local] inpath '' [overwrite] into table t_user;

 local : 如果想把本地的数据加载到表中  请加Local      '' 放的就是数据所在的目录

2:从HDFS上导入数据到Hive表;

hadoop fs -put /home/lyl/a.txt /user/lyl/input/b.txt;

3:从别的表中查询出相应的数据并导入到Hive表中;

insert overwrite [local] directory '' select ....  注意 : 该目录不能有子目录 

4: 在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中。

create table test4 as select id, name, tel from wyp;

        5: 使用sqoop从关系数据库导入数据到Hive表

3. Hive几种导出数据方式
   1.拷贝文件
如果数据文件恰好是用户需要的格式,那么只需要拷贝文件或文件夹就可以。
hadoop fs –cp source_path  target_path
 
   2.导出到本地文件系统
--不能使用insert into local directory来导出数据,会报错

--只能使用insert overwrite local directory来导出数据

insert overwrite local directory '/home/sopdm/wrk'
row format delimited
fields terminated by ','

select id,name,tel,age from sopdm.wyp;

--导出数据到多个输出文件夹
from employees se
insert overwrite local directory ‘/tmp/or_employees’
     select * se where se.cty=’US’ and se.st=’OR’
insert overwrite local directory ‘/tmp/ca_employees’
     select * se where se.cty=’US’ and se.st=’CA’
 
   3.导出到HDFS
--hive0.11版本之后,可以指定分隔符
insert overwrite sdirectory '/home/sopdm/wrk'
row format delimited
fields terminated by ','
select id,name,tel,age from sopdm.wyp;
 
    4.导出到hive的另一张表
insert into table sopdm.wyp2
partition(age='25')
select id,name,tel,age from sopdm.wyp;
 
    5.使用hive的-e和-f参数命令导出数据
 --使用hive的-e参数

hive –e “select * from wyp” >> /local/wyp.txt

--使用hive的-f参数, wyp.hql中为hql语句
hive –f wyp.hql >> /local/wyp2.txt
 
     6.导出到关系型数据库

             用sqoop命令

二、操作

2.1 DDL操作
2.1.1创建表
建表语法

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name 

   [(col_name data_type [COMMENT col_comment], ...)] 

   [COMMENT table_comment] 

   [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] 

   [CLUSTERED BY (col_name, col_name, ...) 

   [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] 

   [ROW FORMAT row_format] 

   [STORED AS file_format] 

   [LOCATION hdfs_path]

说明:

1、CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXISTS 选项来忽略这个异常。

2、EXTERNAL关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。

3、LIKE 允许用户复制现有的表结构,但是不复制数据。

4、ROW FORMAT 

DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char] 

        [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char] 

   | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]

用户在建表的时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值