Hive中的内部表、外部表、分区表和分桶表

  发布时间:2026-11-16   作者:玩站小弟   我要评论
歌外推【tg:seogoogle987】。

在Hive数据仓库中,重要点就是Hive中的四个表。Hive 中的表分为内部表、外部表、分区表和分桶表。

内部表

默认创建的表都是所谓的内部表,有时也被称为管理表。因为这种表,Hive 会(或多或少地)控制着数据的生命周期。Hive 默认情况下会将这些表的数据存储在由配置项hive.metastore.warehouse.dir(例如,/user/hive/warehouse)所定义的目录的子目录下。当我们删除一个管理表时,Hive 也会删除这个表中数据。管理表不适合和其他工具共享数据。

具体的内部表创建命令

CREATE TABLE emp(     empno INT,     ename STRING,     job&nbHisp;STRING,     mgr INT,     hiredate TIMESTAMP,     sal DECIMAL(7,2),     comm DECIMAL(7,2),     deptno INT)     ROW FORMAT DELIMITED FIELDS TERMINATED BY " "; -- 分隔符   外部表

外部表称之为EXTERNAL_TABLE;ve其实就是,在创建表时可以自己指定目录位置(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 " "   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 " "   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 " "   LOCATION '/hive/emp_bucket';  「分区表和分桶表的区别:」

Hive 数据表可以根据某些字段进行分区操作,细化数据管理,可以让部分查询更快。同时表和分区也可以进一步被划分为 Buckets,分桶表的原理和 MapReduce 编程中的 HashPartitioner 的原理类似;分区和分桶都是细化数据管理,但是分区表是手动添加区分,由于 Hive 是读模式分区,所以对添加进分区的数据不做模式校验,分桶表中的数据是按照某些分桶字段进行 hash 散列形成的多个文件,所以数据的准确性也高很多。

分桶表的建表有三种方式:直接建表,CREATE TABLE LIKE 和 CREATE TABLE AS SELECT

注:不能直接向桶表中加载数据,需要使用insert语句插入数据,因此只要见到load data 到桶表的,基本是乱来的。分桶表的数据通常只能使用 CTAS(CREATE TABLE AS SELECT) 方式插入,因为 CTAS 操作会触发 MapReduce,因此分桶的时间是比较长的,因为要进行MapReduce操作。

根据上面命令,成功创建了内部表、外部表、分区表和分桶表。

下面依次插入数据到四张表,emp.txt具体内容如下:

7369 SMITH CLERK 7902 1980-12-17 00:00:00 800.00  表和;20 7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600.00 300.00 30 7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250.00 500.00 30 7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975.00  20 7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250.00&nb分桶sp;1400.00 30 7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850.00  30 7782 CLARK MANAGER 7839 1981-06-09 00:00:00 2450.00  10 7788 SCOTT ANALYST 7566 1987-04-19 00:00:00 1500.00  20 7839 KING PRESIDENT  1981-11-17 00:00:00 5000.00 Hi; 10 7844 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500.00 0.00 30 7876 ADAMS CLERK 7788 1987-05-23 00:00:00 1100.00  20 7900 JAMES CLERK 7698 1981-12-03 00:00:00 950.00  30 7902 FORD ANALYST 7566 1981-12-03 00:00:00 3000.00  ve;20 7934 MILLER CLERK 7782 1982-01-23 00:00:00 1300.00  10 

具体的插入数据命令如下所示:

## 内部表 load data local inpath "emp.txt" into table emp; ## 外部表 load data local inpath "emp.txt" into table emp_external; ## 分区表 LOAD DATA LOCAL INPATH "em中的p.txt" OVERWRITE INTO TABLE emp_partition PARTITION (deptno=10); LOAD DATA LOCAL INPATH "emp.txt" OVERWRITE INTO TABLE emp_partition PARTITION (deptno=20); LOAD DATA LOCAL INPATH "emp.txt" OVERWRITE INTO TABLE emp_partition PARTITION (deptno=30); ## 分桶表 -内部- 启用桶表 set hive.enforce.bucketing=true; -- 限制对桶表进行load操作 set hive.strict.checks.bucketing = true; INSERT INTO TABLE emp_bucket SELECT *  FROM emp;  --这里的 emp 表就是一张普通的雇员表 

每次向桶表进行INSERT操作,其实都需要创建中间表。

 

  • Tag:

相关文章

  • 搜索算法,一触即达:GitHub上有个规模最大的开源算法库

    我们知道,算法本质上是一套规则,它接受一个或多个输入,然后执行内部计算和数据操作,返回一个或多个输出。从复杂的数据操作和哈希,到简单运算,算法通过一系列步骤来产出有用的结果。举个例子,算法可以是一个简
    2026-11-16
  • 日本政府对 OpenAI Sora 2 发布版权警告,要求遵守法律规定

    近日,日本内阁府的特命担当大臣城内实在记者会上表示,政府已正式向 OpenAI 提出要求,禁止其通过 Sora2生成可能侵犯版权的内容。此次声明是在 Sora2发布后,针对其能够生成风格近似于日本动画
    2026-11-16
  • 标签: OpenAI 山姆・奥尔特曼 Gemini 3 超级智能

    云梦级11月24日云梦级消息,据科技媒体 The Information 报道,近日,一份 OpenAI 首席执行官山姆・奥尔特曼(Sam Altman)的内部备忘录遭到披露。备忘录中,他承认在谷歌等
    2026-11-16
  • 标签: 福特蒙迪欧 福特智趣烈马 高通820A 黑猫投诉

    云梦级12月4日云梦级消息,据新浪科技《次世代车研所》栏目报道,在黑猫平台,目前已有300多位2022-2025款福特蒙迪欧车主发起集体投诉。不少蒙迪欧老款车主反馈,他们的车机功能存在缺陷,“像个老年
    2026-11-16
  • Cherry Studio 与硅基流动深度合作,免费提供 Qwen38B 模型

    近日,Cherry Studio 宣布与硅基流动(Silicon-Based Flow)展开深度合作,为用户免费提供广受欢迎的 Qwen38B 模型。这一合作进一步丰富了 Cherry Studio
    2026-11-16
  • 怎么样提高新陈代谢

    前言:如何提高新陈代谢?新陈代谢提高的标准就是基础代谢率的提高,基础代谢率是指我们安静状态所消耗的能量。一般怎样提高我们的新陈代谢,可以通过两方面:一个就是饮食;另一个是运动。饮食要注意以下几点:第一
    2026-11-16

最新评论