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 五,理解运营商和全球网络 六ÿ…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
