hive存儲格式-ag真人国际官网
a. hive 里的時間是什麼數據類型
hive里有兩種時間類型:date類和timestamp類
date類保存形如『2017-05-05 00:00:00.000』這種數據, timestamp保存的是一個10位的整數, 即unix系統下的時間戳記法。可以通過from_unixtime()和unix_timestamp()函數互相轉換。
當然你也可以直接存成string格式。
b. hive的存儲格式parquet和ocfile的區別
你輸入sqoop import 的目錄在哪裡?如果在/usr/sqoop下輸入的命令,那麼在/usr/sqoop下輸入hive登入,然後show tables查看。
你輸入sqoop import 的目錄在哪裡?如果在/usr/sqoop下輸入的命令,那麼在/usr/sqoop下輸入hive登入,然後show tables查看。
hive 0.13以後自帶支持。
c. hive的hive定義
hive是建立在 hadoop 上的數據倉庫基礎構架。它提供了一系列的工具,可以用來進行數據提取轉化載入(etl),這是一種可以存儲、查詢和分析存儲在 hadoop 中的大規模數據的機制。hive 定義了簡單的類 sql 查詢語言,稱為 hql,它允許熟悉 sql 的用戶查詢數據。同時,這個語言也允許熟悉 maprece 開發者的開發自定義的 mapper 和 recer 來處理內建的 mapper 和 recer 無法完成的復雜的分析工作。
hive 沒有專門的數據格式。 hive 可以很好的工作在 thrift 之上,控制分隔符,也允許用戶指定數據格式。
d. 怎麼看spark sql表的存儲格式是text還是parquet
標簽:hive和sparksql計算引擎在text導入parquet格式的hive存儲引擎分片數量機制
表的hive導入:
create
table
xxxxxxx201512
(n多欄位構成)stored
as
parquetfile;
insert
into
xxxxxxx201512
select
*
from
xxxxxxx20151231;
e. 結構體類型 怎麼調用 hive
寫在前邊的話:
同樣是在做豆瓣電影數據分析的小課題的時候遇到的一個問題:hive表中的電影類型存儲格式為array,那麼我如何針對每一個類型做統計呢?
本來是想在基於豆瓣電影數據進行相關的數據分析項目 中進行相關解釋說明的,仔細想了下,剛好拿出來,對hive的三個復雜數據類型做一個總結性的學習
關於hive的一些其他數據類型使用參考:hive的數據類型解析和表的操作實例
1:array
顧名思義就是數組,使用方式 array<>
1):創建表
拿電影數據為例,數據的維度包括
創建movie_message表:
[html] view plain
create table movie_message(
id int,
title string,
yan array
bianju array
leixing array
zhuyan array
year int,
month int,
shichang int,
disnum int,
score float
)
comment "this table about movie's message"
row format delimited fields terminated by ","
collection items terminated by '/';
載入數據(可以從本地載入,也可以從hdfs裝載,當然也可以從別的表中查詢結果進行轉載),這里從本地裝載
[html] view plain
load data local inpath "/home/master/mycode/new_movies_load.csv" into table movie_message;
2):查看array的元素
用下標進行尋找,類似於其他編程語言中的數組訪問
[html] view plain
hive> select leixing[0] from movie_message limit 5;
ok
劇情
劇情
劇情
紀錄片
喜劇
time taken: 1.116 seconds, fetched: 5 row(s)
3):內嵌查詢及統計
這里就是 寫在前邊的話中提到的問題,這里使用explode和lateral view關鍵字,應該這樣寫
[html] view plain
select lx,count(*) from movie_message lateral view explode(leixing) leixing as lx group by lx;
結果為:
[html] view plain
傳記 194
兒童 18
冒險 242
劇情 1490
動作 252
動畫 106
歷史 208
古裝 9
同性 84
喜劇 618
奇幻 178
家庭 130
恐怖 152
懸念 2
懸疑 386
情色 19
驚悚 435
戲曲 11
戰爭 144
歌舞 40
武俠 1
災難 11
愛情 404
犯罪 442
真人秀 6
短片 165
科幻 165
紀錄片 620
脫口秀 10
舞台藝術 8
西部 6
運動 29
音樂 123
鬼怪 1
黑色電影 4
f. hive基礎之hive是什麼以及hive使用場景
hive是什麼
1)hive 是建立在hadoop (hdfs/mr)上的用於管理和查詢結果化/非結構化的數據倉庫;
2)一種可以存儲、查詢和分析存儲在hadoop 中的大規模數據的機制;
3)hive 定義了簡單的類sql 查詢語言,稱為hql,它允許熟悉sql 的用戶查詢數據;
4)允許用java開發自定義的函數udf來處理內置無法完成的復雜的分析工作;
5)hive沒有專門的數據格式(分隔符等可以自己靈活的設定);
etl的流程(extraction-transformate-loading):將關系型資料庫的數據抽取到hdfs上,hive作為數據倉庫,經過hive的計算分析後,將結果再導入到關系型資料庫的過程。
hive是構建在hadoop之上的數據倉庫
1)使用hql作為查詢介面;
2)使用hdfs作為存儲;
3)使用maprece作為計算;
hive應用場景
數據源:
1)文件數據,如中國移動某設備每天產生大量固定格式的文件;
2)資料庫
以上兩種不同的數據源有個共同點:要使用hive,那麼必須要將數據放到hive中;通常採用如下兩種方式:
1)文件數據:load到hive
2)資料庫: sqoop到hive
數據的離線處理;
hive的執行延遲比較高,因為hive常用於數據分析的,對實時性要求不高;
hive優勢在於處理大數據,對於處理小數據沒有優勢,因為hive的執行延遲比較高。
處理數據存放在hive表中,那麼前台系統怎麼去訪問hive的數據呢?
先將hive的處理結果數據轉移到關系型資料庫中才可以,sqoop就是執行導入導出的操作
g. hive分桶表的儲存格式是什麼固定的還是可以隨意指定
對於每一個表或者是分區,hive可以進一步組織成桶,也就是說桶是更為細粒度的數據范圍劃分。hive是針對某一列進行分桶。hive採用對列值哈希,然後除以桶的個數求余的方式決定該條記錄存放在哪個桶中。分桶的好處是可以獲得更高的查詢處理效率。使取樣更高效
hive表數據是在hdfs中儲存的並沒有固定的儲存格式,hive只保存管理表元數據。
桶就是將數據表由一個文件存儲分為多個文件存儲
分桶語法:
create table t_buck(id string,name string)
clustered by (id) into 4 buckets;
指定了根據id分成4個桶,最好的導入數據方式是insert into table.
要開啟模式開關
set hive.enforce.bucketing = true;
set maprece.job.reces=4;
查詢時cluster by指定的欄位就是partition時分區的key
h. hive的數據存儲
首先,hive 沒有專門的數據存儲格式,也沒有為數據建立索引,用戶可以非常自由的組織 hive 中的表,只需要在創建表的時候告訴 hive 數據中的列分隔符和行分隔符,hive 就可以解析數據。
其次,hive 中所有的數據都存儲在 hdfs 中,hive 中包含以下數據模型:表(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, ctry = us 的 hdfs 子目錄為:/wh/pvs/ds=20090801/ctry=us;對應於 ds = 20090801, ctry = ca 的 hdfs 子目錄為;/wh/pvs/ds=20090801/ctry=ca
buckets 對指定列計算 hash,根據 hash 值切分數據,目的是為了並行,每一個 bucket 對應一個文件。將 user 列分散至 32 個 bucket,首先對 user 列的值計算 hash,對應 hash 值為 0 的 hdfs 目錄為:/wh/pvs/ds=20090801/ctry=us/part-00000;hash 值為 20 的 hdfs 目錄為:/wh/pvs/ds=20090801/ctry=us/part-00020
external table 指向已經在 hdfs 中存在的數據,可以創建 partition。它和 table 在元數據的組織上是相同的,而實際數據的存儲則有較大的差異。
table 的創建過程和數據載入過程(這兩個過程可以在同一個語句中完成),在載入數據的過程中,實際數據會被移動到數據倉庫目錄中;之後對數據對訪問將會直接在數據倉庫目錄中完成。刪除表時,表中的數據和元數據將會被同時刪除。 external table 只有一個過程,載入數據和創建表同時完成(create external table ……location),實際數據是存儲在 location 後面指定的 hdfs 路徑中,並不會移動到數據倉庫目錄中。當刪除一個 external table 時,僅刪除元數據,表中的數據不會真正被刪除。
i. 怎樣修改hive存儲格式為snappy格式
你輸入sqoop
import
的目錄在哪裡?如果在/usr/sqoop下輸入的命令,那麼在/usr/sqoop下輸入hive登入,然後show
tables查看。
你輸入sqoop
import
的目錄在哪裡?如果在/usr/sqoop下輸入的命令,那麼在/usr/sqoop下輸入hive登入,然後show
tables查看。
hive
0.13以後自帶支持。