当前位置:   article > 正文

11.大数据之Hive的基本操作_头歌hive基本查询操作(一)

头歌hive基本查询操作(一)

一、基础操作知识

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, ...)]

用户在建表的时候可以自定义 SerDe 或者使用自带的 SerDe。如果没有指定 ROW FORMAT 或者 ROW FORMAT DELIMITED,将会使用自带的 SerDe。在建表的时候,用户还需要为表指定列,用户在指定表的列的同时也会指定自定义的 SerDe,Hive通过 SerDe 确定表的具体的列的数据。

5、STORED AS 

SEQUENCEFILE|TEXTFILE|RCFILE

如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCEFILE。

6、CLUSTERED BY

对于每一个表(table)或者分区, Hive可以进一步组织成桶,也

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/693669
推荐阅读
相关标签
  

闽ICP备14008679号