IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Hive数据类型及文件格式 -> 正文阅读

[大数据]Hive数据类型及文件格式

1. 基本数据类型

Hive数据类型对应Java数据类型长度?例子
TINYINTbyte1byte有符号整数(-128 ~ 127)5
SMALINTshort?2byte有符号整数(-32,768 ~ 32,767)5
INTint4byte有符号整数(-2,147,483,648 ~ 2,147,483,647)55
BIGINTlong8byte有符号整数(-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807)5
BOOLEANboolean布尔类型,true或者falseTRUE/FALSE
FLOATfloat单精度浮点数3.14159
DOUBLEdouble双精度浮点数3.141592653
STRINGstring字符串类型,可以使用单引号或者双引号'hello world'或"hello world"
TIMESTAMP时间类型unix1628664897605
BINARY字节数组
DECIMAL从Hive0.11.0开始支持DECIMAL(9, 7)

备注:对于Hive的String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以存储2GB的字符数。

2. 复杂数据类型

数据类型语法示例描述
MAPMAP<STRING,FLOAT>MAP包含key->value键值对,可以通过key来访问元素。比如”userlist”是一个map类型,其中username是key,password是value;那么我们可以通过userlist['username']来得到这个用户对应的password;
ARRAYARRAY<STRING>ARRAY类型是由一系列相同数据类型的元素组成,这些元素可以通过下标来访问。比如有一个ARRAY类型的变量fruits,它是由['apple','orange','mango']组成,那么我们可以通过fruits[1]来访问元素orange,因为ARRAY类型的下标是从0开始的;
STRUCT

STRUCT<CITY:STRING,

AREA:STRING,

STREET:STRING,

NUMBER:INT>

STRUCT可以包含不同数据类型的元素。这些元素可以通过”点语法”的方式来得到所需要的元素,比如user是一个STRUCT类型,那么可以通过user.address得到这个用户的地址。
UNIONUNIONTYPE,他是从Hive 0.7.0开始支持的。

建表:

create table if not exists
student(
  id INT,
  name STRING,
  cource ARRAY<STRING>,
  body MAP<STRING,FLOAT>,
  address STRUCT<CITY:STRING,AREA:STRING,STREET:STRING,NUMBER:INT>
) 
row format delimited fields terminated by ',' 
COLLECTION ITEMS TERMINATED BY '_' 
MAP KEYS TERMINATED BY ':'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;

load data local inpath '/home/pro/student.text' into table student;
 
select * from student;
  • 建表时使用?STORED AS?子句指定文件存储的格式,该子句表示了该表是以何种文件形式存储在文件系统。
  • 数据格式:数据存储在文本文件中,需要按照一定的格式区分行和列并且向Hive指明,Hive才能将其识别,常见的格式有CSV(逗号分隔)和TSV(制表符分隔)。
  • row format delimited fields terminated by ',' ?-- 列分隔符

    collection items terminated by '_' ? ? ?--MAP STRUCT 和 ARRAY 的分隔符(数据分割符号)

    map keys terminated by ':' ? ? ? ? ? ? ? ?-- MAP中的key与value的分隔符

    lines terminated by '\n'; ? ? ? ? ? ? ? ? ? ?-- 行分隔符
    (可以看到,我们定义了三种不同的集合类型字段,并指定了集合类型的分隔符为"_",即struct,array,以及map的不同kv之间用"_"分割,同时定义了map的key和value之间用":"分割。)

1,文文,语文_数学_英语_音乐,Height:165_weight:50,深圳_福田区_益田路_5023
2,毛毛,语文_数学_英语_体育,Height:175_weight:60,深圳_南山区_深南大道_9037
3,超超,语文_数学_英语_美术,Height:170_weight:60,深圳_罗湖区_深南东路_5002

select * from student;

3. 数据类型转换

