Hive复杂类型的导入
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. 采坑
- 关于date数据类型
发现使用date数据类型在导入的时候存在问题,刚开始使用date类型,导入类型为long,结果显示为null;后面导入数据修改为”yyyy-MM-dd HH:mm:ss”之后,结果仍为null。后面修改为string类型,导入数据为格式化的日期类型,或者修改为timestamp类型,导入类型为long。
4. 参考文章
- Apache Hive Document
- hive collection data type
- Hive中导入时间格式的数据显示为null
Hive复杂类型的导入相关推荐
- hive mysql类型,(二)Hive数据类型、数据定义、数据操作和查询
1.数据类型 1.1 基本数据类型Hive数据类型长度例子TINYINT1byte有符号整数20 SMALINT2byte有符号整数20 INT4byte有符号整数20 BIGINT8byte有符号整 ...
- Hive几种数据导入方式
2019独角兽企业重金招聘Python工程师标准>>> 1.从本地文件系统中导入数据到hive表 (1)数据准备(/home/sopdm/test.dat): 1,wyp,25,13 ...
- sqoop动态分区导入mysql,使用sqoop import从mysql往hive含分区表中导入数据的一些注意事项...
先看下面这条语句,它实现的功能是将特定日期的数据从mysql表中直接导入hive $ sqoop import \ --connect jdbc:mysql://192.168.xx.xx:3306/ ...
- 【clickhouse】使用waterdrop将Hive中的数据导入ClickHouse
1.概述 转载:使用waterdrop将Hive中的数据导入ClickHouse 这里仅仅自己学习用. 前言 最近有一个需求需要把hive的数据同步到clickhouse,而且数据量还比较大,所以使用 ...
- Hive的4种导入和3种导出方式
接上篇文章<Hive集群安装> 一.使用beeline连接hive 1. 启动Hadoop:start-dfs.sh.start-yarn.sh [root@node4 hadoop-2. ...
- Hive 基本语法操练(四):Hive 复合类型
hive语法中主要提供了以下复合数据类型: 1)Structs: structs内部的数据可以通过DOT(.)来存取.例如,表中一列c的类型为STRUCT{a INT; b INT},我们可以通过c. ...
- bigint hive java类型_三十、Hive的数据类型以及常用的属性配置
上篇文章我们在服务器上部署了Hive并将它的Metastore存储在了MySQL上,本文介绍一下Hive的数据类型以及常用的一些属性配置.关注专栏<破茧成蝶--大数据篇>,查看更多相关的内 ...
- HIVE入门_3_数据导入导出
数据导出方式 导出到本地文件系统 导出到HDFS上 导出到HIVE的另一个表中 数据导入方式 从本地文件导入 从HDFS上导入 创建表后从别的表查询出的相应数据导入 创建表的时候通过别的表查询记录插入 ...
- 如何将不同类型数据导入Elaticsearch中?
Elaticsearch的原理明白了以后,手头有很多不同类型的数据,如: 1)单条数据,如程序中自己构造的JSON格式数据: 2)符合Elasticsearch索引规范的批量数据: 3)日志文件 ...
最新文章
- python mysql 驱动安装
- 机器学习实战:朴素贝叶斯算法在新闻文本数据上的分类表现
- Android - toolbar navigation 样式
- videoJS如何用
- Python爬虫入门教程 1-100 CentOS环境安装
- Python正则表达式中的贪婪和非贪婪
- 如何测量代码运行时间
- 怎么在服务器跑sql文件,服务器mysql数据库如何运行脚本
- SQLite数据类型详解
- 那些APP活动中的刷量与作弊
- 观察者模式和模拟wow插件的例子
- 强学习器------随机森林
- python大一期末考试_python期末考试复习试卷
- 如何重新修改VHDX硬盘大小?
- HTTP1.1协议中文版-RFC2616
- Java工程师修炼之道! | 送10本书籍
- 垂直起降多旋翼调研资料
- 湖北出台禁犬令PHP 新闻,湖北省拟出台最严禁狗令,禁止饲养包括中华田园犬在内的多种狗狗...
- 访问学者申请德国签证如果丢失了怎么办?
- 关于蓝牙的知识,蓝牙5.0和蓝牙5.2