【Hive---04】数据类型『 基本数据类型 | 集合数据类型 | 类型转换 | null』

1. 整体概述

在这里插入图片描述

注意:
在这里插入图片描述

在这里插入图片描述

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

2. 集合数据类型详细说明

在这里插入图片描述

注意:map是特殊的struct,struct中元素两两一组就是map

  1. 定义集合数据类型
    在这里插入图片描述
  2. 集合数据类类型相关总结
    1. 【Hive】array相关的函数总结 『数组 | 数组与元素 | 两个数组』
    2. 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))),
          ",",
          ":"
      )
      
    3. struct

3. 类型转换

  1. 自动类型转换:如果插入或修改数据时,数据类型与表中定义的数据类型不一致,会进行隐式转换。规则如下:

    • 和java自动类型转换一样:tinyint->smalint->int->bigint->float->double
    • boolean类型不可以转换为任何其他类型
    • 数字样式的string数字类型的数进行运算时,会转成数字类型。
      1. 所以,数字类型的字符串在参与运算时,无论是=还是!=还是>还是<等等运算,都需要注意。特别是空字符串与数字运算,结果必为null,因为空字符串转为数字类型一定会转换失败,返回nullnull与任何运算结果都为null
        在这里插入图片描述

      2. 转换规则如下:
        在这里插入图片描述
        验证过程:

        --  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[]                                                    |
        -----------------------------------------------------------------------------
        
  2. 强制类型转换:插入或修改数据时,手动将某数据类型强转为某数据类型。使用CAST函数:
    在这里插入图片描述

注意:无论是隐式转换,还是显示转换。只要转换不成功,都返回NULL

4. NULL

  1. hive中任何数与 null 进行运算,结果都为 null

    包括 col_name not in ('aaa', null) 这种运算结果也为null,括号中只要有一个元素为null,则运算结果为null
    只能写成col_name is not null and col_name not in ('')
    在这里插入图片描述
    在这里插入图片描述

  2. 判空要使用:xxx is null 或 xxx is not null

  3. 运算异常结果为null,比如:5 / 0 = null

  4. sum、max、min、count里面有null
    在这里插入图片描述

  5. 任何数据类型都可以为null
    在这里插入图片描述

  6. NULL是一种特殊的值,对某字段使用distinct 关键字时,NULL和一般值一样,都会排重,只保留一个值。
    在这里插入图片描述

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ElegantCodingWH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值