1. 整体概述

注意:

- Hive的
String类型,是一个可变的字符串,不能声明字符串长度。理论上可以存储2GB的字符。decimal用于存储精确的小数,通常用于存储钱。第一个数字定义了这个小数的总的数字位数(包括小数点左侧和右侧的数字)。第二个数字定义了小数点右侧的数字位数。
例子:decimal(38, 0)定义了一种可以存储最多38位数字且没有小数的数据类型。- 所有的基本数据类型,包括
string和timestamp类型都是可比较大小的。"\0":\0表示一个空字符,所以这是一个空字符的字符串,不是空字符串''
2. 集合数据类型详细说明

注意:map是特殊的struct,struct中元素两两一组就是map
- 定义集合数据类型

- 集合数据类类型相关总结
- 【Hive】array相关的函数总结 『数组 | 数组与元素 | 两个数组』
- map:https://blog.csdn.net/weixin_43597208/article/details/126962317
-- str_to_map(字符串参数, 分隔符1, 分隔符2) -- 使用两个分隔符将字符串拆分为键值对。 -- 分隔符1将文本分成K-V对,分隔符2分割每个K-V对。对于分隔符1默认分隔 符是 ',',对于分隔符2默认分隔符是 '=' -- 注意:不使用于 json 字符串 select str_to_map( concat_ws(',',collect_set(concat(source_key,":",source_value)),collect_set(concat("name",":",name))), ",", ":" ) - struct
3. 类型转换
-
自动类型转换:如果插入或修改数据时,数据类型与表中定义的数据类型不一致,会进行隐式转换。规则如下:
- 和java自动类型转换一样:
tinyint->smalint->int->bigint->float->double boolean类型不可以转换为任何其他类型数字样式的string与数字类型的数进行运算时,会转成数字类型。-
所以,数字类型的字符串在参与运算时,无论是
=还是!=还是>还是<等等运算,都需要注意。特别是空字符串与数字运算,结果必为null,因为空字符串转为数字类型一定会转换失败,返回null,null与任何运算结果都为null

-
转换规则如下:

验证过程:-- Spark2.1 版本 select "2697000000.00" > 0; ------- |true | ------- explain select "2697000000.00" > 0; ----------------------------------------------------------------------------- |*Project [true AS (CAST(2697000000.00 AS DOUBLE) > CAST(0 AS DOUBLE))#17]. | |+- Scan OneRowRelation[] | ----------------------------------------------------------------------------- -- Spark2.4 版本 select "2697000000.00" > 0; ------- |NULL | ------- explain select "2697000000.00" > 0; ----------------------------------------------------------------------------- |**(1) Project [null AS (CAST(2697000000.00 AS INT) > 0)#2] | +- Scan OneRowRelation[] | -----------------------------------------------------------------------------
-
- 和java自动类型转换一样:
-
强制类型转换:插入或修改数据时,手动将某数据类型强转为某数据类型。使用CAST函数:

在Hive sql中类型强转失败时,不会抛异常,也没法赋默认值,会直接赋null值。所以如果想要赋默认值可以这样:coalesce(cast(xxx as int), 0) as col_name -
注意:无论是隐式转换,还是显示转换。只要转换不成功,都返回
NULL。所以如果想要对转换失败时,赋予默认值,可以:SELECT coalesce(cast(string_field as int), 0), nvl(cast(string_field as int), 0) FROM table_name;
4. NULL
-
hive中任何数与 null 进行运算,结果都为 null
包括
col_name not in ('aaa', null)这种运算结果也为null,括号中只要有一个元素为null,则运算结果为null。
只能写成col_name is not null and col_name not in ('')


-
判空要使用:xxx is null 或 xxx is not null
-
运算异常结果为null,比如:5 / 0 = null
-
sum、max、min、count里面有null

-
任何数据类型都可以为null

-
NULL是一种特殊的值,对某字段使用distinct 关键字时,NULL和一般值一样,都会排重,只保留一个值。

-
null 与 空字符串:null 是占空间的,空字符串是不占空间的。

750

被折叠的 条评论
为什么被折叠?



