zoukankan      html  css  js  c++  java
  • Hive的内表和外表以及分区表

    1、 内表和外表的区别

    内表和外表之间是通过关键字EXTERNAL来区分。删除表时:

    内表:在删除时,既删除内表的元数据,也删除内表的数据

    外表:删除时,仅仅删除外表的元数据。

    CREATE [EXTERNAL] TABLE page_view(viewTime INT, userid BIGINT,

         page_url STRING, referrer_url STRING,

         ip STRING COMMENT 'IP Address of the User',

         country STRING COMMENT 'country of origination')

       COMMENT 'This is the staging page view table'

       ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '      

      (注意:这里还需要注意一个问题,就是在创建表的时候,最好是预先指定行字段的间隔符,否则导入数据的时候,若字段的间隔符不一致的话可能就导入不进去。)

       STORED AS TEXTFILE

       LOCATION '<hdfs_location>';

    2、 分区表

    分区表是通过关键字PARTITIONED BY来实现分区,一个表有一个或多个分区,分区是以字段的形式在表结构中存在,通过describe table命令可以查看到字段存在, 但是该字段不存放实际的数据内容,仅仅是分区的表示(伪列) 。 

    在HDFS中,分区每个分区的值都会产生相应的文件夹,然后在对应的文件夹下存放相应的表数据。

    分区表的应用场景分析:假如针对全球的一家电子商务公司,现在有这样一个业务需求就是需要了解一下海外市场的情况,目的是进一步想拓展海外市场,但是公司对海外市场的拓展现在还没有任何的了解,那么怎么帮助公司管理层提供数据上的支撑呢?这个时候可以对之前公司针对全球销售的商品通过按“国家”来分区,在查询的时候,以国家为为纬度来进行分析海外的市场情况。

    例如:

    create table table_name (

      id  int,

      dtDontQuery string,

      name string

    )

    partitioned by (date string)

     (1)修改分区

      1)修改分区的存储路径

        ALTER TABLE table_name PARTITION (dt='2008-08-08') SET LOCATION "new location";

         注意格式:dt='2008-08-08' :dt表示分区名,'2008-08-08'表示对应分区值。注意格式。若是字符串的话就是“string”

         "new location"就是对应存储路径,应该是绝对路径

      2)修改分区名称

        ALTER TABLE table_name PARTITION (dt='2008-08-08') RENAME TO PARTITION (dt='20080808');

    (2)删除分区

      ALTER TABLE login DROP IF EXISTS PARTITION (dt='2008-08-08');

      ALTER TABLE page_view DROP IF EXISTS PARTITION (dt='2008-08-08', country='us');

    (3)添加分区

    ALTER TABLE table_name ADD PARTITION (partCol = 'value1') location 'loc1'; //示例

     

    ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (dt='20130101') LOCATION '/user/hadoop/warehouse/table_name/dt=20130101'; //一次添加一个分区
    
    ALTER TABLE page_view ADD PARTITION (dt='2008-08-08', country='us') location '/path/to/us/part080808' PARTITION (dt='2008-08-09', country='us') location '/path/to/us/part080809';  //一次添加多个分区

     

  • 相关阅读:
    Java学习十一天
    Java学习第十天
    Java学习第九天
    Java学习第八天
    Java学习第七天
    Java学习第六天
    Java学习第五天
    Java学习第四天
    Java第三天
    京峰教育-笔记
  • 原文地址:https://www.cnblogs.com/ljy2013/p/4936620.html
Copyright © 2011-2022 走看看