天天看點

Hive data types

Primitive Types

Numeric Types

 type length postfix example
TINYINT 1-byte signed integer, -

128

 - 

127

Y 100Y
SMALLINT 2-byte signed integer, -

32768

32767

S 100S
INT|INTEGE 4-byte signed integer, -2147483648 - 2147483647 L 100L
BIGINT 8-byte signed integer,-9223372036854775808 to 9223372036854775807

FLOAT

4-byte single precision floating point number

DOUBLE

8-byte double precision floating point number

DECIMAL

Introduced in Hive 0.11.0 with a precision of 38 digits

NUMERIC

same as DECIMAL, starting with Hive 3.0.0
DOUBLE PRECISION alias for DOUBLE, only available starting with Hive 2.2.0

Data/Time Types

TIMESTAMP Only available starting with Hive 0.8.0 YYYY-MM-DD HH:MM:SS.fffffffff" (9 decimal place precision)
DATE Only available starting with Hive 0.12.0 YYYY-­MM-­DD.
INTERVAL‍ Only available starting with Hive 1.2.0
timestamp with local time zone

timestamp with loca time zone類型文法

tmestamp[(fractional_seconds_precisions)] with local zone

timestamp with local time zone 和timesatamp with time zone的最大差別就是,前者在使用者送出時間給資料庫的時,該類型會轉換成資料庫的時區來儲存資料,即資料庫儲存的時間是資料庫本地時區,當别的使用者通路資料庫時oracle會自動将該時間轉換成目前用戶端的時間。

DB 的date類型:Date(不含微妙級時間),Timestamp(不含時區,含微妙時間),Timestamp with timezone(保持client的timezone),Timestamp with local time zone(把client的timezone轉換成DB的timezone對應的時間)

String Types

STRING
VARCHAR between 1 and 65535
CHAR The maximum length is fixed at 255 定長

對于Hive的String類型相當于資料庫的varchar類型,該類型是一個可變的字元串,不過它不能聲明其中最多能存儲多少個字元,理論上它可以存儲2GB的字元數。

Primitive Types Demo

DROP TABLE IF EXISTS hive_primitive_data_types;              CREATE TABLE hive_primitive_data_types              (              c_integers_tinyint  TINYINT,              c_integers_smallint SMALLINT,              c_integers_int      INT,              c_integers_integer  INTEGER,              c_integers_bigint   BIGINT,                  c_boolean           BOOLEAN,                  c_float             FLOAT,              c_double            DOUBLE,                  c_decimal           DECIMAL,                  c_string            STRING,              c_varchar           VARCHAR(65535),              c_char              CHAR(10) COMMENT '總長度255,固定長度',              c_timestamp         TIMESTAMP,              --c_timestamp_2 timestamp with local time zone,              c_date              DATE,                  c_binary            BINARY              );           
insert into table hive_primitive_data_types               select 1,1,1,1,1,'true',1.1,1.11,1.111,'1','1','1',cast(current_date() as timestamp),cast(current_date() as date),cast('1' as binary);                  insert into table hive_primitive_data_types               select 2,2,2,2,2,'true',2.2,2.22,2.222,'2','2','2',cast(current_timestamp() as timestamp),current_date(),cast('2' as binary);               
Hive data types

Complex Types

類型解釋

ARRAY ARRAY<data_type> 編号從零開
MAP

MAP<primitive_type, data_type>

STRUCT STRUCT<col_name : data_type [COMMENT col_comment], ...>
UNIONTYPE UNIONTYPE<data_type, data_type, ...>

Hive有四種複雜資料類型ARRAY、MAP 和 STRUCT。ARRAY和MAP與Java中的Array和Map類似,而STRUCT與C語言中的Struct類似,它封裝了一個命名字段集合,複雜資料類型允許任意層次的嵌套。

  • uniontype可以了解為泛型
  • 同一時刻同一地點隻有聯合體中的一個元素生效
  • uniontype中的元素共享記憶體
  • 可以通過create_union内置函數建立uniontype:create_union(tag, val1, val2) tag是數字,0開始,必須小于後面參數的個數
  • 插入uniontype資料,通過這種方式隻能插入隻有一個元素的uniontype,包含多個會提示跟表中的字段類型不一緻,這個是坑的地方

建立表

DROP TABLE IF EXISTS hive_complex_data_types;              CREATE TABLE hive_complex_data_types              (              c_array  ARRAY<STRING>,              c_map    MAP<STRING,STRING>,              c_struct STRUCT<province:STRING,city:STRING,area:STRING>,              c_union  UNIONTYPE<STRING,STRING>              )              ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'              COLLECTION ITEMS TERMINATED BY '_'              MAP KEYS TERMINATED BY ':'              LINES TERMINATED BY '\n'              ;           

ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t':字段分割

COLLECTION ITEMS TERMINATED BY '_':集合分割

MAP KEYS TERMINATED BY ':':map的key,value分割

LINES TERMINATED BY '\n':行分割

導入資料

load data local inpath '/liuduo/data.txt' into table hive_complex_data_types;           
cat data.txt                  廣州_深圳       城市:廣州       廣東_廣州_白雲  廣州深圳              北京_上海       城市:上海       上海_上海_徐彙  北京上海           

查詢資料

select c_array[0],c_array[1],              c_map['城市'],              c_struct.province,c_struct.city,c_struct.area,              c_union              from hive_complex_data_types;           
Hive data types

類型轉換

Hive的原子資料類型是可以進行隐式轉換的,類似于Java的類型轉換,例如某表達式使用INT類型,TINYINT會自動轉換為INT類型,但是Hive不會進行反向轉化,例如,某表達式使用TINYINT類型,INT不會自動轉換為TINYINT類型,它會傳回錯誤,除非使用CAST操作。

隐式類型轉換規則如下(1)任何整數類型都可以隐式地轉換為一個範圍更廣的類型,如TINYINT可以轉換成INT,INT可以轉換成BIGINT。(2)所有整數類型、FLOAT和STRING類型都可以隐式地轉換成DOUBLE。(3)TINYINT、SMALLINT、INT都可以轉換為FLOAT。(4)BOOLEAN類型不可以轉換為任何其它的類型。