### 12.1 實驗目的
掌握Hive分區的用法,加深對Hive分區概念的理解,了解Hive表在HDFS的存儲目錄結構。
### 12.2 實驗要求
創建一個Hive分區表;根據數據年份創建year=2014和year=2015兩個分區;將2015年的數據導入到year=2015的分區;在Hive界面用條件year=2015查詢2015年的數據。
### 12.3 實驗原理
分區(Partition) 對應于數據庫中的 分區(Partition) 列的密集索引,但是 Hive 中 分區(Partition) 的組織方式和數據庫中的很不相同。在 Hive 中,表中的一個分區(Partition) 對應于表下的一個目錄,所有的分區(Partition) 的數據都存儲在對應的目錄中。例如:pvs 表中包含 ds 和 ctry 兩個分區(Partition),則對應于 ds = 20090801, ctry = US 的 HDFS 子目錄為:/wh/pvs/ds=20090801/ctry=US;對應于 ds = 20090801, ctry = CA 的 HDFS 子目錄為;/wh/pvs/ds=20090801/ctry=CA。
外部表(External Table) 指向已經在 HDFS 中存在的數據,可以創建分區(Partition)。它和 Table 在元數據的組織上是相同的,而實際數據的存儲則有較大的差異。
Table 的創建過程和數據加載過程(這兩個過程可以在同一個語句中完成),在加載數據的過程中,實際數據會被移動到數據倉庫目錄中;之后對數據的訪問將會直接在數據倉庫目錄中完成。刪除表時,表中的數據和元數據將會被同時刪除。
### 12.4 實驗步驟
因為Hive依賴于MapReduce,所以本實驗之前先要啟動Hadoop集群,然后再啟動Hive進行實驗,主要包括以下三個步驟。
#### 12.4.1 啟動Hadoop集群
在主節點進入Hadoop安裝目錄,啟動Hadoop集群。
~~~
[root@master ~]# cd /usr/cstor/hadoop/sbin
[root@master sbin]# ./start-all.sh
~~~
#### 12.4.2 用命令進入Hive客戶端
進入Hive安裝目錄,用命令進入Hive客戶端。
~~~
[root@master ~]# cd /usr/cstor/hive
[root@master hive]# bin/hive
~~~
#### 12.4.3 通過HQL語句進行實驗
進入客戶端后,查看Hive數據庫,并選擇default數據庫:
~~~
hive> show databases;
OK
default
Time taken: 1.152 seconds, Fetched: 1 row(s)
hive> use default;
OK
Time taken: 0.036 seconds
在命令端創建Hive分區表:
hive> create table parthive (createdate string, value string) partitioned by (year string) row format delimited
fields terminated by '\t';
OK
Time taken: 0.298 seconds
~~~
查看新建的表:
~~~
hive> show tables;
OK
parthive
Time taken: 1.127 seconds, Fetched: 1 row(s)
~~~
給parthive表創建兩個分區:
~~~
hive> alter table parthive add partition(year='2014');
OK
Time taken: 0.195 seconds
hive> alter table parthive add partition(year='2015');
OK
Time taken: 0.121 seconds
~~~
查看parthive的表結構:
~~~
hive> describe parthive;
OK
createdate string
value string
year string
# Partition Information
# col_name data_type comment
year string
Time taken: 0.423 seconds, Fetched: 8 row(s)
~~~
向year=2015分區導入本地數據:
~~~
hive> load data local inpath '/root/data/12/parthive.txt' into table parthive partition(year='2015');
Loading data to table default.parthive partition (year=2015)
Partition default.parthive{year=2015} stats: [numFiles=1, totalSize=110]
OK
Time taken: 1.071 seconds
~~~
根據條件查詢year=2015的數據:
~~~
hive> select * from parthive t where t.year='2015';
~~~
根據條件統計year=2015的數據:
~~~
hive> select count(*) from parthive where year='2015';
~~~
### 12.5 實驗結果
用命令查看HDFS文件,Hive中parthive表在HDFS文件中的存儲目錄結構如下圖12-1所示:

