orc的全稱是(optimized row columnar),orc檔案格式是一種hadoop生態圈中的列式儲存格式,它的產生早在2023年初,最初產生自apache hive,用於降低hadoop資料儲存空間和加速hive查詢速度。和parquet類似,它並不是乙個單純的列式儲存格式,仍然是首先根據行組分割整個表,在每乙個行組內進行按列儲存。orc檔案是自描述的,它的元資料使用protocol buffers序列化,並且檔案中的資料盡可能的壓縮以降低儲存空間的消耗,目前也被spark sql、presto等查詢引擎支援,但是impala對於orc目前沒有支援。
只有textfile錶能直接載入資料,如果必須本地load資料和external外部表直接加載運路徑資料都只能用textfile表,其他格式不行,可以通過textfile表載入後insert到其他表中。orc表不能直接載入資料,資料要先匯入到textfile表,再從textfile表通過insert select from 匯入到orc表。orc表的原始檔不能直接檢視,在hive中用select看。
我們使用sqoop進行資料抽取,使用hcatalog方式可以直接將資料抽取到hive的orc表中,解決無法將外部資料load到hive資料表的問題,但是hcatalog不允許資料覆蓋,每次都只是追加,所以在進行資料全量抽取是要提前清空資料表資料(truncate table table_name)。
sqoop一般方式比較隨意,不要求源表和目標表字段相同(欄位名稱和個數都可以不相同),它抽取的方式是將字段按順序插入,比如目標表有3個字段,源表有乙個字段,它會將資料插入到hive表的第乙個字段,其餘欄位為null。但是hcatalog不同,源表和目標表欄位名需要相同,字段個數可以不相等,如果欄位名不同,抽取資料的時候會報nullpointerexception錯誤。hcatalog抽取資料時,會將字段對應到相同欄位名的字段上,哪怕字段個數不相等。但是可以使用query(–query 「select order_no_src as order_no_target from driver_action where $conditions」)的方式解決欄位名不同問題。
hive建表語句如下:
create table if not exists ods_wsp_dw_dim_time
( id int comment 'id'
) comment '時間維度表'
//全量抽取
sqoop import --connect jdbc:mysql://ip:3306/wsp --username root --password 123456 --table dw_dim_time --hcatalog-database dw_pj --hcatalog-table ods_wsp_dw_dim_time -m 4
//增量抽取
sqoop import --connect jdbc:mysql:/ip:3306/wsp?autoreconnect=true --username root --password 123456 --query "select * from dw_fact_point where create_time >= '$' and create_time < '$' and \$conditions" --hcatalog-database dw_pj --hcatalog-table ods_wsp_dw_fact_point --hcatalog-partition-keys pt_day --hcatalog-partition-values "'$'" --split-by id -m 10
hive資料格式
1 textfile 行式儲存 資料不進行壓縮 網路開銷比較大 2 sequencefile 二進位制檔案 二進位制檔案,它將資料 key,value 的形式序列化到檔案裡 3 orc file 1.orc是列式儲存,有多種檔案壓縮方式,並且有著很高的壓縮比。2.檔案是可切分 split 的。因此,...
Hive常見資料格式及儲存(二)
在rdbms資料庫中我們儲存資料都是按照一行一行來存,也是按照一行一行來讀,這種按照行來儲存以及來讀取資料的儲存方式,我們稱作為 行式儲存 這種儲存方式在hdfs中存的方式和rdbms一樣,都是將多行資料放在同乙個block中的,如圖 如上圖所示,行式儲存的結構 假設檔案中有abcd 4列,5行資料...
20 大資料 hive資料格式
hive支援原子和複雜資料型別。原子資料型別包括數值型 布林型 字串型別和時間戳型別。複雜資料型別包括陣列 對映和結構 hive會為每個建立的資料庫在hdfs上建立乙個目錄,該資料庫的表會以子目錄形式儲存,表中的資料會以表目錄下的檔案形式儲存。對於default資料庫,預設的預設資料庫沒有自己的目錄...