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 五,理解运营商和全球网络 六ÿ…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...
文件上传漏洞防御全攻略
要全面防范文件上传漏洞,需构建多层防御体系,结合技术验证、存储隔离与权限控制: 🔒 一、基础防护层 前端校验(仅辅助) 通过JavaScript限制文件后缀名(白名单)和大小,提…...
C++中vector类型的介绍和使用
文章目录 一、vector 类型的简介1.1 基本介绍1.2 常见用法示例1.3 常见成员函数简表 二、vector 数据的插入2.1 push_back() —— 在尾部插入一个元素2.2 emplace_back() —— 在尾部“就地”构造对象2.3 insert() —— 在任意位置插入一个或多个元素2.4 emplace() —— 在任意…...
