1.数据类型
在创建表的时候我们在新建列的时候会需要指定数据类型,一般在数据文件中我们可以将所有的数据都指定为string即字符串类型,然后再用函数转换为其他的数据类型,比如日期、数值等。
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的语法规则可以看到hive的数据类型一共有五中,下面分别介绍一下这五种数据类型。
2.原生类型
primitive_type是对应的java中的数据类型,是比较常用的数据类型。这些数据类型的详细描述在链接中Hive Data Types,这里只介绍一下常用的数据类型:
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的整数,一般用来表示ID。如果要表示的数值位数超过int类型的最大值,可以使用bigint。
DOUBLE (8-byte double precision floating point number)
如果用来表示商品的单价等金额信息可以使用double数据类型,double可以保存双精度数值。一般企业中我们会指定数值的位数和精度,这个时候我们就需要使用DECIMAL数据类型,该类型可以指定任意的精度和位数,方便用于计算。用法是 DECIMAL(precision, scale) ,其中precision是精度,指定有多少位有效数字,scale是小数位数,指小数点后有多少位数字,比如DECIMAL(10,2)指的就是有10位有效数字,小数点后是2位。
另外,hive中的日期类型不常用,我们一般将日期类型的数据保存为string类型,也省去了日期格式转换的麻烦。
字符串类型一般使用string类型,不推荐使用VARCHAR和CHAR类型。
对于boolean类型,我们一般用0和1来代替,后续的使用处理上也会方便一些。
3.复杂类型
复杂类型是指array_type、map_type、struct_type和union_type,一般在企业中使用 array_type和map_type会比较多一些。
4.Python对数据进行处理
一般企业中在对数据进行处理的时候是先将数据保存在hive表中:
create table test_log( content string );
在文件中一行数据就对应hive表中的一条数据,然后在创建子表的时候使用Python脚本对content进行数据处理。具体分为下面三个步骤:
1).Create table, Load data : E(xtract)
2).Select, Python : T(ransform)
3).Save data into sub table : L(oad)
这就是使用Hive对采集到的日志文件进行ETL的过程。