Hive是大数据体系下ETL、数据预处理、数仓等领域比较重要的组件,应用广泛。博主空闲时间研究一下Hive的数据类型。

1. Hive数据类型组成

  关于Hive的数据类型,官方文档展示的比较全面,关于数据类型的详细说明Hive数据类型,这里总结如下

大类 类型 具体类型
基本类型 数值型 tinyint,smallint,int,bigint,float,double,decimal,numeric
基本类型 字符型 string,varchar,char
基本类型 日期型 timestamp,date,interval
基本类型 其他 boolean,binary
复杂类型 数组 array
复杂类型 映射 map
复杂类型 结构 struct
复杂类型 联合 uniontype

2. 数据导入举例

  这里主要研究具体建表、产生测试数据、导入数据等内容。

2.1. 建表语句

create table test_hive_meta(name string,age int,score float,insert_time string,-- 刚开始定义的是date类型,后面修改为string或timestampstudents struct<sname:string,sage:int>,infos map<int,string>,scores array<float>
)  comment "测试数据表"
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY '-'
MAP KEYS TERMINATED BY ':'
STORED as TEXTFILE ;

2.2. 产生测试数据

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;public class TestMain {private static final String[] names = new String[] { "Laird", "莱尔德", "Lambert", "兰伯特", "Lamont", "拉蒙特", "Lance","兰斯", "Lang", "兰格", "Lange", "兰格", "Langston", "兰斯顿", "Lanny", "兰尼", "Larkin", "拉金", "Larry", "拉里","Clementina", "克莱门蒂娜", "Clementine", "克莱门廷", "Clemmie", "克莱米", "Cleo", "克利奥", "Cleopatra", "克利奥帕特拉","Colette", "科莱特", "Colleen", "科琳", "Conchita", "康奇塔", "Connie", "康妮,康尼", "Constance", "康斯坦斯", "Alvina","阿尔文娜", "Alvira", "阿尔薇拉", "Amabel", "阿玛贝尔", "Amanda", "阿曼达", "Amber", "安伯", "Amelia", "阿米莉亚", "Amity","阿米蒂", "Amor", "埃默", "Amy", "艾米", "Ana", "安娜", "Ware", "韦尔", "Warner", "沃纳", "Warren", "沃伦", "Washburn","沃什伯恩", "Washington", "华盛顿", "Watkins", "沃特金斯", "Watt", "瓦特", "Watts", "沃茨", "Wayne", "韦恩", "Webb", "韦布","Lina", "莉娜", "Linda", "琳达", "Lindy", "琳迪", "Linn", "林", "Linsey", "林赛", "Lisa", "莉萨", "Lisbeth", "莉斯贝思","Lise", "莉萨", "Lisette", "莉塞特", "Liz", "莉兹" };private static Random random = new Random();private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:MM:ss");private static int size = names.length;private static char[] a = { ',' };// fields terminationprivate static char[] b = { '-' };// collection item terminationprivate static char[] c = { ':' };// map key terminationpublic static void main(String[] args) {try {File file = new File("./data.txt");if (!file.exists()) {file.createNewFile();}FileWriter fw = new FileWriter(file.getAbsoluteFile());BufferedWriter bw = new BufferedWriter(fw);for (int i = 0; i < 100; i++) {bw.write(gen1Line());}bw.close();System.out.println("Done");} catch (IOException e) {e.printStackTrace();}}private static String gen1Line() {StringBuffer line = new StringBuffer();line.append(names[random.nextInt(size)]);line.append(a);line.append(random.nextInt(100));line.append(a);line.append(random.nextDouble() * 10);line.append(a);line.append(sdf.format(new Date()));line.append(a);line.append(names[random.nextInt(size)]);line.append(b);line.append(random.nextInt(100));line.append(a);for (int i = 0; i < 10; i++) {line.append(random.nextInt(100));line.append(c);line.append(names[random.nextInt(size)]);line.append(b);}line.append(random.nextInt(100));line.append(c);line.append(names[random.nextInt(size)]);line.append(a);for (int i = 0; i < 10; i++) {line.append(random.nextDouble() * 10);line.append(b);}line.append(random.nextDouble() * 10);line.append("\n");return line.toString();}
}

2.3. 导入数据测试

-- 导入数据
load data local inpath "/home/data.txt" into table test_hive_meta;-- 为了便于查看导入数据结果,打开列显示
set hive.cli.print.header=true;
set hive.cli.print.row.to.vertical=true;
set hive.cli.print.row.to.vertical.num=1;

2.4. 查看导入结果

-- 查询
select * from test_hive_meta limit 1 ;-- 结果
name    age score   insert_time students    infos   scores
Cleopatra   11  0.28206065  2018-14-11 17:08:15 {"sname":"阿玛贝尔","sage":15}  {41:"Linda",82:"康斯坦斯",94:"艾米",81:"Washington",23:"兰尼",93:"Lise",36:"沃纳",70:"Lise",39:"克利奥帕特拉",35:"Lambert",67:"Colleen"}    [1.8265022,6.058134,7.794176,4.096524,8.195735,5.866253,0.75852406,6.835354,2.7134678,8.078223,6.275408]

