Hive复杂类型的导入

Hive/Impala 复杂类型使用 Complex types 主要是在impala中使用复杂类型(array,struct,map),作为测试所以需要hive。具体过程: 创建hive表1 编写本地数据文件,导入数据 创建hive表2,存储为parquet(这样才能在impala中使用),从表1导入到表2 cloudera impala有不同的example提供,可参考 但其中唯有一点没有说清楚:即在第二部中,本地文件的编写,如果嵌套层级很深,如何写... 阅读详情

  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或timestamp
    students 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 termination
    private static char[] b = { '-' };// collection item termination
    private static char[] c = { ':' };// map key termination

    public 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中定义的复杂数据类型导入到es中问题总结 避免踩坑:提前把jar包hive home路径下lib中commons-httpclient-3.1.jar也上传到hive中。如果是更新插入:需要加此配置,第一次插入数据不需要加入该配置。在输入框中输入es-hadoop,在version版本处找到和你es相同的版本即可。>,将如下数据导入到ES中。 阅读详情

相关推荐

Hive复杂数据类型使用介绍

Hive 做大数据分析,Hive的数据类型大多与Mysql相似,但是它存在自己独特的复杂类型。

SQL中concat函数和concat_ws函数的区别与联系

SQL中concat函数和concat_ws函数的区别与联系  concat函数   CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字符串。例如:  concat_ws函数   CONCAT_WS(separator, str1, str2,…):它是一个特殊形式的 CONCAT()。第一个参数剩余参数间的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL,返回值也将为 NULL。这个函数会跳过分隔符参数后的任何 NULL

liusuoyin的博客 1548

从零到一:Mapviz实战部署与多源数据可视化全解析

本文详细解析了Mapviz在机器人开发中的实战部署与多源数据可视化应用。从安装配置、卫星地图接入,到GPS轨迹、相机图像与激光雷达点云的融合显示,提供了完整的操作指南。针对ROS1与ROS2环境的选择与迁移给出了明确建议,并分享了坐标系对齐、数据同步等常见问题的避坑方案,帮助开发者高效构建室外机器人的“上帝视角”调试平台。

weixin_29230773的博客 252

Hive复杂数据类型(array类型、map类型、struct类型)

一、array类型建表语句:create table 表名(要素1 类型,要素2 类型,要素3 array) row format delimited fileds terminated by '\t' collection items terminated by ',';

2202_75347029的博客 4785

时序异常检测汇总

时序异常检测

Mark_Australia的博客 1万+

2017全国大学生电子设计大赛B题 | 板球控制系统(四)机械设计相关

转载请注明出处。   转眼2019了诶,可能有些同学又该问了,哇向阳哥,你这个鸽子放的好,转眼大半年了一年都没更新,我也知道啊,说好的源码呢,挖的机械的坑呢?咕咕咕咕我也不想啊,我这不是懒吗!过年有空了,又到了收红包泡妹子玩游戏.......呸,学习准备比赛码代码的时候了,终于有点空闲,于是乎今晚先把机械的大坑填了。     咱话先说在最前面。机械这玩意,靠经验,也考想象力,更要命的还是出了...

王向阳的博客 3万+

hive复杂类型数据详解—array,map,struct

hive复杂数据类型有三种,map,array,struct。本文会详细介绍三种类型数据的建表、查询、相关函数以及与其他数据类型的相互转换。 目录一、简介二、建表语句三、类型构建四、查询array类型map类型struct类型五、与其他数据类型转换将array和map转化为基本数据类型(行转列)基本数据类型转化为array、map(列转行) 一、简介 map 是一种(key-value)键值对类型; array 是一种数组类型,array 中存放相同类型的数据; struct 是一种集合类型。 二、建表语句

weixin_40474941的博客 2万+

PyCharm中Pyvips配置避坑指南:为什么pip安装后import还是报错?

本文详细解析了在PyCharm中配置Pyvips时,即使pip安装成功,import仍报错的根本原因。核心在于Pyvips依赖的libvips原生库未正确配置环境变量。文章提供了从下载libvips、配置Windows系统PATH到PyCharm项目级设置的完整避坑指南,并对比了三种配置策略,帮助开发者彻底解决DLL加载失败问题。

