Hive数仓操作(四)
一、Hive 创建表案例一(ARRAY数组类型)
1. 准备数据文件
首先,准备一个名为 stu2.txt
的文件,文件内容示例如下:
1001 Alice fish,cat
1002 Bob dog,rabbit
1003 Charlie bird
注意:
- 确保字段之间使用制表符(
\t
)分隔。 - 数组元素之间使用逗号(
,
)分隔。
2. 上传文件到 HDFS
使用以下命令将 stu2.txt
文件上传到 HDFS 指定目录:
hadoop fs -put stu2.txt /user/root/a001/
3. 创建 Hive 数据库
为了管理数据,可以创建一个名为 stu
的数据库(如果还未创建):
CREATE DATABASE IF NOT EXISTS stu;
4. 使用数据库
切换到刚创建的 stu
数据库:
USE stu;
5. 创建 Hive 表
在 Hive 中创建表 stu03
,用来存储数据:
CREATE TABLE stu03 (id INT,name STRING,hobby ARRAY<STRING>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ',';
- ROW FORMAT DELIMITED: 指定表的行格式为分隔格式。这意味着行中的各个字段是用特定的分隔符来分隔的。
- FIELDS TERMINATED BY ‘\t’: 指定字段之间的分隔符为制表符(Tab)。这意味着在数据文件中,各个字段是通过制表符来分开。
- COLLECTION ITEMS TERMINATED BY ‘,’: 指定数组类型字段(在这里是
hobby
)中的各个元素是用逗号分隔的。这意味着在插入数据时,例如hobby
字段的值可以为fish,cat
,而这两个爱好是通过逗号来分隔的。
6. 加载数据到表中
将 HDFS 中的 stu2.txt
文件中的数据加载到 stu03
表中:
LOAD DATA INPATH '/user/root/a001/stu2.txt' INTO TABLE stu03;
7. 测试查询数据
查询所有数据
SELECT * FROM stu03;
查询特定字段和处理可能缺失的数组元素
SELECT id, name, hobby[0] AS first_hobby, hobby[1] AS second_hobby, NVL(hobby[2], '没有') AS third_hobby
FROM stu03;
查询数组元素个数
SELECT id, name, hobby, SIZE(hobby) AS hobby_count
FROM stu03;
8. 多次查询的示例
在同一条查询中返回多个字段和计算结果:
SELECT a.*, SIZE(hobby) AS n, hobby[0] AS h1, hobby[1] AS h2, NVL(hobby[2], 'none') AS h3, NVL(hobby[3], '') AS h4
FROM stu03 a;
9. 插入新数据
向 stu03
表中插入一条新数据:
INSERT INTO stu03
VALUES (1005, 'Tom', ARRAY('fish', 'mouse'));
会在/user/hive/warehouse/stu.db/stu03/
目录追加生成小文件,如000000_0
,一般不使用插入操作。
二、Hive 创建表案例二(MAP类型)
1. 数据文件
假设有一个名为 stu04.txt
的文件:
123|华为Mate50|id:1111,token:2222,user_name:zhangsan1
456|华为Mate60|id:1113,token:2224,user_name:zhangsan3
89|小米14|id:1114,token:2225,user_name:zhangsan4
1235|小米13|id:1115,token:2226,user_name:zhangsan5
4562|OPPO A5|id:1116,token:2227,user_name:zhangsan6
2. 创建表
接下来,创建一个包含 map
类型数据的 Hive 表。注意修正语法和格式错误:
DROP TABLE IF EXISTS stu03;CREATE TABLE stu03 (sku_id STRING COMMENT '商品id',sku_name STRING COMMENT '商品名称',state_map MAP<STRING, STRING> COMMENT '商品状态信息'
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':';
1). ROW FORMAT DELIMITED
- 表示该表的行格式是分隔的。也就是说,数据行中的每个字段都是用特定的字符分隔开的。
2). FIELDS TERMINATED BY ‘|’
- 指定字段(列)之间的分隔符。在这个例子中,字段之间用
|
(竖线)来分隔。 - 例如,如果一行数据是
123|华为Mate60|id:1111,token:2222,user_name:zhangsan1
,那么这个行的三个字段分别是123
、华为Mate60
和id:1111,token:2222,user_name:zhangsan1
。
3). COLLECTION ITEMS TERMINATED BY ‘,’
- 这一部分指定了集合类型中的元素(如数组或映射)之间的分隔符。在这个例子中,集合中的元素用
,
(逗号)来分隔。 - 例如,如果某个字段的值是
id:1111,token:2222,user_name:zhangsan1
,那么这个字符串被看作一个集合,元素之间用逗号分隔。
4). MAP KEYS TERMINATED BY ‘:’
- 这一部分指定了映射类型(即键值对)中键和值之间的分隔符。在这个例子中,键和值用
:
(冒号)来分隔。 - 例如,如果某个字段的值是
id:1111
,那么这里的键是id
,值是1111
。
示例
结合这些定义,假设我们有以下一行数据:
123|华为Mate10|id:1111,token:2222,user_name:zhangsan1
- 这行数据表示:
- 第一个字段(商品 ID)是
123
- 第二个字段(商品名称)是
华为Mate60
- 第三个字段是一个映射,包含三个键值对:
- 键
id
的值是1111
- 键
token
的值是2222
- 键
user_name
的值是zhangsan1
- 键
- 第一个字段(商品 ID)是
3. 加载数据
将数据文件加载到刚创建的表中:
LOAD DATA LOCAL INPATH '/opt/module/datas/stu04.txt' INTO TABLE stu03;
4. 查询数据
示例查询1
SELECT sku_id,sku_name,state_map
FROM stu03;
解析
sku_id
: 选择 SKU 的 ID。sku_name
: 选择 SKU 的名称。state_map
: 选择整个state_map
列,这将返回该列的所有内容(键值对)。
结果(只展示了三行)
sku_id | sku_name | state_map |
---|---|---|
1 | 华为Mate50 | {“id”:“1111”, “token”:“2222”, “user_name”:“zhangsan”} |
2 | 华为Mate60 | {“id”:“1113”, “token”:“2224”, “user_name”:“zhangsan2”} |
3 | 小米14 | {“id”:“1114”, “token”:“2225”, “user_name”:“zhangsan3”} |
示例查询2:直接提取特定键
SELECT sku_id,sku_name,state_map['id'] AS id,state_map['token'] AS token,MAP_KEYS(state_map) AS keys,MAP_VALUES(state_map) AS values,SIZE(state_map) AS number_of_entries
FROM stu03;
解析
state_map['id'] AS id
: 从state_map
中提取id
。state_map['token'] AS token
: 从state_map
中提取token
。MAP_KEYS(state_map) AS keys
: 获取state_map
中所有的键。MAP_VALUES(state_map) AS values
: 获取state_map
中所有的值。SIZE(state_map) AS number_of_entries
: 获取state_map
中的键值对数量。
结果
sku_id | sku_name | id | token | keys | values | number_of_entries |
---|---|---|---|---|---|---|
1 | 华为Mate50 | 1111 | 2222 | [“id”, “token”, “user_name”] | [“1111”, “2222”, “zhangsan”] | 3 |
2 | 华为Mate60 | 1113 | 2224 | [“id”, “token”, “user_name”] | [“1113”, “2224”, “zhangsan2”] | 3 |
3 | 小米14 | 1114 | 2225 | [“id”, “token”, “user_name”] | [“1114”, “2225”, “zhangsan3”] | 3 |
示例查询3:使用 MAP_KEYS
和索引
SELECT sku_id,sku_name,MAP_KEYS(state_map)[0] AS first_key,MAP_VALUES(state_map)[0] AS first_value,MAP_KEYS(state_map) AS keys,MAP_VALUES(state_map) AS values,SIZE(state_map) AS number_of_entries
FROM stu03;
解析
MAP_KEYS(state_map)[0] AS first_key
: 获取state_map
中的第一个键。MAP_VALUES(state_map)[0] AS first_value
: 获取state_map
中的第一个值。MAP_KEYS(state_map) AS keys
: 获取所有键。MAP_VALUES(state_map) AS values
: 获取所有值。SIZE(state_map) AS number_of_entries
: 获取键值对数量。
结果
根据相同的 state_map
内容,查询结果将显示如下:
sku_id | sku_name | first_key | first_value | keys | values | number_of_entries |
---|---|---|---|---|---|---|
1 | 华为Mate50 | id | 1111 | [“id”, “token”, “user_name”] | [“1111”, “2222”, “zhangsan”] | 3 |
2 | 华为Mate60 | id | 1113 | [“id”, “token”, “user_name”] | [“1113”, “2224”, “zhangsan2”] | 3 |
3 | 小米14 | id | 1114 | [“id”, “token”, “user_name”] | [“1114”, “2225”, “zhangsan3”] | 3 |
相关文章:

