偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Hive中的內(nèi)部表、外部表、分區(qū)表和分桶表

大數(shù)據(jù)
在Hive數(shù)據(jù)倉(cāng)庫(kù)中,重要點(diǎn)就是Hive中的四個(gè)表。Hive 中的表分為內(nèi)部表、外部表、分區(qū)表和分桶表。Hive 也會(huì)刪除這個(gè)表中數(shù)據(jù)。管理表不適合和其他工具共享數(shù)據(jù)。

[[393935]]

在Hive數(shù)據(jù)倉(cāng)庫(kù)中,重要點(diǎn)就是Hive中的四個(gè)表。Hive 中的表分為內(nèi)部表、外部表、分區(qū)表和分桶表。

內(nèi)部表

默認(rèn)創(chuàng)建的表都是所謂的內(nèi)部表,有時(shí)也被稱為管理表。因?yàn)檫@種表,Hive 會(huì)(或多或少地)控制著數(shù)據(jù)的生命周期。Hive 默認(rèn)情況下會(huì)將這些表的數(shù)據(jù)存儲(chǔ)在由配置項(xiàng)hive.metastore.warehouse.dir(例如,/user/hive/warehouse)所定義的目錄的子目錄下。當(dāng)我們刪除一個(gè)管理表時(shí),Hive 也會(huì)刪除這個(gè)表中數(shù)據(jù)。管理表不適合和其他工具共享數(shù)據(jù)。

具體的內(nèi)部表創(chuàng)建命令

  1. CREATE TABLE emp( 
  2.     empno INT
  3.     ename STRING, 
  4.     job STRING, 
  5.     mgr INT
  6.     hiredate TIMESTAMP
  7.     sal DECIMAL(7,2), 
  8.     comm DECIMAL(7,2), 
  9.     deptno INT
  10.     ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"-- 分隔符\t 

外部表

外部表稱之為EXTERNAL_TABLE;其實(shí)就是,在創(chuàng)建表時(shí)可以自己指定目錄位置(LOCATION);如果刪除外部表時(shí),只會(huì)刪除元數(shù)據(jù)不會(huì)刪除表數(shù)據(jù);

具體的外部表創(chuàng)建命令,比內(nèi)部表多一個(gè)LOCATION而已。

  1. CREATE EXTERNAL TABLE emp_external( 
  2.   empno INT
  3.   ename STRING, 
  4.   job STRING, 
  5.   mgr INT
  6.   hiredate TIMESTAMP
  7.   sal DECIMAL(7,2), 
  8.   comm DECIMAL(7,2), 
  9.   deptno INT
  10.   ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t" 
  11.   LOCATION '/hive/emp_external'

「內(nèi)部表和外部表的區(qū)別:」

  • 創(chuàng)建內(nèi)部表時(shí):會(huì)將數(shù)據(jù)移動(dòng)到數(shù)據(jù)倉(cāng)庫(kù)指向的路徑;
  • 創(chuàng)建外部表時(shí):僅記錄數(shù)據(jù)所在路徑,不對(duì)數(shù)據(jù)的位置做出改變;
  • 刪除內(nèi)部表時(shí):刪除表元數(shù)據(jù)和數(shù)據(jù);
  • 刪除外部表時(shí),刪除元數(shù)據(jù),不刪除數(shù)據(jù)。

分區(qū)表

分區(qū)表實(shí)際上就是對(duì)應(yīng)一個(gè) HDFS 文件系統(tǒng)上的獨(dú)立的文件夾,該文件夾下是該分區(qū)所有的數(shù)據(jù)文件。Hive 中的分區(qū)就是分目錄,把一個(gè)大的數(shù)據(jù)集根據(jù)業(yè)務(wù)需要分割成小的數(shù)據(jù)集。在查詢時(shí)通過(guò) WHERE 子句中的表達(dá)式選擇查詢所需要的指定的分區(qū),這樣的查詢效率會(huì)提高很多。

具體的分區(qū)表創(chuàng)建命令如下,比外部表多一個(gè)PARTITIONED。PARTITIONED英文意思就是分區(qū)的,需要指定表中的其中一個(gè)字段,這個(gè)就是根據(jù)該字段的不同,劃分不同的文件夾。

  1. CREATE EXTERNAL TABLE emp_partition( 
  2.   empno INT
  3.   ename STRING, 
  4.   job STRING, 
  5.   mgr INT
  6.   hiredate TIMESTAMP
  7.   sal DECIMAL(7,2), 
  8.   comm DECIMAL(7,2) 
  9.   ) 
  10.   PARTITIONED BY (deptno INT)   -- 按照部門編號(hào)進(jìn)行分區(qū) 
  11.   ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t" 
  12.   LOCATION '/hive/emp_partition'

分桶表

分區(qū)在HDFS上的表現(xiàn)形式是一個(gè)目錄,分桶則是一個(gè)單獨(dú)的文件。分桶則是指定分桶表的某一列,讓該列數(shù)據(jù)按照哈希取模的方式隨機(jī)、均勻地分發(fā)到各個(gè)桶文件中。

具體的分桶表創(chuàng)建命令如下,比分區(qū)表的不同在于CLUSTERED。CLUSTERED英文意思就是群集的。分桶操作和分區(qū)一樣,需要根據(jù)某一列具體數(shù)據(jù)來(lái)進(jìn)行哈希取模操作,故指定的分桶列必須基于表中的某一列(字段)

  1. CREATE EXTERNAL TABLE emp_bucket( 
  2.   empno INT
  3.   ename STRING, 
  4.   job STRING, 
  5.   mgr INT
  6.   hiredate TIMESTAMP
  7.   sal DECIMAL(7,2), 
  8.   comm DECIMAL(7,2), 
  9.   deptno INT
  10.   CLUSTERED BY(empno) SORTED BY(empno ASCINTO 4 BUCKETS  --按照員工編號(hào)散列到四個(gè) bucket 中 
  11.   ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t" 
  12.   LOCATION '/hive/emp_bucket'

「分區(qū)表和分桶表的區(qū)別:」

Hive 數(shù)據(jù)表可以根據(jù)某些字段進(jìn)行分區(qū)操作,細(xì)化數(shù)據(jù)管理,可以讓部分查詢更快。同時(shí)表和分區(qū)也可以進(jìn)一步被劃分為 Buckets,分桶表的原理和 MapReduce 編程中的 HashPartitioner 的原理類似;分區(qū)和分桶都是細(xì)化數(shù)據(jù)管理,但是分區(qū)表是手動(dòng)添加區(qū)分,由于 Hive 是讀模式,所以對(duì)添加進(jìn)分區(qū)的數(shù)據(jù)不做模式校驗(yàn),分桶表中的數(shù)據(jù)是按照某些分桶字段進(jìn)行 hash 散列形成的多個(gè)文件,所以數(shù)據(jù)的準(zhǔn)確性也高很多。

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

  • 注:不能直接向桶表中加載數(shù)據(jù),需要使用insert語(yǔ)句插入數(shù)據(jù),因此只要見(jiàn)到load data 到桶表的,基本是亂來(lái)的。分桶表的數(shù)據(jù)通常只能使用 CTAS(CREATE TABLE AS SELECT) 方式插入,因?yàn)?CTAS 操作會(huì)觸發(fā) MapReduce,因此分桶的時(shí)間是比較長(zhǎng)的,因?yàn)橐M(jìn)行MapReduce操作。

根據(jù)上面命令,成功創(chuàng)建了內(nèi)部表、外部表、分區(qū)表和分桶表。


下面依次插入數(shù)據(jù)到四張表,emp.txt具體內(nèi)容如下:

  1. 7369 SMITH CLERK 7902 1980-12-17 00:00:00 800.00  20 
  2. 7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600.00 300.00 30 
  3. 7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250.00 500.00 30 
  4. 7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975.00  20 
  5. 7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250.00 1400.00 30 
  6. 7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850.00  30 
  7. 7782 CLARK MANAGER 7839 1981-06-09 00:00:00 2450.00  10 
  8. 7788 SCOTT ANALYST 7566 1987-04-19 00:00:00 1500.00  20 
  9. 7839 KING PRESIDENT  1981-11-17 00:00:00 5000.00  10 
  10. 7844 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500.00 0.00 30 
  11. 7876 ADAMS CLERK 7788 1987-05-23 00:00:00 1100.00  20 
  12. 7900 JAMES CLERK 7698 1981-12-03 00:00:00 950.00  30 
  13. 7902 FORD ANALYST 7566 1981-12-03 00:00:00 3000.00  20 
  14. 7934 MILLER CLERK 7782 1982-01-23 00:00:00 1300.00  10 

具體的插入數(shù)據(jù)命令如下所示:

  1. ## 內(nèi)部表 
  2. load data local inpath "emp.txt" into table emp; 
  3. ## 外部表 
  4. load data local inpath "emp.txt" into table emp_external; 
  5. ## 分區(qū)表 
  6. LOAD DATA LOCAL INPATH "emp.txt" OVERWRITE INTO TABLE emp_partition PARTITION (deptno=10); 
  7. LOAD DATA LOCAL INPATH "emp.txt" OVERWRITE INTO TABLE emp_partition PARTITION (deptno=20); 
  8. LOAD DATA LOCAL INPATH "emp.txt" OVERWRITE INTO TABLE emp_partition PARTITION (deptno=30); 
  9. ## 分桶表 
  10. -- 啟用桶表 
  11. set hive.enforce.bucketing=true
  12. -- 限制對(duì)桶表進(jìn)行l(wèi)oad操作 
  13. set hive.strict.checks.bucketing = true
  14. INSERT INTO TABLE emp_bucket SELECT *  FROM emp;  --這里的 emp 表就是一張普通的雇員表 

每次向桶表進(jìn)行INSERT操作,其實(shí)都需要?jiǎng)?chuàng)建中間表。

 

