⑴ hive表的類型有哪些
Hive 的表有哪些類型呢,我們簡單可以分為四種,受控表、外部表、分區表、桶表,從嚴格意義上說,應該分為兩種受控表,又叫內部表、外部表,分區表和桶表其實是受控表的不同體現。
1、受控表
所謂受控表,我們也經常叫內部表,和外部表對應起來,就是說表的數據的生命周期收表的控制,當表定義被刪除的時候,表中的數據隨之一並被刪除。創建一張表,其對應在hive中就有了表記錄,在metastore表TBLS中就有表定義,當我們一旦從hive中刪除一張表的定義之後,其表中的數據也就不復存在了,在metastore中的定義也就不存在了。
2、外部表
和受控表相對的,怎麼相對呢,你的內部表的數據的生命周期受表定義的影響不是,外部表的不是這樣的,數據的生命周期, 或者說數據存在與否和表的定義互不約束,表中的數據呢,只是表對hdfs上相應文件的一個引用而已,當刪除表定義的時候,表中的數據依然存在。
3、分區表
假設伺服器集群每天都產生一個日誌數據文件,把數據文件統一存儲到HDFS中。我們如果想查詢某一天的數據的話,hive執行的時候會對所有文件都掃描一遍,判斷是否是指定的日期。可以讓日期作為一個子目錄。當hive查詢的時候,根據日期去判斷子目錄。然後掃描符合條件的子目錄中的數據文件。
4、桶表
桶表是對數據進行哈希取值,然後放到不同文件中存儲。分桶是將數據及分解成更容易管理的若幹部分的另一種技術。如果進行表連接操作,那麼就需要對兩張表的數據進行全掃描。非常耗費時間。可以針對連接欄位進行優化。分桶這種情況下呢,對於相似的表中的數據進行比較的話就非常的方便了,只要對比相應的桶中的數據就可了。
⑵ hive中怎麼刪除表中的部分數據
Hive的數據管理:
(1)元數據存儲
Hive 將元數據存儲在 RDBMS 中,有三種模式可以連接到資料庫:
Single User Mode:此模式連接到一個 In-memory 的資料庫 Derby,一般用於 Unit Test。
Multi User Mode:通過網路連接到一個資料庫中,這是最常用的模式。
Remote Server Mode:用於非 Java 客戶端訪問元資料庫,在伺服器端啟動一個 MetaStoreServer,客戶端則利用 Thrift 協議通過 MetaStoreServer來訪問元資料庫。
(2)數據存儲
首先,Hive 沒有專門的數據存儲格式,也沒有為數據建立索引,用戶可以非常自由地組織 Hive 中的表,只需要在創建表的時候告訴 Hive 數據中的列分隔符和行分隔符,它就可以解析數據了。
其次,Hive 中所有的數據都存儲在 HDFS 中,Hive 中包含4種數據模型:Table、External Table、Partition、Bucket。
Hive 中的 Table 和資料庫中的 Table 在概念上是類似的,每一個 Table 在 Hive 中都有一個相應的目錄來存儲數據。例如,一個表 pvs,它在 HDFS 中的路徑為:/wh/pvs,其中,wh 是在 hive-site.xml 中由 ${hive.metastore.warehouse.dir} 指定的數據倉庫的目錄,所有的 Table 數據(不包括 External Table)都保存在這個目錄中。
Partition 對應於資料庫中Partition 列的密集索引,但是 Hive 中 Partition 的組織方式與資料庫中的很不相同。在 Hive 中,表中的一個 Partition 對應於表下的一個目錄,所有的 Partition 數據都存儲在對應的目錄中。例如:pvs 表中包含 ds 和 city 兩個 Partition,則對應於 ds = 20090801, city = US 的 HDFS 子目錄為:/wh/pvs/ds=20090801/city=US;對應於 ds = 20090801, city = CA 的 HDFS 子目錄為:/wh/pvs/ds=20090801/city=CA。
Buckets 對指定列計算 hash,根據 hash 值切分數據,目的是為了便於並行,每一個 Buckets對應一個文件。將 user 列分散至 32 個Bucket上,首先對 user 列的值計算 hash,比如,對應 hash 值為 0 的 HDFS 目錄為:/wh/pvs/ds=20090801/city=US/part-00000;對應hash 值為 20 的 HDFS 目錄為:/wh/pvs/ds=20090801/city=US/part-00020。
External Table 指向已經在 HDFS 中存在的數據,可以創建 Partition。它和 Table 在元數據的組織結構上是相同的,而在實際數據的存儲上則有較大的差異。
在Table 的創建過程和數據載入過程(這兩個過程可以在同一個語句中完成)中,實際數據會被移動到數據倉庫目錄中。之後對數據的訪問將會直接在數據倉庫的目錄中完成。刪除表時,表中的數據和元數據將會被同時刪除。
External Table 只有一個過程,因為載入數據和創建表是同時完成的。實際數據是存儲在 Location 後面指定的 HDFS 路徑中的,它並不會移動到數據倉庫目錄中。
(3)數據交換
數據交換主要分為以下幾個部分
用戶介面:包括客戶端、Web界面和資料庫介面。
元數據存儲:通常是存儲在關系資料庫中的,如MySQL、Derby等。
解釋器、編譯器、優化器、執行器。
Hadoop:用 HDFS進行存儲,利用 MapRece 進行計算。
用戶介面主要有三個:客戶端、資料庫介面和Web界面,其中最常用的是客戶端。Client 是 Hive 的客戶端,當啟動 Client 模式時,用戶會想要連接Hive Server,這時需要指出 Hive Server 所在的節點,並且在該節點啟動 Hive Server。Web界面是通過瀏覽器訪問 Hive的。
Hive 將元數據存儲在資料庫中,如 MySQL、Derby中。Hive 中的元數據包括表的名字、表的列和分區及其屬性、表的屬性(是否為外部表等)、表數據所在的目錄等。
解釋器、編譯器、優化器完成 HQL 查詢語句從詞法分析、語法分析、編譯、優化到查詢計劃的生成。生成的查詢計劃存儲在 HDFS 中,並在隨後由 MapRece調用執行。
Hive 的數據存儲在 HDFS 中,大部分的查詢由 MapRece 完成(包含 * 的查詢不會生成 MapRedcue 任務,比如 select * from tbl)。
以上從Hadoop的分布式文件系統HDFS、分布式資料庫HBase和數據倉庫工具Hive入手介紹了Hadoop的數據管理,它們都通過自己的數據定義、體系結構實現了數據從宏觀到微觀的立體化管理,完成了Hadoop平台上大規模的數據存儲和任務處理
⑶ hive.log可以刪嗎
可以。在hive中刪除只會刪除MySQL元數據hdfs上的原始數據不會刪除內部表外部表轉換。
⑷ 在hive中怎樣刪除一張有數據的管理表,包括刪除數據
Hive的數據管理:
(1)元數據存儲
Hive 將元數據存儲在 RDBMS 中,有三種模式可以連接到資料庫:
Single User Mode:此模式連接到一個 In-memory 的資料庫 Derby,一般用於 Unit Test。
Multi User Mode:通過網路連接到一個資料庫中,這是最常用的模式。
Remote Server Mode:用於非 Java 客戶端訪問元資料庫,在伺服器端啟動一個 MetaStoreServer,客戶端則利用 Thrift 協議通過 MetaStoreServer來訪問元資料庫。
(2)數據存儲
首先,Hive 沒有專門的數據存儲格式,也沒有為數據建立索引,用戶可以非常自由地組織 Hive 中的表,只需要在創建表的時候告訴 Hive 數據中的列分隔符和行分隔符,它就可以解析數據了。
其次,Hive 中所有的數據都存儲在 HDFS 中,Hive 中包含4種數據模型:Table、External Table、Partition、Bucket。
Hive 中的 Table 和資料庫中的 Table 在概念上是類似的,每一個 Table 在 Hive 中都有一個相應的目錄來存儲數據。例如,一個表 pvs,它在 HDFS 中的路徑為:/wh/pvs,其中,wh 是在 hive-site.xml 中由 ${hive.metastore.warehouse.dir} 指定的數據倉庫的目錄,所有的 Table 數據(不包括 External Table)都保存在這個目錄中。
Partition 對應於資料庫中Partition 列的密集索引,但是 Hive 中 Partition 的組織方式與資料庫中的很不相同。在 Hive 中,表中的一個 Partition 對應於表下的一個目錄,所有的 Partition 數據都存儲在對應的目錄中。例如:pvs 表中包含 ds 和 city 兩個 Partition,則對應於 ds = 20090801, city = US 的 HDFS 子目錄為:/wh/pvs/ds=20090801/city=US;對應於 ds = 20090801, city = CA 的 HDFS 子目錄為:/wh/pvs/ds=20090801/city=CA。
Buckets 對指定列計算 hash,根據 hash 值切分數據,目的是為了便於並行,每一個 Buckets對應一個文件。將 user 列分散至 32 個Bucket上,首先對 user 列的值計算 hash,比如,對應 hash 值為 0 的 HDFS 目錄為:/wh/pvs/ds=20090801/city=US/part-00000;對應hash 值為 20 的 HDFS 目錄為:/wh/pvs/ds=20090801/city=US/part-00020。
External Table 指向已經在 HDFS 中存在的數據,可以創建 Partition。它和 Table 在元數據的組織結構上是相同的,而在實際數據的存儲上則有較大的差異。
在Table 的創建過程和數據載入過程(這兩個過程可以在同一個語句中完成)中,實際數據會被移動到數據倉庫目錄中。之後對數據的訪問將會直接在數據倉庫的目錄中完成。刪除表時,表中的數據和元數據將會被同時刪除。
External Table 只有一個過程,因為載入數據和創建表是同時完成的。實際數據是存儲在 Location 後面指定的 HDFS 路徑中的,它並不會移動到數據倉庫目錄中。
(3)數據交換
數據交換主要分為以下幾個部分
⑸ hive中怎樣刪除分區
清除扇區數據,會經磁碟中的清零並用隨機字元重寫,這樣操作後
數據就再沒有辦法恢復
清除扇區數據的時候可以選擇某個分區進行
刪除所有分區
會將所有分區刪除
詳細看軟體的使用教程或是咨詢客服吧
⑹ Hive(五)DML數據操作
語法 :
(1)load data:表示載入數據
(2)local:表示從本地載入數據到hive表;否則從HDFS載入數據到hive表
(3)inpath:表示載入數據的路徑
(4)overwrite:表示覆蓋表中已有數據,否則表示追加
(5)into table:表示載入到哪張表
(6)student:表示具體的表
(7)partition:表示上傳到指定分區
案例 :
2)導入本地數據
3)查看person表數據
2)清空 person表數據; truncate table person;
3)查看person表清空情況(已經沒有數據了)
4)導入 HDFS 數據到 person表中
5)重新查詢 person表,查看數據情況
2) 導入HDFS,無需添加 local
3) row format delimited fields terminated by ' ' ;
語法:insert into <table> <表名> <查詢語句>
案例:
創建一張新表:create table if not exists person2(id int,name string,phone string);
將 person 表中id 為 1和3的數據插入到 person2表中。
查詢person2表數據
方式二:into overwrite
語法:insert overwrite table <表名> <查詢語句>
測試之前重新准備一張表
向 person6 表中添加數據。
數據結果
注意:使用 insert overwrite 後面必須加上 table ,否則報錯
注意
語法 :create table [if not exists] <表名> as <查詢語句>
描述 :根據查詢結果創建表(查詢的結果會添加到新創建的表中)
案例 :
按照person表的結果創建person3表
查詢 person3
注意:使用查詢結果創建數據表時,需要加入 關鍵字
管理表
語法 :create table [if not exists] <表名>(欄位信息) row format delimited fields terminated by <分割符>location <載入數據路徑>
案例 :載入person 表的數據。
查詢 person 數據載入的地址
創建 person4 表並設置 person表的數據路徑。
查詢 person4 表信息;person4中的表數據全部來自於person表。
外部表
創建一個管理表 t1
向管理表t1中添加一條數據
創建t2 並指定t1數據的載入地址
查詢 t2 表
刪除 t1 表
再次查詢 t2 表
驗證 t1 為外部表時,刪除t1表時,是否會刪除數據。
重新創建 t1表
向t1中添加數據3
創建 t2(原來的給刪除了)並指定為外部表,並載入 t1的數據路徑
查詢 t1 表結構(驗證是否為外部表
查詢 t2 數據(有數據2)
刪除t1 表
查詢 t2 表(數據並沒有刪除)
更加深刻理解 管理表和外部表之間的區別。
語法 :import table <全新的表名> from '<Export 導出的地址>'
查詢 person_import 表
查看家目錄,生成了 一個 aaa目錄,目錄中有一個 000000_0 文件
查看 000000_0文件;正好是 person表中的數據。
注意:這里的 overwrite 並不是可選項(可加不可加),這里必須加上overwrite ,否則會報錯。
查看 000000_0文件;使用了製表符,對數據進行格式化。
查看 /aaa/000000_0 文件
查看person_bak 文件
語法 :hive -e "<sql語句>" > <輸出路徑>
案例 :
查看家目錄中的 person_bak
語法 :export table <表名> to '<HDFS地址>'
案例 :將 person 表的數據導出到 HDFS /person2中
查看 /person2 的層次結構
查看 /person2/data/person
⑺ hive中怎麼刪除表中的部分數據
insert
overwrite
table
t_table1
select
*
from
t_table1
where
XXXX;
其中xxx是你需要保留的數據的查詢條件。
如果清空表,如下:
insert
overwrite
table
t_table1
select
*
from
t_table1
where
1=0;
⑻ hive刪除一列了數據還在嗎,查找會有影響嗎
不在,不會影響。hive在刪除表的時候,內部表的元數據和數據會被一起刪除,而hive外部表只刪除元數據,不刪除數據,所以查找不會影響。