hive學習筆記之一:基本數據類型

歡迎訪問我的GitHub

https://github.com/zq2599/blog_demos

內容:所有原創文章分類彙總及配套源碼,涉及Java、Docker、Kubernetes、DevOPS等;

《hive學習筆記》系列導航

  1. 基本數據類型
  2. 複雜數據類型
  3. 內部表和外部表
  4. 分區表
  5. 分桶
  6. HiveQL基礎
  7. 內置函數
  8. Sqoop
  9. 基礎UDF
  10. 用戶自定義聚合函數(UDAF)
  11. UDTF

關於hive學習筆記系列

  • 《hive學習筆記》系列保持了作者一貫的風格,即通過實戰學習和了解;
  • 作爲一個構建在Hadoop上的數據倉庫框架,hive被用來進行數據提取、轉化、加載,這是一種可以存儲、查詢和分析存儲在Hadoop中的大規模數據的機制,hive數據倉庫工具能將結構化的數據文件映射爲一張數據庫表,並提供SQL查詢功能,能將SQL語句轉變成MapReduce任務來執行。(來自:《Hadoop應用開發實戰詳解(修訂版)》)
  • 架構如下,可見最終還是在執行MapReduce:

在這裏插入圖片描述

環境信息

本文對應的環境信息如下:

  1. CentOS Linux release 7.5.1804
  2. JDK:1.8.0_191
  3. hadoop:2.7.7
  4. hive:1.2.2

關於hive的部署

  1. 需要先部署hadoop環境,請參考《Linux部署hadoop2.7.7集羣》
  2. 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字節有符號整數,<br>從-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'

關於三種字符串類型

  1. STRING,變長,無需最大長度聲明,理論上能存儲2GB字符;
  2. VARCHAR,變長,需要聲明最大長度(1到65535之間),例如VARCHAR(100);
  3. CHAR,定長,如CHAR(100);

常用類型綜合實戰

  1. 啓動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;
  1. 用insert語句新增一條記錄:
insert into t1 
values 
(101, 'a101', true, '2020-01-01', '2020-03-01 00:00:00');
  1. 使用函數,在新增的記錄的時候,將<font color="blue">timestamp_field</font>字段設置爲當前時間,注意和前面的insert語句比較一下,使用函數時必須用到<font color="blue">select XXX from XXX limit 1</font>這樣的語法:
insert into t1 
select 
103, 'a103', true, '2020-01-01', current_timestamp() 
from t1 limit 1;
  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)
  1. 查看當前時間:
select unix_timestamp();

響應:

hive> select unix_timestamp();
OK
1603802631
Time taken: 0.028 seconds, Fetched: 1 row(s)
  1. 將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)
  1. 將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)
  1. 將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

你不孤單,欣宸原創一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 數據庫+中間件系列
  6. DevOps系列

歡迎關注公衆號:程序員欣宸

微信搜索「程序員欣宸」,我是欣宸,期待與您一同暢遊Java世界... https://github.com/zq2599/blog_demos

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章