1. 程式人生 > >Hive概述、內部表、外部表、分割槽表的操作

Hive概述、內部表、外部表、分割槽表的操作

Hive概述、內部表、外部表、分割槽表的操作

一、Hive概述
  Hive是基於Hadoop的一個數據倉庫工具。可以將結構化的資料檔案對映為一張資料庫表,並提供完整的sql查詢功能,可以將sql語句轉換為MapReduce任務進行執行。
  Hive是建立在 Hadoop 上的資料倉庫基礎構架。它提供了一系列的工具,可以用來進行資料提取、轉化、載入(ETL Extract-Transform-Load ),這是一種可以儲存、查詢和分析儲存在Hadoop 中的大規模資料的機制。
二、Hive的Hql
  HQL - Hive通過類SQL的語法,來進行分散式的計算。HQL用起來和SQL非常的類似,Hive在執行的過程中會將HQL轉換為MapReduce去執行,所以Hive其實是基於Hadoop的一種分散式計算框架,底層仍然是MapReduce,所以它本質上還是一種離線大資料分析工具。
三、資料庫和資料倉庫的區別


  1.資料庫是面向事務處理的,而資料倉庫是面向資料分析處理的(面向主題設計的)。資料倉庫儲存的資料是有主題的,比如分析客戶的資料,盈利資料等,即都是和決策分析有關的資料。
  2.資料庫儲存的線上資料,而資料倉庫儲存的是離線資料(歷史資料)
  3.資料倉庫的資料來源是異構的,有來自與資料庫的資料,日誌資料,網路資料,空間資料,事務資料等。
  4.資料倉庫是弱事務或沒有事務概念。因為資料倉庫一般都基於歷史資料去分析,而不涉及到更改資料,所以不需要事務。
  5.資料倉庫的資料是時變的,即倉庫裡的資料一般都顯示或隱式的包含時間元素。
四、OLTP系統和OLAP系統
  OLTP:線上聯機事務處理系統=》Mysql,oracle等關係型數庫
  OLAP:線上聯機分析處理系統=》Hive
  OLTP系統面向的使用者和資料庫操作人員。
  OLAP系統面向的是知識工人(資料分析人員和決策人員)
  OLAP系統裡有個概念:資料立方體(Data cube)
  OLAP與OLTP對比:
  在這裡插入圖片描述

五、適用場景
  Hive 構建在基於靜態批處理的Hadoop 之上,Hadoop 通常都有較高的延遲並且在作業提交和排程的時候需要大量的開銷。因此,Hive 並不能夠在大規模資料集上實現低延遲快速的查詢。Hive 並非為聯機事務處理而設計,Hive 並不提供實時的查詢和基於行級的資料更新操作。Hive 的最佳使用場合是大資料集的批處理作業,例如,網路日誌分析。
六、Hive基礎指令
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
六、建立外部表
  建立外部表的命令:create external table stu (id int,name string) row format delimited fields terminated by ’ ’ location ‘/data’
  hive無論是內部表或外部表,當向HDFS對應的目錄節點下追加檔案時(只要格式符合),hive都可以把資料管理進來。
七、內部表和外部表的區別

  通過hive執行:drop table stu 。這是刪除表操作。如果stu是一個內部表,則HDFS對應的目錄節點會被刪除。
  如果stu是一個外部表,HDFS對應的目錄節點不會刪除。
八、Hive分割槽表
  hive也支援分割槽表,對資料進行分割槽可以提高查詢時的效率。
  普通表和分割槽表區別:有大量資料增加的需要建分割槽表
  執行:create table book (id int, name string) partitioned by (category string )row format delimited fields terminated by ’ ';
  注:在建立分割槽表時,partitioned欄位可以不在欄位列表中。生成的表中自動就會具有該欄位。
  category 是自定義的欄位。
  分割槽表載入資料
   load data local inpath ‘./book_china.txt’ overwrite into table book partition (category=‘cn’);
   load data local inpath ‘./book_english.txt’ overwrite into table book partition (category=‘en’);
   經檢查發現分割槽也是一個目錄。
   select * from book; 查詢book目錄下的所有資料
   select * from book where category=‘cn’; 只查詢 cn分割槽的資料
  如果想先在HDFS的目錄下,自己建立一個分割槽目錄,然後在此目錄下上傳檔案,此時手動建立目錄是無法被hive使用的,因為元資料庫中沒有記錄該分割槽。
  如果需要將自己建立的分割槽也能被識別,需要執行:ALTER TABLE book add PARTITION (category = ‘jp’) location ‘/user/hive/warehouse/park.db/book/category=jp’;
  這行命令的作用是在元資料Dock表裡建立對應的元資料資訊
九、分割槽命令
  顯示分割槽 show partitions book;
  新增分割槽 alter table book add partition (category=‘jp’)location
‘/user/hive/warehouse/park.db/book/category=jp’; 或者:
msck repair table book;
  刪除分割槽 alter table book drop partition(category=‘cn’)
  修改分割槽 alter table book partition(category=‘french’) rename to partition (category=‘hh’);