責(zé)任編輯:姜華 來(lái)源: Python之王
相關(guān)推薦

2023-10-11 13:42:21

2017-08-30 16:59:54

PostgreSQL分區(qū)表

2009-06-24 10:26:41

Oracle約束分區(qū)表

2021-01-20 08:07:52

oracle分區(qū)單表

2010-11-22 15:06:46

MySQL分區(qū)表

2010-10-11 10:16:17

Mysql分區(qū)表

2022-01-11 08:46:56

Oracle 在線重定義數(shù)據(jù)庫(kù)

2010-10-11 09:50:32

Mysql分區(qū)表

2009-08-17 08:35:22

Linux掛載分區(qū)表fstab

2021-09-07 17:54:04

OpenGauss分區(qū)表索引

2011-03-29 13:22:07

SQL Server臨時(shí)表表變量

2023-05-03 22:09:02

Hive分區(qū)工具,

2009-06-25 10:25:39

SQL Server

2011-07-20 16:03:06

SQL Server數(shù)分區(qū)表

2011-03-22 14:57:52

Oracle數(shù)據(jù)庫(kù)普通表分區(qū)表

2011-08-23 10:37:15

Oracle分區(qū)表本地索引

2010-11-10 14:47:11

SQL Server創(chuàng)

2010-04-19 14:01:22

Oracle查看分區(qū)表

2010-09-16 14:13:11

SQL Server系

2021-03-08 22:22:20

MySQL分區(qū)表SQL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)