Hive数仓操作(四)
一、Hive 创建表案例一(ARRAY数组类型) 1. 准备数据文件 首先,准备一个名为 stu2.txt 的文件,文件内容示例如下: 1001 Alice fish,cat 1002 Bob dog,rabbit 1003 Charlie bird注意: …...

《C++跨平台开发:突破界限,释放无限可能》
在当今的软件开发领域,跨平台开发已成为一种重要趋势。它允许开发者编写一次代码,然后在多个不同的操作系统和硬件平台上运行,极大地提高了开发效率和软件的可扩展性。而 C作为一种强大的编程语言,也具备实现跨平台开发的能力。本…...

速盾:免备案服务器?
速盾是一家提供网络安全服务的公司,其主要产品包括CDN加速、WEB防护、WAF、DDoS防护等。在网站建设过程中,选择一个合适的服务器是非常重要的一步。传统的服务器需要备案,涉及到较多的流程和审批时间,给网站运营带来了一定的麻烦。…...

Electron获取nodejs和chrome版本信息
Electron获取nodejs和chrome版本信息 环境: electron: 30.1.1 nodejs: 20.14.0代码 $ tree . --- index.html --- index.js --- package.jsonindex.html <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>H…...

【React】setState 批量更新
setState 批量更新的过程 React 的 setState 调用是异步的。为了性能原因,React 会将多个 setState 调用合并成一次批量更新。具体过程如下: 1)React 先将调用的每个 setState 所产生的更新对象存储在一个队列中。 2)在所有的同步…...