3. 采坑

  1. 关于date数据类型
    发现使用date数据类型在导入的时候存在问题,刚开始使用date类型,导入类型为long,结果显示为null;后面导入数据修改为”yyyy-MM-dd HH:mm:ss”之后,结果仍为null。后面修改为string类型,导入数据为格式化的日期类型,或者修改为timestamp类型,导入类型为long。

4. 参考文章

  1. Apache Hive Document
  2. hive collection data type
  3. Hive中导入时间格式的数据显示为null

Hive复杂类型的导入相关推荐

  1. hive mysql类型,(二)Hive数据类型、数据定义、数据操作和查询

    1.数据类型 1.1 基本数据类型Hive数据类型长度例子TINYINT1byte有符号整数20 SMALINT2byte有符号整数20 INT4byte有符号整数20 BIGINT8byte有符号整 ...

  2. Hive几种数据导入方式

    2019独角兽企业重金招聘Python工程师标准>>> 1.从本地文件系统中导入数据到hive表 (1)数据准备(/home/sopdm/test.dat): 1,wyp,25,13 ...

  3. sqoop动态分区导入mysql,使用sqoop import从mysql往hive含分区表中导入数据的一些注意事项...

    先看下面这条语句,它实现的功能是将特定日期的数据从mysql表中直接导入hive $ sqoop import \ --connect jdbc:mysql://192.168.xx.xx:3306/ ...

  4. 【clickhouse】使用waterdrop将Hive中的数据导入ClickHouse

    1.概述 转载:使用waterdrop将Hive中的数据导入ClickHouse 这里仅仅自己学习用. 前言 最近有一个需求需要把hive的数据同步到clickhouse,而且数据量还比较大,所以使用 ...

  5. Hive的4种导入和3种导出方式

    接上篇文章<Hive集群安装> 一.使用beeline连接hive 1. 启动Hadoop:start-dfs.sh.start-yarn.sh [root@node4 hadoop-2. ...

  6. Hive 基本语法操练(四):Hive 复合类型

    hive语法中主要提供了以下复合数据类型: 1)Structs: structs内部的数据可以通过DOT(.)来存取.例如,表中一列c的类型为STRUCT{a INT; b INT},我们可以通过c. ...

  7. bigint hive java类型_三十、Hive的数据类型以及常用的属性配置

    上篇文章我们在服务器上部署了Hive并将它的Metastore存储在了MySQL上,本文介绍一下Hive的数据类型以及常用的一些属性配置.关注专栏<破茧成蝶--大数据篇>,查看更多相关的内 ...

  8. HIVE入门_3_数据导入导出

    数据导出方式 导出到本地文件系统 导出到HDFS上 导出到HIVE的另一个表中 数据导入方式 从本地文件导入 从HDFS上导入 创建表后从别的表查询出的相应数据导入 创建表的时候通过别的表查询记录插入 ...

  9. 如何将不同类型数据导入Elaticsearch中?

    Elaticsearch的原理明白了以后,手头有很多不同类型的数据,如:  1)单条数据,如程序中自己构造的JSON格式数据:  2)符合Elasticsearch索引规范的批量数据:  3)日志文件 ...

最新文章

  1. python mysql 驱动安装
  2. 机器学习实战:朴素贝叶斯算法在新闻文本数据上的分类表现
  3. Android - toolbar navigation 样式
  4. videoJS如何用
  5. Python爬虫入门教程 1-100 CentOS环境安装
  6. Python正则表达式中的贪婪和非贪婪
  7. 如何测量代码运行时间
  8. 怎么在服务器跑sql文件,服务器mysql数据库如何运行脚本
  9. SQLite数据类型详解
  10. 那些APP活动中的刷量与作弊
  11. 观察者模式和模拟wow插件的例子
  12. 强学习器------随机森林
  13. python大一期末考试_python期末考试复习试卷
  14. 如何重新修改VHDX硬盘大小?
  15. HTTP1.1协议中文版-RFC2616
  16. Java工程师修炼之道! | 送10本书籍
  17. 垂直起降多旋翼调研资料
  18. 湖北出台禁犬令PHP 新闻,湖北省拟出台最严禁狗令,禁止饲养包括中华田园犬在内的多种狗狗...
  19. 访问学者申请德国签证如果丢失了怎么办?
  20. 关于蓝牙的知识,蓝牙5.0和蓝牙5.2

热门文章

  1. 2022北京老博会/北京养老展/北京智慧养老展/老年用品展
  2. 使用JavaCV实现读取视频信息及自动截取封面图
  3. 温故知新(八)——永磁电机容错控制
  4. Java进阶:File类
  5. 新生儿(早产)婴儿护理行业调研报告 - 市场现状分析与发展前景预测
  6. 《痞子衡嵌入式半月刊》 第 44 期
  7. 在PPT 2010“切换”效果变少,该如何处理?
  8. 内网linux 安装mysql
  9. 即大数据后-贵阳能否成为区块链的机遇之城?
  10. 一文看懂阿里云端数据库配置+Navicat premium安装