hive之路5-hive数据类型

2021-03-02 16:12:00 浏览数 (1)

本文中介绍了hive中数据类型知识点,包含:

  • 基本数据类型
  • 复杂数据类型
  • 隐式类型转换
  • 显式类型转换

Hive基本数据类型

数值型

类型

说明

TINYINT

1个字节,-128~127

SMALLINT

2个字节,-32768~32767

INT/INTEGER

4个字节

BIGINT

8个字节

FLOAT

4个字节单精度

DOUBLE

8字节双精度

DECIMAL

38位小数精度,支持科学计数法DECIMAL(9,7) DECIMAL(precision, scale) decimal(10,0)

日期时间
  • TIMESTAMP

它支持传统的UNIX时间戳可选纳秒的精度。它支持的java.sql.Timestamp格式YYYY-MM-DD HH:MM:SS.fffffffff和格式YYYY-MM-DD HH:MM:ss.ffffffffff

  • DATE

DATE值在年/月/日的格式形式描述 NaN

字符
  • STRING:用单引号或者双引号括起来的字符串
  • VARCHAR:1~65535
  • CHAR:固定长度,最长是255
代码语言:javascript复制
create table bigdata(name char(10))
Misc
  • boolean
  • binary

Hive复杂数据类型

  • 数据array

Syntax: ARRAY<data_type>

代码语言:javascript复制
Array("hadoop", "hive", "spark")
array[1]="hive"
  • 映射map

Syntax: MAP<primitive_type, data_type>

代码语言:javascript复制
Map(1:"hadoop", 2:"hive")
map[1]="hadoop"
  • 结构体struct

Syntax: STRUCT<col_name : data_type [COMMENT col_comment], …>

代码语言:javascript复制
Struct(a:5, b:"hive")
struct.a=5
  • 联合体uniontype
代码语言:javascript复制
UNIONTYPE<int, double, array<string>, struct<a:int,b:string>>

{0:1}
{1:2.0}
{2:["three","four"]}
{3:{"a":4,"b":"five"}}
{2:["six","seven"]}
{3:{"a":8,"b":"eight"}}
{0:8}
  • 复合型demo
代码语言:javascript复制
create table complex(
  col1 array<int>,
  col2 map<string,int>,
  col3 struct<a:string,b:int>,
  col4 uniontype<string,int>
)

隐式类型转换

hive中的数据类型转换也分为隐式类型转换显式类型转换

第一行的名称为对应第一列的名称缩写

  • 布尔型只能转换成自身类型
  • tinyint 不能转成布尔、时间类型和二进制类型
  • 任何类型都可以转成比自己范围更广的类型
  • 所有的整数类型、float、string都可以隐式转成double类型

显式类型转换

  1. 显式类型转换是通过cast函数来实现的,语法为:
代码语言:javascript复制
cast(value as type)
代码语言:javascript复制
# demo
SELECT name,salary
FROM employee
WHERE cast(salary as float) < 100.0;

如果salary是不能转换成float,这时``cast将会返回NULL`

  1. 几点说明
  • 如果将浮点型转换成int类型,内部操作是通过round()或者floor()函数来实现的,而不是通过cast
  • cast()可以进行嵌套操作
代码语言:javascript复制
SELECT (cast(cast(a as string) as double)) from src;  # 先转成string,再转成double
  • 对于Date类型的数据,只能在Date、Timestamp以及String之间进行转换

0 人点赞