bush的博客 209

hive中复杂数据类型(array,map,struct)讲解

hive复杂数据类型的创建、查询与使用

m0_65095185的博客 3226

LTE网络下的SMS收发(SMS Over SGs方案的详细流程)

关键词: IMS,SMS, LTE, MSC, MME, EPS,eNodeB, SMS Over SGs, SMS Over IMS 2G时代由于采用了比较复杂的CS/PS域架构,所以SMS(短信)作为上个世纪的产物,一直寄居在2G的CS域架构下。看看核心网的配置,其实SMS的收发还是比较复杂的。 介绍下面的信息之前你需要去百度一下这些关键词,这里我只说明比较重要的三个单元 MS 移动终端...

kevin的博客 2万+

基于 YOLO + SAM 的自动图像标注实战

摘要: 本文提出一种基于YOLO检测和SAM分割的自动化数据标注流水线方案,通过YOLO定位目标并生成检测框,再以检测框为提示驱动SAM完成精细分割,最终输出YOLO格式的标注文件。该方案将人工标注升级为半自动流程,显著提升标注效率,尤其适用于多类别、大规模图像的实例级标注需求。代码模块化设计支持模型灵活替换,并集成异常处理与进度可视化功能。虽依赖YOLO检测质量且对小目标存在局限,但作为工程落地方案,可有效降低私有数据集构建成本,适用于工业检测、遥感等场景的冷启动标注。

qq_64366203的博客 1147

Hive中的复杂数据类型 - array、map、struct

Hive中的复杂数据类型,学会如何使用,如何指定字段为struct类型?如何向struct类型的字段中插入数据?如何取出struct字段中的值?

阿年的博客 2410

实战案例:用多智能体系统模拟房地产市场的架构设计

房地产市场是典型的复杂自适应系统:买方纠结“要不要上车”、卖方盘算“挂多少钱能快速成交”、中介忙着“撮合两边赚佣金”、政府琢磨“怎么调政策稳房价”——每一个参与者的微小决策,最终都会汇聚成“房价暴涨”“成交冰点”这样的宏观现象。传统的计量经济学模型(比如线性回归)假设“所有人都是理性人”,但现实中没人能算清所有变量——你可能因为“同事买了学区房”就跟风,也可能因为“怕失业”而放弃买房。这时候,多智能体系统(MAS)

移动开发前沿的博客 1122

hive中的复杂数据类型数据如何导入(array)

创建hive表 create table temp.dws_search_by_program_set_count_his( program_set_id string, click_array array<string>) row format delimited fields terminated by ',' collection items terminat...

weixin_30251829的博客 1000

EtherCAT主站SOEM -- 1 -- SOEM之ethercattype.h文件分析

