Hive 使用 SQL-Like 查詢語言(Hive SQL),其語法與一般的 SQL 語法非常相似,唯一要注意的是,之前有提過 HDFS 只支援寫入、讀取與刪除資料,並不能針對現存資料進行局部更新,這點移到 Hive 上也一樣,畢竟說到底我們還是透過 Hive 在與 HDFS 進行互動。
今天會示範 Hive 的基本操作、包括創建資料庫與表格、插入資料、與刪除資料等,另外會示範以 Python API 來使用 Hive。
查看現有資料庫/資料表 (SHOW)
SHOW DATABASES;
SHOW TABLES;
創建資料庫 (CREATE DATABASE)
-- syntax: CREATE DATABASE <db_name>;
CREATE DATABASE test;
使用/切換資料庫 (USE)
-- syntax: USE <db_name>;
USE test;
創建資料表 (CREATE TABLE)
syntax ([...]
表示 options,可寫可不寫。)
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.] <table_name>
(col_name data_type [COMMENT col_comment], ...)
[COMMENT table_comment]
[ROW FORMAT row_format]
[STORED AS file_format]
example
CREATE TABLE IF NOT EXISTS employee (
eid int,
name String,
salary String,
destination String)
COMMENT 'Employee details'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
我們就範例來解釋,可以發現上半部分就是一般 sql 語法,其中 IF NOT EXISTS
是 options 可以省略;下半部分每一行的意思分別是是:
COMMENT
用來添加資料表的註解ROW FORMAT DELIMITED
用來自定義分隔符 (後面兩行是自定義的內容)FIELDS TERMINATED BY
自定義欄位之間分隔符號 (預設為 \001
)LINES TERMINATED BY
自定義行之間的分隔符號 (預設為 \n
)STORED AS TEXTFILE
儲存的檔案格式 ()插入資料 (INSERT)
INSERT INTO <table_name> (col1, ...)
VALUES
(val1.1, ...),
(val2.1, ...);
讀取資料 (SELECT)
select cols | * from <table_name>
[ WHERE <condition> ]
[ GROUP BY col_list ]
[ ORDER BY col_list ]
[ CLUSTER BY col_list
| [DISTRIBUTE BY col_list] [SORT BY col_list]
]
[ LIMIT [offset,] rows ]
更新資料 (Update)
只有符合 ACID 的 table 能夠使用 Update,另外 Partitioning** 以及 Bucketing 的欄位不能被 Update。
ACID:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability),Hive 預設不支持 ACID,要在建表時要設置
transactional
屬性。CREATE TABLE <table_name> ... STORED AS ORC TBLPROPERTIES ('transactional'='true');
UPDATE <table_name>
SET col1 = val1 , col2 = val2 ...
[ WHERE <condition> ]
刪除資料 (DELETE)
DELETE FROM <table_name>
[ WHERE <condition> ]
刪除資料庫/資料表 (DROP)
DROP DATABASE <db_name>;
DROP TABLE <table_name>;
Hive 預設是將 SQL query 轉換為 MapReduce,但 MapReduce 本身其實存在不少缺點,因此才有了後來的 Spark。
明天開始將進入 Spark 的介紹。
Hive SQL 基礎語法學習筆記
How to Create a Table in Hive