圖12-1 parthive表結構圖
Hive客戶端查詢結果如下圖12-2所示:

圖12-2 客戶端查詢結果圖
Hive客戶端統計結果如下圖12-3所示:

- GitHub---資源收集
- 【GitHub】收錄總榜單
- 【Office & Markdown & PDF】資源收集
- 【前端】資源收集
- 【開源項目】資源收集
- 【代碼備份】資源收集
- 【代碼加密】資源收集
- 【好文章推薦】資源收集
- GitHub---實踐方案
- 【Laradock】實踐方案
- 【開發規范】實踐方案
- 【laravel-snappy】實踐方案
- 【隊列---Laravel-Horizon 】實踐方案
- 【檢索---Elasticsearch】實踐方案---簡單了解
- 【Laravel-admin】實踐方案
- 技術選型
- 技術選型結果
- PHP開發流程
- Laravel自帶異常
- 技術選型問題 & 解決方法
- 修改(Admin)文件夾路徑
- 兩個用戶表合并
- 創建Token,獲取接口數據
- CreateFreshApiToken中間件使用
- Generator從表生成文件,不包括遷移文件
- 添加用戶的同時生產令牌
- 其它參考文章
- Laravel-admin常見問題
- form(),show()獲取對象數據
- Form右上角按鈕重寫
- form回調中的錯誤提醒,回調傳參
- 【小工具類】實踐方案
- 字符串
- 數組
- 無限級分類遞歸
- 時間
- 正則表達式
- 文件
- 經緯度、時區
- DataEdit快捷操作類庫
- 數據庫表結構管理
- 【Guzzle】實踐方案---工具類
- Java---大數據在線實驗
- 基礎實驗操作
- 【一】基礎操作實驗
- HDFS
- 【二】部署HDFS
- 【三】讀寫HDFS文件
- YARN
- 【四】部署YARN集群
- MapReduce
- 【五】單詞計數
- Hive
- 【十】部署Hive
- 【十一】新建Hive表
- 【十二】Hive分區
- ZooKeeper
- 【二十】部署ZooKeeper
- 【二十一】進程協作
- HBase
- 【二十二】部署HBase
- 【二十三】新建HBase表
- Storm
- 【二十四】部署Storm
- 【二十五】實時WordCountTopology
- Kafka
- 【二十七】Kafka訂閱推送示例
- Redis
- 【二十九】Redis部署與簡單使用
- 【三十】MapReduce與Spark讀寫Redis
- MongoDB
- 【三十一】讀寫MongoDB
- MySQL
- 關于最重要的參數選項調整建議
- 索引,Explain優化工具
- 事務級別
- sql好的書寫習慣
- limit(分頁)
- 趕集網Mysql36條軍規
- 分庫分表技術演進&最佳實踐
- MariaDB 和 MySQL 全面對比
- 永遠不要在 MySQL 中使用“utf8”
- 看云--推薦的Mysql優化
- 完整、詳細的MySQL規范
- 慢查詢日志
- pt-query-digest結果分析
- Redis
- 看云-推薦的redis學習
- Memcache和Redis不同
- 阿里云Redis開發規范
- Centos7
- 虛擬機配置網絡
- 硬盤掛載、分區、文件大小
- 防火墻(firewalld、firewalld-cmd、systemctl、iptables)
- 兩個機器互相拷貝文件
- 查進程、查端口
- 壓縮、解壓
- 查看物理CPU個數、CPU內核數、線程數
- apt-get源--阿里
- RAID磁盤陣列
- Docker
- Dockerfile制作常用命令
- registry私有倉庫
- PHP_7.2
- Dockerfile
- php.ini
- 使用說明
- Nginx_1.15
- Dockerfile
- nginx.conf
- prod_nginx.conf
- 使用說明
- MySql_5.7
- Dockerfile
- my.cnf
- 使用說明
- redmine_3.4
- Dockerfile
- 使用說明
- gitlab-ce_11.9.6-ce.0
- 使用說明
- Redis_5.0
- Dockerfile
- redis.conf
- 使用說明
- Jenkins
- Dockerfile
- 使用說明
- webssh--python3.7
- Dockerfile
- 使用說明
- 進階使用
- 高階使用
- minio
- 使用說明
- aws_cloud9_ide
- 使用說明
- VNC
- 使用說明
- jdk1.8——yum安裝
- tomcat9——安裝
- guacamole——0.9.13
- libreoffice
- Dockerfile
- 使用說明
- Kubernetes
- kubectl常用命令
- 環境搭建(1.9.6)
- kubernetes1.9.6墻內離線部署
- kubernetes1.9.6單機器部署
- helm安裝
- helm常用命令
- Swoole
- 環境的搭建
- swoole的簡單實例
- 服務端的cli方式運行
- 客戶端的運行方式
- 定時任務的入門
- 刪除定時任務
- 初始化定時任務
- 日志管理
- 具體任務的異常捕獲
- 手動重啟shell腳本
- 閱讀感受
- 【讀書】登天的感覺——岳曉東
- 【讀書】為何家會傷人——武志紅
- 【感受】箭扣,一次就好
- 【讀書】思考與致富——拿破侖-希爾
- 【感受】做事講方法
- 【感受】未來暢想
- 【素材】智力問答
- 【百家】曾國藩家訓
- 【百家】正說和珅
- 【感受】談判小技巧
- 【讀書】股票作手回憶錄——利弗莫爾
- 【感受】最幸福的人——工匠
- 【收藏】土味情話大合集
- 【讀書】解憂雜貨店——東野圭吾
- 【收藏】家鄉名人
- 【讀書】把時間當作朋友——李笑來
- 【感受】輿論和八卦
- 【讀書】老人與海——海明威
- 【讀書】必然——凱文凱利
- 【經典】逍遙游——莊周
- Git+PHPStorm+Composer
- Git命令
- .gitignore忽略規則
- PHPStorm第一次使用
- PHPStorm關聯gitlab
- Composer修改鏡像源
- Xdebug
- PHP進階
- 緩存在高并發場景下的常見問題
- 一、緩存一致性問題
- 二、緩存并發問題
- 三、緩存穿透問題
- 四、緩存顛簸問題
- 五、緩存的雪崩現象
- 六、緩存無底洞現象
- Laravel源碼解析(知識點)
- 閉包、IOC容器服務綁定延遲加載
- 延遲靜態綁定基類
- 反射,依賴注入
- __callStatic 魔術方法,Facade 工作原理
- array_reduce,中間件解析
- Eloquent核心
- Laravel框架加載流程
- 線程、進程、協程
- Linux進程、線程、協程
- poll、epoll
- epoll原理
- Liunx線程調度算法
- 紅黑樹
- 同步/異步、阻塞/非阻塞
- PHP-FPM
- Nginx
- Swoole
- Go
- 驚群問題
- 線程模型比較
- 并發模型比較
- Lua
- OpenResty
- 數據一致性
- 悲觀鎖--VS--樂觀鎖
- 事務--mysql VS redis
- 事務嵌套--Doctrine VS Laravel
- 單體應用中執行順序問題
- 數據一致性問題描述
- 分布式理論
- 數據一致性---接口冪等性
- 分布式事務---2PC VS 3PC
- 分布式事務---TCC
- 分布式事務---基于消息
- 接口安全性
- PHP & Nginx
- 請求超時問題
- 兩者之間的通信原理
- TCP三次握手
- Nginx常用優化
- PHP數組底層原理
- PHP排序函數sort底層原理
- PHP函數---trim()
- 樹形數據在關系型庫中存儲
- 標簽(Tag)的各種設計