歡迎訪問我的GitHub
https://github.com/zq2599/blog_demos
內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等;
《hive學習筆記》系列導航
關於hive學習筆記系列
- 《hive學習筆記》系列保持了作者一貫的風格,即通過實戰學習和了解;
- 作為一個構建在Hadoop上的資料倉儲框架,hive被用來進行資料提取、轉化、載入,這是一種可以儲存、查詢和分析儲存在Hadoop中的大規模資料的機制,hive資料倉儲工具能將結構化的資料檔案對映為一張資料庫表,並提供SQL查詢功能,能將SQL語句轉變成MapReduce任務來執行。(來自:《Hadoop應用開發實戰詳解(修訂版)》)
- 架構如下,可見最終還是在執行MapReduce:
環境資訊
本文對應的環境資訊如下:
- CentOS Linux release 7.5.1804
- JDK:1.8.0_191
- hadoop:2.7.7
- hive:1.2.2
關於hive的部署
- 需要先部署hadoop環境,請參考《Linux部署hadoop2.7.7叢集》
- hadoop部署成功後,安裝和體驗hive其參考《安裝和體驗hive》
資料型別簡介
Hive支援基本和複雜資料型別:
- 基本資料型別:包括數值型、布林型、字串型別和時間戳型別;
- 複雜資料型別:陣列、對映、結構;
基本資料型別
- 通過思維導圖來分類和理解:
- 下面通過列表說明所有的基本資料型別:
型別 | 描述 | 示例 |
---|---|---|
BOOLEAN | true/false | TRUE |
TINYINT | 1位元組有符號整數,從-128到127 | 1Y |
SMALLINT | 2位元組有符號整數,從-32768到32767 | 1S |
INT | 4位元組有符號整數,從-2147483648到2147483647 | 1 |
BIGINT | 8位元組有符號整數, 從-9223372036854775808到9223372036854775807 |
1L |
FLOAT | 4位元組單精度浮點數 | 1.0 |
DOUBLE | 8位元組(64位)雙精度浮點數 | 1.0 |
DECIMAL | 任意精度有符號小數 | 1.0 |
STRING | 無上限可變長度字串 | 'a', "a" |
VARCHAR | 可變長度字串 | 'a', "a" |
CHAR | 固定長度字串 | 'a', "a" |
BINARY | 位元組陣列 | - |
TIMESTAMP | 精度到納秒的時間戳 | '2020-03-01 00:00:00' |
DATE | 日期 | '2020-01-01' |
關於三種字串型別
- STRING,變長,無需最大長度宣告,理論上能儲存2GB字元;
- VARCHAR,變長,需要宣告最大長度(1到65535之間),例如VARCHAR(100);
- CHAR,定長,如CHAR(100);
常用型別綜合實戰
- 啟動hive,進入互動模式,執行以下語句建表,欄位型別是常用的幾種:
create table t1(
int_field INT,
string_field STRING,
boolean_field BOOLEAN,
date_field DATE,
timestamp_field TIMESTAMP
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;
- 用insert語句新增一條記錄:
insert into t1
values
(101, 'a101', true, '2020-01-01', '2020-03-01 00:00:00');
- 使用函式,在新增的記錄的時候,將timestamp_field欄位設定為當前時間,注意和前面的insert語句比較一下,使用函式時必須用到select XXX from XXX limit 1這樣的語法:
insert into t1
select
103, 'a103', true, '2020-01-01', current_timestamp()
from t1 limit 1;
- 看一下新增的兩條記錄:
hive> select * from t1;
OK
101 a101 true 2020-01-01 2020-03-01 00:00:00
103 a103 true 2020-01-01 2020-10-27 20:42:35.729
Time taken: 0.062 seconds, Fetched: 2 row(s)
- 檢視當前時間:
select unix_timestamp();
響應:
hive> select unix_timestamp();
OK
1603802631
Time taken: 0.028 seconds, Fetched: 1 row(s)
- 將DATE欄位轉為TIMESTAMP:
select cast(date_field as timestamp) from t1;
響應:
hive> select cast(date_field as timestamp) from t1;
OK
2020-01-01 00:00:00
2020-01-01 00:00:00
Time taken: 0.051 seconds, Fetched: 2 row(s)
- 將TIMESTAMP欄位轉為DATE:
select to_date(timestamp_field) from t1;
響應:
hive> select to_date(timestamp_field) from t1;
OK
2020-03-01
2020-10-27
Time taken: 0.063 seconds, Fetched: 2 row(s)
- 將TIMESTAMP欄位轉為BIGINT:
select to_date(timestamp_field) from t1;
響應:
hive> select to_date(timestamp_field) from t1;
OK
2020-03-01
2020-10-27
Time taken: 0.063 seconds, Fetched: 2 row(s)
至此,hive的基本資料型別已經瞭解,接下來的章節我們們一起學習瞭解複雜資料型別;
參考文件
https://stackoverflow.com/questions/37863194/insert-timestamp-into-hive/37868132
你不孤單,欣宸原創一路相伴
歡迎關注公眾號:程式設計師欣宸
微信搜尋「程式設計師欣宸」,我是欣宸,期待與您一同暢遊Java世界...
https://github.com/zq2599/blog_demos