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 五,理解运营商和全球网络 六ÿ…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...