加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Hive中的四个表

发布时间:2021-06-03 16:20:46 所属栏目:大数据 来源:互联网
导读:在Hive数据仓库中,重要点就是Hive中的四个表。Hive 中的表分为内部表、外部表、分区表和分桶表。 内部表 默认创建的表都是所谓的内部表,有时也被称为管理表。因为这种表,Hive 会(或多或少地)控制着数据的生命周期。Hive 默认情况下会将这些表的数据存储在
在Hive数据仓库中,重要点就是Hive中的四个表。Hive 中的表分为内部表、外部表、分区表和分桶表。
内部表
默认创建的表都是所谓的内部表,有时也被称为管理表。因为这种表,Hive 会(或多或少地)控制着数据的生命周期。Hive 默认情况下会将这些表的数据存储在由配置项hive.metastore.warehouse.dir(例如,/user/hive/warehouse)所定义的目录的子目录下。当我们删除一个管理表时,Hive 也会删除这个表中数据。管理表不适合和其他工具共享数据。
具体的内部表创建命令
CREATE TABLE emp( 
    empno INT, 
    ename STRING, 
    job STRING, 
    mgr INT, 
    hiredate TIMESTAMP, 
    sal DECIMAL(7,2), 
    comm DECIMAL(7,2), 
    deptno INT) 
    ROW FORMAT DELIMITED FIELDS TERMINATED BY "t"; -- 分隔符t 
外部表
外部表称之为EXTERNAL_TABLE;其实就是,在创建表时可以自己指定目录位置(LOCATION);如果删除外部表时,只会删除元数据不会删除表数据;
具体的外部表创建命令,比内部表多一个LOCATION而已。
CREATE EXTERNAL TABLE emp_external( 
  empno INT, 
  ename STRING, 
  job STRING, 
  mgr INT, 
  hiredate TIMESTAMP, 
  sal DECIMAL(7,2), 
  comm DECIMAL(7,2), 
  deptno INT) 
  ROW FORMAT DELIMITED FIELDS TERMINATED BY "t" 
  LOCATION '/hive/emp_external'; 
「内部表和外部表的区别:」
创建内部表时:会将数据移动到数据仓库指向的路径;
创建外部表时:仅记录数据所在路径,不对数据的位置做出改变;
删除内部表时:删除表元数据和数据;
删除外部表时,删除元数据,不删除数据。
分区表
分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。Hive 中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过 WHERE 子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多。
具体的分区表创建命令如下,比外部表多一个PARTITIONED。PARTITIONED英文意思就是分区的,需要指定表中的其中一个字段,这个就是根据该字段的不同,划分不同的文件夹。
CREATE EXTERNAL TABLE emp_partition( 
  empno INT, 
  ename STRING, 
  job STRING, 
  mgr INT, 
  hiredate TIMESTAMP, 
  sal DECIMAL(7,2), 
  comm DECIMAL(7,2) 
  ) 
  PARTITIONED BY (deptno INT)   -- 按照部门编号进行分区 
  ROW FORMAT DELIMITED FIELDS TERMINATED BY "t" 
  LOCATION '/hive/emp_partition'; 
分桶表
分区在HDFS上的表现形式是一个目录,分桶则是一个单独的文件。分桶则是指定分桶表的某一列,让该列数据按照哈希取模的方式随机、均匀地分发到各个桶文件中。
具体的分桶表创建命令如下,比分区表的不同在于CLUSTERED。CLUSTERED英文意思就是群集的。分桶操作和分区一样,需要根据某一列具体数据来进行哈希取模操作,故指定的分桶列必须基于表中的某一列(字段)
CREATE EXTERNAL TABLE emp_bucket( 
  empno INT, 
  ename STRING, 
  job STRING, 
  mgr INT, 
  hiredate TIMESTAMP, 
  sal DECIMAL(7,2), 
  comm DECIMAL(7,2), 
  deptno INT) 
  CLUSTERED BY(empno) SORTED BY(empno ASC) INTO 4 BUCKETS  --按照员工编号散列到四个 bucket 中 
  ROW FORMAT DELIMITED FIELDS TERMINATED BY "t" 
  LOCATION '/hive/emp_bucket'; 

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读