Hive的原子数据类型是可以进行隐式转换的,类似于Java的类型转换,例如某表达式使用INT类型,TINYINT会自动转换为INT类型,但是Hive不会进行反向转化,例如,某表达式使用TINYINT类型,INT不会自动转换为TINYINT类型,它会返回错误,除非使用CAST操作。

隐式类型转换规则:

下表列出了Hive内置的数据类型之间是否可以进行隐式的转换操作:

bltinyintsiintbigintfloatdoubledmstringvctsdateba
booleantruefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalse
tinyintfalsetruetruetruetruetruetruetruetruetruefalsefalsefalse
smallintfalsefalsetruetruetruetruetruetruetruetruefalsefalsefalse
intfalsefalsefalsetruetruetruetruetruetruetruefalsefalsefalse
bigintfalsefalsefalsefalsetruetruetruetruetruetruefalsefalsefalse
floatfalsefalsefalsefalsefalsetruetruetruetruetruefalsefalsefalse
doublefalsefalsefalsefalsefalsefalsetruetruetruetruefalsefalsefalse
decimalfalsefalsefalsefalsefalsefalsefalsetruetruetruefalsefalsefalse
stringfalsefalsefalsefalsefalsefalsetruetruetruetruefalsefalsefalse
varcharfalsefalsefalsefalsefalsefalsetruetruetruetruefalsefalsefalse
tsfalsefalsefalsefalsefalsefalsefalsefalsetruetruetruefalsefalse
datefalsefalsefalsefalsefalsefalsefalsefalsetruetruefalsetruefalse
binaryfalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsetrue

注:由于表格比较大,这里对一些比较长的字符串进行缩写,ts是timestamp的缩写,bl是boolean的缩写,sl是smallint的缩写,dm是decimal的缩写,vc是varchar的缩写,ba是binary的缩写。

  • 任何整数类型都可以隐式地转换为一个范围更广的类型,如TINYINT可以转换成INT,INT可以转换成BIGINT。
  • 所有整数类型、FLOAT和STRING类型都可以隐式地转换成DOUBLE。
  • TINYINT、SMALLINT、INT都可以转换为FLOAT。
  • BOOLEAN类型不可以转换为任何其它的类型。

使用CAST操作显示进行数据类型转换:

  • 例如CAST('1' AS INT)将把字符串'1' 转换成整数1;如果强制类型转换失败,如执行CAST('X' AS INT),表达式返回空值 NULL。
  • 对于BINARY类型的数据,只能将BINARY类型的数据转换成STRING类型。如果你确信BINARY类型数据是一个数字类型(a number),这时候你可以利用嵌套的cast操作,比如a是一个BINARY,且它是一个数字类型,那么你可以用下面的查询:
    SELECT (cast(cast(a as string) as double)) from src;
  • 对于Date类型的数据,只能在Date、Timestamp以及String之间进行转换。下表将进行详细的说明:
    有效的转换	                结果
    cast(date as date)	        返回date类型
    cast(timestamp as date)	    timestamp中的年/月/日的值是依赖与当地的时区,结果返回date类型
    cast(string as date)	    如果string是YYYY-MM-DD格式的,则相应的年/月/日的date类型的数据将会返回;但如果string不是YYYY-MM-DD格式的,结果则会返回NULL。
    cast(date as timestamp)	    基于当地的时区,生成一个对应date的年/月/日的时间戳值
    cast(date as string)	    date所代表的年/月/日时间将会转换成YYYY-MM-DD的字符串。

4. 文件格式

  • TEXTFILE //文本,默认值
  • SEQUENCEFILE // 二进制序列文件
  • RCFILE //列式存储格式文件 Hive0.6以后开始支持
  • ORC //列式存储格式文件,比RCFILE有更高的压缩比和读写效率,Hive0.11以后开始支持
  • PARQUET //列式存储格式文件,Hive0.13以后开始支持
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-12 16:40:01  更:2021-08-12 16:42:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:46:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码