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 五,理解运营商和全球网络 六ÿ…...
如何用VR-Reversal将3D VR视频高效转换为普通2D格式:完整实用指南
如何用VR-Reversal将3D VR视频高效转换为普通2D格式:完整实用指南 【免费下载链接】VR-reversal VR-Reversal - Player for conversion of 3D video to 2D with optional saving of head tracking data and rendering out of 2D copies. 项目地址: https://gitcod…...
Python plt.imshow参数实战:从数据可视化到图像处理
1. 从零认识plt.imshow:你的图像处理瑞士军刀 第一次接触plt.imshow时,我完全被它强大的功能震撼到了。这个看似简单的函数,实际上就像一把瑞士军刀,能搞定从数据可视化到专业图像处理的各类任务。简单来说,plt.imshow…...
智能识别整理会议内容,让开会后怎么列待办更清晰更省事
作为经常跑客户、开会议的销售,此前我常被整理沟通内容、梳理待办的工作困扰,不仅耗时久,还容易漏记客户需求、搞错时间节点。结合大半年的实测体验,整理出一套AI整理方法,能快速清晰梳理待办,节省大量时间…...
Elk内存管理深度解析:如何在100字节RAM上运行JavaScript
Elk内存管理深度解析:如何在100字节RAM上运行JavaScript 【免费下载链接】elk A low footprint JavaScript engine for embedded systems 项目地址: https://gitcode.com/gh_mirrors/elk/elk Elk是一个为嵌入式系统设计的超轻量级JavaScript引擎,…...
如何用Win11Debloat轻松优化Windows系统:完整指南
如何用Win11Debloat轻松优化Windows系统:完整指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and custom…...
C++中的重载、覆盖、隐藏介绍
前几天面试时被问及C中的覆盖、隐藏,概念基本答不上来,只答了怎么用指针实现多态,也还有遗漏。最终不欢而散。回来后在网上查找学习了一番,做了这个总结。其中部分文字借用了别人的博客,望不要见怪。概念一、重载&…...
机器人遥测系统设计:从数据采集到可视化监控的工程实践
1. 项目概述:从开源代码仓库到可观测性实践最近在梳理一些开源机器人项目时,遇到了一个名为jizb880/openclaw_telemetry的仓库。乍一看,这个标题由两部分组成:一个可能是作者的用户名jizb880,以及一个极具指向性的项目…...
晶圆为何是圆形而芯片是方形?揭秘半导体制造的工程智慧
1. 项目概述:一个看似简单却充满工程智慧的谜题“为什么晶圆是圆的,而芯片是方的?” 这个问题,乍一听像是半导体行业里一个有趣的脑筋急转弯,但它背后却串联起了从材料科学、物理化学到精密制造、经济学乃至数学几何的…...
基于RAG的LLM知识库构建:从智能分块到检索增强生成实战
1. 项目概述:一个为大型语言模型量身定制的知识库构建工具如果你和我一样,经常和大型语言模型打交道,无论是用它们来辅助编程、分析文档,还是构建问答系统,那你一定遇到过这个核心痛点:如何让模型精准地理解…...
告别Web Client:当ESXi主机SSH连不上时,我用这10条esxcli命令完成了紧急修复
告别Web Client:当ESXi主机SSH连不上时,我用这10条esxcli命令完成了紧急修复 凌晨三点,数据中心告警铃声刺破夜空。一台承载着核心业务的ESXi主机突然失联,vSphere Client和Web界面均无法访问,SSH连接也毫无响应。面对…...
