一、基本數據類型
Hive支持的基本數據類型與SQL標準數據類型幾乎一致,包括:
1. TINYINT -- 8 bit 有符號整數
2. SMALLINT -- 16 bit 有符號整數
3. INT -- 32 bit 有符號整數
4. BIGINT -- 64 bit 有符號整數
5. BOOLEAN -- 真 / 假
6. FLOAT -- 單精度浮點數
7. DOUBLE -- 雙精度浮點數
8. STRING -- 字元串
9. TIMESTAMP -- 時間戳
常見的數據類型 Hive 都支持,只不過 Hive 中的表內容是存儲在 HDFS 上的,比較大的數值類型都是可行的,但是位元組數較少的數據類型可能不太適用,如 TINYINT 和 UCHAR 。FLOAT 和 DOUBLE 數據類型可以存儲相對較大的數據範圍,但是在計算時要注意可能存在的數據精度誤差。
二、複合數據類型
複合數據類型主要有:
1. 數組類型
Hive中的數組是指通類型的元素數組,數組結構可以嵌套,有兩種數組語法:
1. type_name ARRAY
2. ARRAY<type_name>
例如:
CREATE TABLE test_array ( col1 ARRAY<INT> );
INSERT INTO test_array VALUES ( array(1,2,3,4) );
其中 col1 是一個整數類型的數組,數組的元素由小括弧中的數字構成。
2. 映射類型
映射類型是指將一個數據類型映射為另一個類型,其中包含鍵值對。具有以下兩種語法形式:
1. MAP<key_type, value_type>
2. key_type MAP<value_type>
例如:
CREATE TABLE test_map (
col1 MAP<STRING, INT>,
col2 STRING MAP<INT> );
其中 col1 是使用字元串作為鍵名,整數作為內容值的映射表,而 col2 是用整數作為鍵名,字元串作為鍵值的映射表。
3. 結構類型
結構類型指的是有一組不同的鍵,每個鍵對應有一個分別使用不同的數據類型的值。結構類型使用一個結構體類型來表示,可以在語句中使用逗號分隔符的多個鍵值對:
CREATE TABLE test_struct (
col1 STRUCT<name:STRING,age:INT>,
col2 STRUCT<year:INT,month:INT,day:INT> );
其中 col1 包括 name 和 age 兩個鍵,col2 包含 year, month 和 day 三個鍵。
三、日期和時間類型
日期和時間類型指的是形如 「YYYY-MM-DD HH:MM:SS」 的事件或日期字元串。Hive 中支持的日期和時間類型包括:
1. DATE
2. TIMESTAMP
3. INTERVAL
DATE 和 TIMESTAMP 類型在語法上十分相似,但是區別在於 TIMESTAMP 支持更大的時間範圍和更高的精度。
INTERVAL 類型表示時間跨度,如「3年2個月零5天」.它只有一個參數,單位可以是 YEAR、MONTH、DAY、HOUR、MINUTE 或 SECOND。
下面是使用日期時間類型的示例:
CREATE TABLE test_time ( col1 DATE, col2 TIMESTAMP );
INSERT INTO test_time VALUES ( '2022-10-01', '2022-10-01 09:30:00' );
四、二進位類型
二進位類型用於表示二進位數據,通常用於存儲圖片、音頻等數據。Hive支持的二進位類型包括:
1. BINARY
2. VARBINARY
3. ARRAY<BYTE>
BINARY 表示固定長度的二進位數據,以字元串形式存儲;而 VARBINARY 表示可變長度的二進位數據,以字元串形式存儲。ARRAY<BYTE> 表示位元組類型的數組。
以下是使用二進位類型的示例:
CREATE TABLE test_binary ( col1 BINARY, col2 VARBINARY, col3 ARRAY<BYTE> );
INSERT INTO test_binary VALUES ( 'Data1', 'Data2', ARRAY(1,2,3) );
五、常見問題解析
1. Hive 支持哪種字元編碼?
Hive 支持 UTF-8 字元編碼,但是如果需要更改 Hive JRE 的默認編碼,可以在 hive-site.xml 文件中配置 java.nio.file.encoding 屬性。
2. Hive FLOAT 和 DOUBLE 精度問題
Hive 支持 FLOAT 和 DOUBLE 數據類型,但是在計算過程中會有精度問題。這是因為計算機存儲浮點數時,會使用二進位來表示,而浮點數在二進位中不一定能夠精確表示。如果需要精確計算,可以使用 HiveBigDecimalUDF.jar 或者使用 DECIMAL 類型。
3. Hive 中數據類型和 Java 數據類型的映射關係
Hive 支持的數據類型和 Java 數據類型的映射關係如下:
TINYINT -- Byte
SMALLINT -- Short
INT -- Integer
BIGINT -- Long
BOOLEAN -- Boolean
FLOAT -- Float
DOUBLE -- Double
STRING -- String
TIMESTAMP -- java.sql.Timestamp
需要注意的是,Hive 中的日期類型 DATE 和 INTERVAL 並沒有對應的 Java 數據類型。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/249798.html