hive創(chuàng)建表的語法參考如下網(wǎng)址:Create/Drop/Truncate Table
1.數(shù)據(jù)類型
在創(chuàng)建表的時候我們在新建列的時候會需要指定數(shù)據(jù)類型,一般在數(shù)據(jù)文件中我們可以將所有的數(shù)據(jù)都指定為string即字符串類型枕面,然后再用函數(shù)轉(zhuǎn)換為其他的數(shù)據(jù)類型腌歉,比如日期、數(shù)值等限匣。
CREATE TABLE [IF NOT EXISTS] [db_name.]table_name
``[(col_name data_type [COMMENT col_comment], ... [constraint_specification])]
....
data_type
: primitive_type
| array_type
| map_type
| struct_type
| union_type
由hive的語法規(guī)則可以看到hive的數(shù)據(jù)類型一共有五中,下面分別介紹一下這五種數(shù)據(jù)類型。
2.原生類型
primitive_type是對應的java中的數(shù)據(jù)類型捕犬,是比較常用的數(shù)據(jù)類型跷坝。這些數(shù)據(jù)類型的詳細描述在鏈接中Hive Data Types,這里只介紹一下常用的數(shù)據(jù)類型:
INT/INTEGER (4-byte signed integer, from -2,147,483,648 to 2,147,483,647)
int或integer類型是整型碉碉,表示從-2,147,483,648到2,147,483,647的整數(shù)柴钻,一般用來表示ID。如果要表示的數(shù)值位數(shù)超過int類型的最大值垢粮,可以使用bigint贴届。
DOUBLE (8-byte double precision floating point number)
如果用來表示商品的單價等金額信息可以使用double數(shù)據(jù)類型,double可以保存雙精度數(shù)值蜡吧。一般企業(yè)中我們會指定數(shù)值的位數(shù)和精度毫蚓,這個時候我們就需要使用DECIMAL數(shù)據(jù)類型,該類型可以指定任意的精度和位數(shù)昔善,方便用于計算绍些。用法是 DECIMAL(precision, scale)
,其中precision是精度耀鸦,指定有多少位有效數(shù)字柬批,scale是小數(shù)位數(shù),指小數(shù)點后有多少位數(shù)字袖订,比如DECIMAL(10,2)指的就是有10位有效數(shù)字氮帐,小數(shù)點后是2位。
另外洛姑,hive中的日期類型不常用上沐,我們一般將日期類型的數(shù)據(jù)保存為string類型,也省去了日期格式轉(zhuǎn)換的麻煩楞艾。
字符串類型一般使用string類型参咙,不推薦使用VARCHAR和CHAR類型。
對于boolean類型硫眯,我們一般用0和1來代替蕴侧,后續(xù)的使用處理上也會方便一些。
3.復雜類型
復雜類型是指array_type两入、map_type净宵、struct_type和union_type,一般在企業(yè)中使用 array_type和map_type會比較多一些裹纳。
4.Python對數(shù)據(jù)進行處理
一般企業(yè)中在對數(shù)據(jù)進行處理的時候是先將數(shù)據(jù)保存在hive表中:
create table test_log(
content string
);
在文件中一行數(shù)據(jù)就對應hive表中的一條數(shù)據(jù)择葡,然后在創(chuàng)建子表的時候使用Python腳本對content進行數(shù)據(jù)處理。具體分為下面三個步驟:
1).Create table, Load data : E(xtract)
2).Select, Python : T(ransform)
3).Save data into sub table: L(oad)
這就是使用Hive對采集到的日志文件進行ETL的過程剃氧。