“ethercattype.h” 文件用于支持 EtherCAT 网络通信,提供了各种类型定义和宏,以便开发者更轻松地开发 EtherCAT 相关应用程序。这些定义包括数据类型、命令类型、状态类型和错误类型,以支持 EtherCAT 通信。根据具体应用需求,还可以调整一些超时和帧长度设置。这些定义用于处理函数调用的结果,如 EC_NOFRAME(没有帧返回)、EC_ERROR(一般错误)、EC_TIMEOUT(请求超时)等。这些定义用于处理 EtherCAT 命令,例如 EC_CMD_APRD(自动递增读取

常驻客栈的博客--嵌入式EtherCAT 2714

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Hive集合数据类型(STRUCK,MAP,ARRAY)

Hive有三种复杂数据类型ARRAY、MAP 和 STRUCT。ARRAY和MAP与Java中的Array和Map类似,而STRUCT与C语言中的Struct类似,它封装了一个命名字段集合,复杂数据类型允许任意层次的嵌套。 案例实操 1) 假设某表有如下一行,我们用JSON格式来表示其数据结构。在Hive下访问的格式为 { "name": "songsong", "friends": ["bingbing" , "lili"] , //列表Array, "childre

Knight 1222

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

hive的复杂数据类型

hive的复杂数据类型: Array(1,2,3,4) 装的数据类型是一样的 Map(‘a’,1,‘b’,c) key的类型一样 Struct(‘a’,1,2,34,4)装的数据是完全混乱的 Array数据类型 1.存放 创建一张存放array数据类型的表 [hadoop@hadoop001 data]$ cat hive_array.txt zhangsan beijing...

whiteblacksheep的博客 1367

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Hive集合数据类型

Hive有三种复杂数据类型ARRAY、MAP 和 STRUCT。ARRAY和MAP与Java中的Array和Map类似,而STRUCT与C语言中的Struct类似,它封装了一个命名字段集合,复杂数据类型允许任意层次的嵌套。 数据类型 描述 语法示例 STRUCT 和c语言中的struct类似,都可以通过...

fczheng的博客 547

sqoop从sqlserver导入数据操作指令及hive创建表过程

sqoop从sqlserver导入数据操作指令及hive创建表过程

鲁边的博客 6810

Hive的复杂数据类型之Array

hive array

zhousishuo 9429

hive sql 两个字段想减_hive学习笔记之二:复杂数据类型

欢迎访问我的GitHubhttps://github.com/zq2599/blog_demos内容:所有原创文章分类和汇总,及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;本篇概览作为《hive学习笔记》的第二篇,前面咱们了解了基本类型,本篇要学习的是复杂数据类型;复杂数据类型一共有四种:ARRAY:数组MAP:键值对STRUCT:命名字段集合UNIONTYPE:从...

weixin_34296646的博客 666

Hive几种数据导入导出的方式

Hive中数据导入导出还是很常用的,下面简单记录一下这几种方式,方便查阅。 数据导入 在将文件中的数据导入都Hive表中的时候,字段的分隔符只有在建表的时候指定,导入的时候无法指定字段分隔符。 本地文件系统导入到Hive hive> load data local inpath '/home/hdfs/user.txt' into table user; 分区表 hive> loa...

gxd520的专栏 423

hive if函数_hive学习笔记之二:复杂数据类型

欢迎访问我的GitHubhttps://github.com/zq2599/blog_demos内容:所有原创文章分类和汇总,及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;本篇概览作为《hive学习笔记》的第二篇,前面咱们了解了基本类型,本篇要学习的是复杂数据类型;复杂数据类型一共有四种:ARRAY:数组MAP:键值对STRUCT:命名字段集合UNIONTYPE:从...

weixin_39752788的博客 269

HIVE数据类型与函数

分桶将整个数据内容按照某列属性值的hash值进行区分,如要安装name属性分为3个桶,就是对name属性值的hash 值对3取摸,按照取模结果对数据分桶。如取模结果为0的数据记录存放到一个文件,取模为1的数据存放到一个文件,取模为2的数据存放到一个文件。通常,一个数据仓库系统,数据总有一个源头,而源由一般是别的应用程序产生的,其目录无法确定,为了方便映射,就可以在hive中用外部表映射。x表示从哪个桶(x-1)开始,y代表分几个桶,也可以理解分x为分子,y为分母,及将表分为y份(桶),取第x份(桶)。

weixin_73756235的博客 1743

Hive数据类型

对于 Hive 的 String 类型相当于数据库的 varchar 类型,该类型是一个可变的字符串,不 过它不能声明其中最多能存储多少个字符,理论上它可以存储 2GB 的字符数。 Hive 有三种复杂数据类型 ARRAY、MAP 和 STRUCT。ARRAY 和 MAP 与 Java 中的 Array 和 Map 类似,而 STRUCT 与 C 语言中的 Struct 类似,它封装了一个命名字段集合, 复杂数据类型允许任意层次的嵌套。 案例实操:假设某表有如下一行,我们用 JSON 格式来...

zhaoxiaoba123的博客 214

Hive-复杂数据类型使用案例

Hive之复杂数据类型-array、map和struct使用案例 复杂数据类型在Hive中使用场景非常多 具体数据类型的详细介绍这里就不说了,官网和博客介绍多的是,这里直接上例子,更直观。 一、array类型 array是数组类型,类似于python中的list类型: array[] = ['aaa','bbb','ccc'] 直接上例子: 1.1 数据格式 说明: name与locations...

zhangfeidianzi的博客 713
上一篇: Hive相关的两个疑问[一]
下一篇: HIVE JDBC任务执行流程
大数据运维
博客等级 码龄18年 26粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值