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华为Mate60id: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

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_idsku_namestate_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_idsku_nameidtokenkeysvaluesnumber_of_entries
1华为Mate5011112222[“id”, “token”, “user_name”][“1111”, “2222”, “zhangsan”]3
2华为Mate6011132224[“id”, “token”, “user_name”][“1113”, “2224”, “zhangsan2”]3
3小米1411142225[“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_idsku_namefirst_keyfirst_valuekeysvaluesnumber_of_entries
1华为Mate50id1111[“id”, “token”, “user_name”][“1111”, “2222”, “zhangsan”]3
2华为Mate60id1113[“id”, “token”, “user_name”][“1113”, “2224”, “zhangsan2”]3
3小米14id1114[“id”, “token”, “user_name”][“1114”, “2225”, “zhangsan3”]3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/439273.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

随笔(四)——代码优化

文章目录 前言1.原本代码2.新增逻辑3.优化逻辑 前言 原逻辑&#xff1a;后端data数据中返回数组&#xff0c;数组中有两个对象&#xff0c;一个是属性指标&#xff0c;一个是应用指标&#xff0c;根据这两个指标展示不同的多选框 1.原本代码 getIndicatorRange(indexReportLi…

企业级版本管理工具(1)----Git

目录 1.Git是什么 2.Git的安装和使用 在Ubuntu下安装命令如下&#xff1a; 使用git --version查看已安装git的版本&#xff1a; 使用git init初始化仓库&#xff1a; 使用tree .git列出目录&#xff1a; 使用git config命令设置姓名和邮箱&#xff1a; 加入--global选项…

【前端】前端数据转化为后端数据

【前端】前端数据转化为后端数据 写在最前面格式化数组代码解释hasOwnProperty是什么&#xff1f; &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&#xff0c;挖掘无限…

【操作系统】引导(Boot)电脑的奇妙开机过程

&#x1f339;&#x1f60a;&#x1f339;博客主页&#xff1a;【Hello_shuoCSDN博客】 ✨操作系统详见 【操作系统专项】 ✨C语言知识详见&#xff1a;【C语言专项】 目录 什么是操作系统的引导&#xff1f; 操作系统的引导&#xff08;开机过程&#xff09; Windows操作系…

渗透测试入门学习——使用python脚本自动识别图片验证码,OCR技术初体验

写在前面 由于验证码在服务端生成后存储在服务器的session中&#xff0c;而标用于标识用户身份的sessionid存在于用户cookie中 所以本次识别验证码时需要用requests.session()创建会话对象&#xff0c;模拟真实的浏览器行为&#xff0c;保持与服务器的会话才能获取登录时服务…

常用排序算法(下)

目录 2.5 冒泡排序 2.6 快速排序 2.6 1 快速排序思路 详细步骤 2.6 2 快速排序递归实现 2.6 3快速排序非递归&#xff1a; 快排非递归的优势 非递归思路 1. 初始化栈 2. 将整个数组的起始和结束索引入栈 3. 循环处理栈中的子数组边界 4. 单趟排序 5. 处理分区后的子…

【论文速看】DL最新进展20241005-Transformer、目标跟踪、Diffusion Transformer

目录 【Transformer】【目标跟踪】【Diffusion Transformer】 【Transformer】 [NeurlPS 2024] Parameter-Inverted Image Pyramid Networks 机构&#xff1a;清华大学、上海AI Lab、上交、港中文、商汤 论文链接&#xff1a;https://arxiv.org/pdf/2406.04330 代码链接&…

C++ | Leetcode C++题解之第454题四数相加II

题目&#xff1a; 题解&#xff1a; class Solution { public:int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {unordered_map<int, int> countAB;for (int u: A) {for (int v: B) {count…

网络基础 【HTTPS】

&#x1f493;博主CSDN主页:麻辣韭菜&#x1f493;   ⏩专栏分类&#xff1a;Linux初窥门径⏪   &#x1f69a;代码仓库:Linux代码练习&#x1f69a; &#x1f4bb;操作环境&#xff1a; CentOS 7.6 华为云远程服务器 &#x1f339;关注我&#x1faf5;带你学习更多Linux知识…

LabVIEW提高开发效率技巧----调度器设计模式

在LabVIEW开发中&#xff0c;针对多任务并行的需求&#xff0c;使用调度器设计模式&#xff08;Scheduler Pattern&#xff09;可以有效地管理多个任务&#xff0c;确保它们根据优先级或时间间隔合理执行。这种模式在需要多任务并发执行时特别有用&#xff0c;尤其是在实时系统…

软件验证与确认实验一:静态分析

目录 1. 实验目的及要求.................................................................................................... 3 2. 实验软硬件环境.................................................................................................... 3 …

JAVA运用中springBoot获取前端ajax提交参数方式汇总

本篇文章主要讲解springboot获取前端提交的参数信息&#xff0c;后端进行接受的常见方法汇总&#xff0c;通过本篇文章你可以快速掌握对表单和连接参数获取的能力。 作者&#xff1a;任聪聪 日期&#xff1a;2024年10月5日 一、delete、get等url参数获取方式 前台提交&#xf…

数字图像处理:空间域滤波

1.数字图像处理&#xff1a;空间域滤波 1.1 滤波器核&#xff08;相关核&#xff09;与卷积 图像上的邻域计算 线性空间滤波的原理 滤波器核&#xff08;相关核&#xff09;是如何得到的&#xff1f; 空间域的卷积 卷积&#xff1a;滤波器核与window中的对应值相乘后所有…

【Echarts】折线图和柱状图如何从后端动态获取数据?

&#x1f680;个人主页&#xff1a;一颗小谷粒 &#x1f680;所属专栏&#xff1a;Web前端开发 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 1.1 前端数据分析 1.2 数据库表分析 1.3 后端数据处理 1.4 前端接收数据 继上一篇文章&…

MySQL 查询优化器

文章目录 控制查询计划optimizer_prune_leveloptimizer_search_depth 优化器参数优化器提示索引提示成本模型server_costcost_name engine_cost 控制查询计划 https://dev.mysql.com/doc/refman/8.4/en/controlling-query-plan-evaluation.html 在执行SQL前会根据优化器选择执…

C++_智能指针详解

什么是智能指针&#xff1f;为什么要有智能指针&#xff1f;到目前为止&#xff0c;我们编写的程序所使用的对象都有着严格定义的生命周期。比如说&#xff0c;全局对象在程序启动时分配&#xff0c;在程序结束时销毁&#xff1b;再比如说局部static对象在第一次使用前分配&…

electron-builder 首次执行报错问题解决

假日想研究一下 react electron 的使用&#xff0c;结果发现首次打包疯狂报错&#xff0c;研究了一下之后才发现是第一次的话 electron-builder 会从外面下载依赖包到我们系统中&#xff0c;由于某种力量导致压缩包无法下载或者是下载过慢导致失败&#xff0c;要解决其实也简单…

初学51单片机之I2C总线与E2PROM二

总结下上篇博文的结论&#xff1a; 1&#xff1a;ACK信号在SCL为高电平期间会一直保持。 2&#xff1a;在字节数据传输过程中如果发送电平跳变&#xff0c;那么电平信号就会变成重复起始或者结束的信号。&#xff08;上篇博文的测试方法还是不能够明确证明这个结论&#xff0…

【C++】入门基础介绍(上)C++的发展历史与命名空间

文章目录 1. 前言2. C发展历史2. 1 C版本更新特性一览2. 2 关于C23的一个小故事: 3. C的重要性3. 1 编程语言排行榜3. 2 C在工作领域中的应用 4. C学习建议和书籍推荐4. 1 C学习难度4. 2 学习书籍推荐 5. C的第一个程序6. 命名空间6. 1 namespace的价值6. 2 namespace的定义6. …

首届中美可持续发展峰会在加州圆满举行,引领国际绿色发展新方向

现场嘉宾与(部分)与会人员大合影 2024年8月18日,由美国领创商业联盟(Youth Entrepreneur Business Alliance, YEBA)主办的首届中美可持续发展峰会(Sino-American Symposium on Sustainable Development)在加州森林湖市(Lake Forest)盛大举行。此次峰会吸引了数百名来自中美两国…