1、基本データ型
ハイブデータ型 |
Javaデータ型 |
長さ |
例 |
TINYINT |
バイト |
1バイトの符号付き整数 |
20 |
SMALINT |
ショート |
2バイトの符号付き整数 |
20 |
INT |
int型 |
4バイトの符号付き整数 |
20 |
BIGINT |
長いです |
8バイトの符号付き整数 |
20 |
BOOLEAN |
ブーリアン |
trueまたはfalseのブール、 |
真偽 |
浮く |
浮く |
単精度浮動小数点数 |
3.14159 |
ダブル |
ダブル |
倍精度浮動小数点数 |
3.14159 |
STRING |
弦 |
キャラクターシリーズ。あなたは、文字セットを指定することができます。あなたは、単一引用符または二重引用符を使用することができます。 |
「すべての良い男性のための」「今の時間です」 |
TIMESTAMP |
|
タイムタイプ |
|
バイナリ |
|
バイト配列 |
|
文字列型の変数であるが、それは文字の数まで保持できる宣言することはできません文字列ハイブ同等のvarchar型のデータベースについては、理論的には、それは文字の2ギガバイトを格納することができます。
図2に示すように、データ型のセット
データの種類 |
説明 |
構文例 |
STRUCT |
そして、類似したC言語の構造体は、「ドット」表記アクセス元素含有量から入手できます。列のデータ・タイプがSTRUCT {最初の文字列、最後STRING}である場合、例えば、最初素子1は1次回フィールドで参照することができます。 |
構造体() |
地図 |
MAPは、キーの集合である - 配列表記を使用して値の組は、データにアクセスすることができます。カラムのデータ型がMAP、前記キーがある場合、例えば、 - >「ジョン」と「最後」 - - >値のペアが「最初」である>「ドウ」、それは姓フィールドによって得ることができる[「最終」]要素 |
地図() |
アレイ |
配列は、同じ名前と型を持つ変数の集まりです。これらの変数は、配列の要素と呼ばれ、各配列要素は数、ゼロから番号を付しています。例えば、[「ジョン」、「ドゥ」]の配列値が、第2の要素は、配列の名前で参照することができる[1]。 |
アレイ() |
複雑なデータハイブのARRAY、MAPおよびSTRUCTの3つのタイプがあります。MAPのマップ配列等が挙げられ、C言語STRUCT構造体の配列とJavaは、同様に、それは名前付きフィールドのコレクションをカプセル化し、複雑なデータ型は、ネストの任意のレベルを可能にします。
実際の場合、以下の通りであります
1)我々は、そのデータ構造を表現するためにJSON形式を使用し、行の次の表を仮定する。フォーマットは、ハイブにアクセス可能です
{ "名前": "songsong"、 "友人":[ "ビンビン"、 "リリ"]、//列表アレイ、 "子供":{//キーマップ、 "暁の歌":18、 "xiaoxiaoの歌":19 } "住所":{//構造構造体、 「ストリート」:「登輝長い関」、 「都市」:「北京」 } } |
2)上記のデータ構造に基づいて、我々は、ハイブとインポートデータに対応するテーブルを作成しました。
ローカルテストファイルを作成してあるtest.txt
songsong、bingbing_lili、暁の歌:18_xiaoxiao曲:19、登輝長いguan_beijing 襄陽、caicai_susu、シャオヤン:18_xiaoxiao陽:19、チャオyang_beijing |
注:MAPの間で、関係のSTRUCTおよびARRAYの要素が同じ文字で表すことができ、ここでは「_」。
3)Hive上创建测试表test
create table test(
name string,
friends array<string>,
children map<string, int>,
address struct<street:string, city:string>
)
row format delimited
fields terminated by ','
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n';
字段解释:
row format delimited fields terminated by ',' -- 列分隔符
collection items terminated by '_' --MAP STRUCT 和 ARRAY 的分隔符(数据分割符号)
map keys terminated by ':' -- MAP中的key与value的分隔符
lines terminated by '\n'; -- 行分隔符
4)导入文本数据到测试表 或者直接put到这个目录也可以
hive > load data local inpath ‘/opt/module/datas/test.txt’into table test
5)访问三种集合列里的数据,以下分别是ARRAY,MAP,STRUCT的访问方式
hive > select friends[1],children['xiao song'],address.city from test
where name="songsong";
OK
_c0 _c1 city
lili 18 beijing
Time taken: 0.076 seconds, Fetched: 1 row(s)
3、类型转化
Hive的原子数据类型是可以进行隐式转换的,类似于Java的类型转换,例如某表达式使用INT类型,TINYINT会自动转换为INT类型,但是Hive不会进行反向转化,例如,某表达式使用TINYINT类型,INT不会自动转换为TINYINT类型,它会返回错误,除非使用CAST操作
1.隐式类型转换规则如下
(1)任何整数类型都可以隐式地转换为一个范围更广的类型,如TINYINT可以转换成INT,INT可以转换成BIGINT。
(2)所有整数类型、FLOAT和STRING类型都可以隐式地转换成DOUBLE。
(3)TINYINT、SMALLINT、INT都可以转换为FLOAT。
(4)BOOLEAN类型不可以转换为任何其它的类型。
2.可以使用CAST操作显示进行数据类型转换
例如CAST('1' AS INT)将把字符串'1' 转换成整数1;如果强制类型转换失败,如执行CAST('X' AS INT),表达式返回空值 NULL。