Hive中管理表、外部表、分区表的示例分析

这篇文章主要介绍Hive中管理表、外部表、分区表的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

你所需要的网站建设服务,我们均能行业靠前的水平为你提供.标准是产品质量的保证,主要从事成都网站建设、做网站企业网站建设、成都做手机网站、网页设计、品牌网站制作、网页制作、做网站、建网站。创新互联拥有实力坚强的技术研发团队及素养的视觉设计专才。

    
    
     

*管理表
     --我们目前所创建的表都是管理表,也叫内部表
     --Hive会控制管理表数据的生命周期,Hive默认会将表数据存储在/user/hive/warehouse子目录下
     --删除一个管理表时,Hive也会删除这个表中数据
     --管理表不方便和其他工具共享数据
               eg:我们有一份由Pig或其他工具创建并且主要由这一工具使用的数据,同时我们还想使用Hive执行查询,可以创建一个外部表指向这份数据,并不需要对其具有所有权

*外部表
     --文件位于分布式文件系统的/data/test
               eg:CREATE EXTERNAL TABLE IF NOT EXISTS app (
                    hour string,
                    name string,
                    pv string,
                    uv string) 
                    ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
                    LOCATION '/data/test';

       对以上语句分析:
       1.关键字EXTERNAL告诉Hive这个表是外部表,LOCATION告诉Hive数据位于哪个路径下
       2.因为是外部表,所以Hive并非认为其完全拥有这份数据,删除该表时并不会删除这份数据,只会删除描述表的元数据信息

*管理表VS外部表
     --可以用 DESCRIBE EXTENDED tablename语句的输出中查看到表是否是管理表或外部表
            --对于管理表,可看到如下信息
               ... tableType:MANAGED_TABLE)

            --对于外部表,可看到如下信息
                ... tableType:EXTERNAL_TABLE)

 注:如果语句省略 EXTERNAL 关键字而源表是外部表的话,那么生成的新表也是外部表
        如果语句省略 EXTERNAL 关键字而源表是管理表的话,那么生成的新表也是管理表
        如果语句有EXTERNAL关键字而源表是管理表的话,那么生成的新表是外部表

*分区管理表
     --管理表和外部表都可以加分区
              eg:CREATE TABLE IF NOT EXISTS tmp.table1(
                   userId  string  COMMENT '用户ID',
                   name string COMMENT '用户姓名',
                   createtime string COMMENT '创建时间'
                     )
                    PARTITIONED BY (country string,state string );

      --分区表改变了Hive对数据存储的组织方式。如果我们在tmp库下创建这个表,那么对于这个表只会有一个table1目录与之对应:
                /user/hive/warehouse/tmp/table1
         但是,Hive在表目录下将会建好可以反映分区结构的子目录
                eg:/table1/country=CA/state=AB
                     /table1/country=CA/state=BC
                 ...
                     /table1/country=US/state=AL
                     /table1/country=US/state=AK
                 ...
          这些都是实际的目录名称,州目录下将会包含有零个文件或者多个文件,这些文件中存放着那些州的用户信息
          分区字段一旦创建好,表现得就和普通字段一样,除非优化查询性能,否则不需要关心是否是分区字段
          如果要查某个国家的用户,那仅仅需要扫描那个国家对应的目录就可以

       --查看表中存在的所有分区
                 eg: hive> SHOW PARTITIONS table1;
                       country=CA/state=AB    
                       country=CA/state=BC
                   ...
                       country=US/state=AL
                       country=US/state=AK
                   ...
           查看某个特定分区
                 eg: hive> SHOW PARTITIONS table1 PARTITION(country='US');
                       country=US/state=AL
                       country=US/state=AK
                   ...

*外部分区表
        --创建外部分区表
                eg: CREATE EXTERNAL TABLE IF NOT EXISTS app (
                    hour string,
                    name string,
                    pv string,
                    uv string) 
                    PARTITIONED BY (timetype string,clct_day string ) 
                    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

        --增加指定分区的值
                eg: ALTER TABLE app ADD PARTITION (timetype=hour, clct_day='2018-07-26')
                      LOCATION '/data/test/table1/hour/'2018-07-26' ';

*自定义表的存储格式
        --Hive的默认存储格式是文本文件格式,也可以用STORED AS TEXTFILE 指定,同时在创建表的时候指定各种分隔符
        -- 使用TEXTFILE意味着每一行被认为是一个单独的记录
        --也可以保存为其他Hive支持的文件格式,包括SEQUENCEFILE和RCFILE,这两种文件格式都是使用二进制编码和压缩来优化磁盘空间使用以及I/O带宽性能的
                eg: CREATE TABLE IF NOT EXISTS tmp.table1(
                      userId  string  COMMENT '用户ID',
                      name string COMMENT '用户姓名',
                      createtime string COMMENT '创建时间') 
                      ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
                      STORED AS TEXTFILE;

以上是“Hive中管理表、外部表、分区表的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!


分享标题:Hive中管理表、外部表、分区表的示例分析
文章分享:http://scyanting.com/article/pigcij.html