認識Hive-資料的匯入匯出
阿新 • • 發佈:2019-01-12
什麼是Hive
- 把SQL語句轉換成map-reduce任務,並完成資料封裝【直譯器、編譯器、優化器】Hive是大資料生態系統中的資料倉庫。
Hive架構
- Hive就是大資料中的資料倉庫,擅長處理格式良好的結構化資料。對非結構化並不適合;
- Hive能夠把結構良好的資料檔案對映成一張關係資料庫的表,並提供類似SQL(HQL)的查詢功能;
- Hive會把SQL語句轉換成MapReduce任務執行;
- 提供ETL的工具;
- Hive執行時,元資料儲存在關係型資料庫中。
優缺點
- 成本低,入手快
- 不需要學習MapReduce開發
- 不支援實時查詢
Hive vs RDBMS
比較項 | SQL | HiveQL |
---|---|---|
ANSI SQL | 支援 | 不完全支援 |
更新 | UPDATE\INSTERT\DELETE | insert OVERWRITE\INTO TABLE |
事物 | 支援 | 不支援 |
模式 | 寫模式 | 讀模式 |
資料儲存 | 塊裝置,本地檔案系統 | HDFS |
延時 | 低 | 高 |
多表插入 | 不支援 | 支援 |
子查詢 | 完全支援 | 只能用在Form子句中 |
檢視 | Updatable | Read-only |
可擴充套件性 | 低 | 高 |
資料規模 | 小 | 大 |
…… | …… | …… |
資料型別
- 原子資料型別(常規資料型別)
- 複雜資料型別
- ARRAY
- MAP
- STRUCT
表
- 託管表(managed table)(內部表)
- 外部表
簡單示例
- 登入Hive
su hdfs
hive
- 檢視資料庫
show databases;
- 建立資料庫
create database if not exists databasename;
資料匯入
- root使用者在/home/hdfs/tgm/目錄下建立user.txt檔案
cat user.txt
1,abc,25,13188888888888
2,test,30,13888888888888
3,adsfsadf,34,899314121
- 在hive中建立資料表
create table tgm_test
(id int,
name string,
age string,
tel string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
- 從本地檔案載入
load data local inpath '/home/hdfs/tgm/user.txt' into table tgm_test;
- 從HDFS中檔案載入
load data inpath 'user.txt' into table tgm_test;
- 從Hive中另一個表中載入
create table tgm_test2
(id int,
name string,
tel string)
partitioned by (age int)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;
insert into table tgm_test2
partition (age='25')
select id, name, tel
from tgm_test;
資料匯出
- 匯出到本地
insert overwrite local directory '/tmp/test'
select * from tgm_test;
- 匯出到HDFS
insert overwrite directory '/tmp/test'
select * from tgm_test;
- 匯出時指定分隔符
insert overwrite local directory '/tmp/test'
row format delimited
fields terminated by ','
select * from tgm_test;