微信小程序开发日记第二天
坚持在各个平台更新自己写小程序的心得体会,在百度贴吧和csdn更新自己的小程序日记,同时也是个体不断地对于云技术的开发和成长,进行提升!不断地将开源开放创新思维运用到自己的小程序当中,小程序制作的关键就是&#…...

如果您忘记了 Apple ID 和密码,按照指南可重新进入您的设备
即使您的 iPhone 或 iPad 由于各种原因被锁定或禁用,也可以使用 iTunes、“查找我的”、Apple 支持和 iCloud 解锁您的设备。但是,此过程需要您的 Apple ID 和密码来验证所有权并移除激活锁。如果您忘记了 Apple ID 和密码,请按照我们的指南重…...

Top4免费音频剪辑软件大比拼,2024年你选哪一款?
现在我们生活在一个数字化的时代,音频内容对我们来说很重要。不管是给自己拍的视频配背景音乐、整理开会时的录音,还是自己写歌,有个好用的音频剪辑软件都特别重要。今天,我要给大家介绍几款特别好用的音频剪辑软件免费的…...

基于SSM的电影院售票系统设计与实现
文未可获取一份本项目的java源码和数据库参考。 前言 近些年的电影在人们文娱活动中占据重要地位,另外,由于人们的生活越来越富有,越来越多的人们不再选择在家里看电影,而是选择去电影院看电影。但是,以往的售票方式是…...

uniapp 必须掌握的细节
1.使用watch实现实时监控的效果 例如:实时监测手机号码的示例 // 实时监测手机号码 watch(() > UserRegisterForm.value.phone, (newPhone) > {// 简单的手机号码正则表达式验证const phoneRegex /^1[3-9]\d{9}$/;tips.value.tipPhone !phoneRegex.test(n…...

JavaWeb——Vue组件库Element(3/6):常见组件:Dialog对话框、Form表单(介绍、使用、实际效果)
目录 Dialog对话框 介绍 使用 实际效果 Form表单 介绍 使用 实际效果 Dialog对话框 介绍 Dialog对话框:在保留当前页面状态的情况下,告知用户并承载相关操作。 Dialog 对话框组件可以在保留当前页面信息的状态下弹出一个对话框,并…...

一个月学会Java 第2天 认识类与对象
Day2 认识类与对象 第一章 初识类 经过一个程序的编写,应该对程序的结构有点好奇了吧,如果你有基础,接下来的肯定非常的易懂,如果你没有基础也没有关系,反复琢磨一下也就懂了😆 我们来重复一下第一个程序 …...

【WRF数据准备】MODIS静态地理数据下载及制备
【WRF数据准备】MODIS静态地理数据下载及制备 MODIS数据介绍数据下载数据拼接MRT工具介绍基于MRT软件完成数据拼接 格式转换:tif文件转二进制格式编写INDEX修改GEOGRID.TBL以及namelist.wps修改GEOGRID.TBL修改namelist.wps 参考 MODIS数据介绍 MODIS-MCD12Q1 v061…...

MySQL数据库——索引
目录 什么是索引(Index)? 怎样加索引? 索引的特点 索引类型 主键索引(Primary Key) 辅助索引(二级索引) 聚集索引和非聚集索引 聚集索引 非聚集索引 单列索引和联合索引 单列索引 联合索引 创…...

【SpringCloud】服务注册/服务发现-Eureka
服务注册/服务发现-Eureka 1. 背景1.1 问题描述1.2 解决思路1.3 什么是注册中⼼1.4 CAP理论1.5 常⻅的注册中⼼ 2. Eureka 介绍3. 搭建Eureka Server 1. 背景 1.1 问题描述 上个章节的例⼦中可以看到, 远程调⽤时, 我们的URL是写死的 String url "http://127.0.0.1:90…...

让你的Github Profile高大时尚!
目录 前言 正文 GitHub Profile 特点: GitHub Actions 核心概念: 应用场景: RSS RSS的主要特点: 使用场景: RSS的工作原理: 关于Github Readme Card 关于Github贡献的3D图 关于个人最新博文的获取 关于代码…...

