hive中bigint转换string hive bigint类型_Hive


Hive既支持关系数据库中绝大多数的基本数据类型,同时也支持3种集合数据类型

一、基本数据类型

Hive类似和java语言中一样,会支持多种不同长度的整型和浮点类型数据,同时也支持布尔类型、字符串类型,时间戳数据类型以及二进制数组数据类型等。具体的如下表:


hive中bigint转换string hive bigint类型_bigint hive java类型_02


以上这些类型名称都是hive中保留字。其实注意的是这些基本的数据类型都是java中的接口进行实现的,因此这些数据类型和java中数据类型是基本一致的:


hive中bigint转换string hive bigint类型_分隔符_03


二、类型转换

2.1 隐式转换

如果用户在查询中将一种浮点类型和另一种浮点类型的值做对比,那么结果会咋样?

Hive中会将类型转换成两个浮点类型中值较大的那个类型,即:将FLOAT类型转换成DOUBLE类型,当然如果需要的话,任意整型会转化成DOUBLE型。

其实Hive 中基本数据类型遵循以下的层次结构,按照这个层次结构,子类型到祖先类型允许隐式转换。


hive中bigint转换string hive bigint类型_Hive_04


从上图我们总结如下转化规律:

(1)任何整数类型都可以隐式地转换为一个范围更广的类型,如 TINYINT 可以转换成 INT, INT 可以转换成 BIGINT。

(2)所有整数类型、 FLOAT 和 STRING 类型都可以隐式地转换成 DOUBLE。

(3) TINYINT、 SMALLINT、 INT 都可以转换为 FLOAT。

(4) BOOLEAN 类型不可以转换为任何其它的类型。

2.2 显式转换

当然我们也可以指定转换数据类型?比如将字符串类型转换成INT类型(由上图我们知道STRING类型可以隐式转换成DOUBLE类型),这里就需要要我们学会一个CAST函数。它可以类比java中强制转化。

例如 CAST('1' AS INT)将把字符串'1' 转换成整数 1;如果强制类型转换失败,如执行

CAST('X' AS INT),表达式返回空值 NULL。

三、集合数据类型

Hive中的列支持structmaparray集合数据类型:


hive中bigint转换string hive bigint类型_hive中bigint转换string_05


和基本数据类型一样,这些类型的名称同样是保留字。Hive 有三种复杂数据类型 ARRAY、 MAP 和 STRUCT。 ARRAY 和 MAP 与 Java 中的Array 和 Map 类似,而 STRUCT 与 C 语言中的 Struct 类似,它封装了一个命名字段集合,复杂数据类型允许任意层次的嵌套。

四、文件格式

当数据存储在文本文件中,必须按照一定格式区别行和列,如使用逗号作为分隔符的 CSV 文件 (Comma-Separated Values) 或者使用制表符作为分隔值的 TSV 文件 (Tab-Separated Values)。但此时也存在一个缺点,就是正常的文件内容中也可能出现逗号或者制表符。所以 Hive 默认使用了几个平时很少出现的字符,这些字符一般不会作为内容出现在文件中。Hive 默认的行和列分隔符如下表所示。


hive中bigint转换string hive bigint类型_hive中bigint转换string_06


五、示例应用

根据以上的知识点,我们可以运用基本数据类型、集合数据类型以及文件格式等知识点在Hive中创建一个学生表(student表)。


CREATE TABLE students(
  name      STRING,   -- 姓名
  age       INT,      -- 年龄
  subject   ARRAY<STRING>,   --学科
  score     MAP<STRING,FLOAT>,  --各个学科考试成绩
  address   STRUCT<houseNumber:int, street:STRING, city:STRING, province:STRING>  --家庭居住地址
) ROW FORMAT DELIMITED FIELDS TERMINATED BY "001"-- 列分隔符
COLLECTION ITEMS TERMINATED BY "002"--MAP STRUCT 和 ARRAY 的分隔符(数据分割符号)
MAP KEYS TERMINATED BY "003"-- MAP 中的 key 与 value 的分隔符
LINES TERMINATED BY "n"-- 行分隔符