ハイブのデータ型は非常に豊富なので、単純なものについては説明せず、一般的に使用されるいくつかの複雑な型の理解と使用についてのみ説明しましょう。公式ウェブサイト
によると、ハイブには 4 つの複雑なタイプがあります。
複合型:
1. 配列: ARRAY<data_type> (注: Hive 0.14 以降、負の値と非定数式が許可されています。) 2.
マップ: MAP<primitive_type, data_type> (注: 負の値と非定数式) -constant 式は、Hive 0.14 以降で使用できます。)
3. 構造体: STRUCT<col_name : data_type [COMMENT Col_comment], …>
4. Union: UNIONTYPE<data_type, data_type, …> (注: Hive 0.7.0 以降でのみ使用可能)
最初の 3 つは一般的に使用されますが、これらが定義、値、構造であることを理解するだけで済みます。ハイブ内で使用できます。
ARRAY
定義: 配列
値: arr[0]
構築: array(val2, val2, val3,...)、split()、COLLECT_SET()
マップ
定義:map<String, String>
値:map[key]
構成要素 L:map(key1, value1, key2, value2, ...)
構造体:
定義: struct<a:string,b:string>
値: struct.id
構築: name_struct(name1,val1,name2,val2,name3,val3,…)
- マップと構造体の使用には小さな違いがあります。
- マップ内のタイプは同じです。定義に従って知ることができます。
- 構造体の型は異なる場合があります。
簡単なシーン テーブル作成ステートメントを次に示します。
CREATE EXTERNAL TABLE ods_log_inc
(
`common` STRUCT<ar :STRING,ba :STRING,ch :STRING,is_new :STRING,md :STRING,mid :STRING,os :STRING,uid :STRING,vc:STRING> ,
`page` STRUCT<during_time :STRING,item :STRING,item_type :STRING,last_page_id :STRING,page_id:STRING,source_type :STRING> ,
`actions` ARRAY<STRUCT<action_id:STRING,item:STRING,item_type:STRING,ts:BIGINT>> ,
`displays` ARRAY<STRUCT<display_type :STRING,item :STRING,item_type :STRING,`order` :STRING,pos_id:STRING>> ,
`start` STRUCT<entry :STRING,loading_time :BIGINT,open_ad_id :BIGINT,open_ad_ms :BIGINT,open_ad_skip_ms:BIGINT> ,
`err` STRUCT<error_code:BIGINT,msg:STRING> ,
`ts` BIGINT
)
PARTITIONED BY (`dt` STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.JsonSerDe'
LOCATION '/warehouse/gmall/ods/ods_log_inc/';