ElasticSearch备考 -- Multi match
一、题目 索引task有3个字段a、b、c,写一个查询去匹配这三个字段为mom,其中b的字段评分比a、c字段大一倍,将他们的分数相加作为最后的总分数 二、思考 通过题目要求对多个字段进行匹配查询,可以考虑multi match、bool query操作。…...

滚雪球学Oracle[2.5讲]:数据库初始化配置
全文目录: 前言一、配置文件的高级参数设置1.1 open_cursors:游标打开数量限制案例演示 1.2 session_cached_cursors:会话缓存游标数量案例演示 1.3 pga_aggregate_target与sga_target:内存分配优化案例演示 二、内存管理模式的选…...

Java - Spring框架 (ios+aop)
Spring 简介 Spring框架是为了解决企业应用开发的复杂性,使用基本的JavaBean代替EJB,并提供了更多的企业应用功能,Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架。 Spring优点 Spring是一个开源的免费的框架(容器) Spring是一…...

计算机网络(十) —— IP协议详解,理解运营商和全球网络
目录 一,关于IP 1.1 什么是IP协议 1.2 前置认识 二,IP报头字段详解 三,网段划分 3.1 IP地址的构成 3.2 网段划分 3.3 子网划分 3.4 IP地址不足问题 四,公网IP和私有IP 五,理解运营商和全球网络 六ÿ…...

速速收藏!这些2024年上映的AI电影与短剧,申请加入你的国庆假期宅家计划!
2024年上映的AI电影 01 科幻惊悚电影《致命AI Afraid》 导演:克里斯韦兹上映日期:2024-08-30(美国)片长:84分钟剧情简介:Curtis一家被选中去测试一种革新性的居家设备:数字家庭助手AIA,包括各种感应设备和摄像头等,…...

23.2 prometheus为k8s做的4大适配工作
本节重点介绍 : k8s监控中的4大采集类型总结prometheus为k8s监控做的4大适配工作 k8s关注指标分析 在监控每个细分的领域时,我们都要先思考下到底需要关注哪些方面的指标。k8s中组件复杂,我们主要专注的无外乎四大块指标:容器基础资源指标…...

1、如何查看电脑已经连接上的wifi的密码?
在电脑桌面右下角的如下位置:双击打开查看当前连接上的wifi的名字:ZTE-kfdGYX-5G 按一下键盘上的win R 键, 输入【cmd】 然后,按一下【回车】。 输入netsh wlan show profile ”wifi名称” keyclear : 输入完成后,按一下回车&…...

循环链表和双向链表
一、 带尾指针的循环链表的合并 算法步骤: p存表头结点——pTa->next;Tb表头连接到Ta表尾——Ta->nextTb->next->next;释放Tb表头结点——delate Tb->next;修改指针——Tb->nextp; LinkList Connect(LinkList Ta,LinkList Tb){pTa->next; …...

【Linux庖丁解牛】—Linux基本指令(中)!
🌈个人主页:秋风起,再归来~🔥系列专栏: Linux庖丁解牛 🔖克心守己,律己则安 目录 1、rmdir与rm指令 2、man指令 3、cp指令 4、mv指令 5、cat与tac指令 6、重定向 7、more指令 8、…...

【电路笔记】-运算放大器微分器
运算放大器微分器 文章目录 运算放大器微分器1、概述2、运算放大器微分器的表示2.1 理想微分器2.2 输出公式2.3 交流分析3、实际微分器3.1 理想配置的局限性3.2 带串联电阻的伪微分器3.3 具有并联电容器的伪微分器4、总结1、概述 在我们之前关于积分器运算放大器的文章中,我们…...

【Unity踩坑】使用内购时获取Google Play license key
在Unity中使用了IAP(内购)后,需要设置Google Play license key。 这个key需要在Google Play Console中(https://play.google.com/console),找到相应的应用,在左侧“创收设置”里可以找到license…...

华为OD机试真题-数组拼接-2024年OD统一考试(E卷)
最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客 每一题都含有详细的解题思路和代码注释,精选c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,发现新题及时跟新。 题目描述 现在有多组整数数…...

【Android 14源码分析】Activity启动流程-2
忽然有一天,我想要做一件事:去代码中去验证那些曾经被“灌输”的理论。 – 服装…...

ubuntu 18.04 cuda 11.01 gpgpu-sim 裸机编译
1,环境 ubuntu 18.04 x86_64 cuda 11.01 gpgpu-sim master commit 90ec3399763d7c8512cfe7dc193473086c38ca38 2,预备环境 一个比较新的 ubuntu 18.04,为了迎合 cuda 11.01 的版本需求 安装如下软件: sudo apt-get instal…...