当前位置: 首页 > news >正文

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

相关文章:

Hive数仓操作(四)

一、Hive 创建表案例一&#xff08;ARRAY数组类型&#xff09; 1. 准备数据文件 首先&#xff0c;准备一个名为 stu2.txt 的文件&#xff0c;文件内容示例如下&#xff1a; 1001 Alice fish,cat 1002 Bob dog,rabbit 1003 Charlie bird注意&#xff1a; …...

《C++跨平台开发:突破界限,释放无限可能》

在当今的软件开发领域&#xff0c;跨平台开发已成为一种重要趋势。它允许开发者编写一次代码&#xff0c;然后在多个不同的操作系统和硬件平台上运行&#xff0c;极大地提高了开发效率和软件的可扩展性。而 C作为一种强大的编程语言&#xff0c;也具备实现跨平台开发的能力。本…...

速盾:免备案服务器?

速盾是一家提供网络安全服务的公司&#xff0c;其主要产品包括CDN加速、WEB防护、WAF、DDoS防护等。在网站建设过程中&#xff0c;选择一个合适的服务器是非常重要的一步。传统的服务器需要备案&#xff0c;涉及到较多的流程和审批时间&#xff0c;给网站运营带来了一定的麻烦。…...

Electron获取nodejs和chrome版本信息

Electron获取nodejs和chrome版本信息 环境&#xff1a; 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 调用是异步的。为了性能原因&#xff0c;React 会将多个 setState 调用合并成一次批量更新。具体过程如下&#xff1a; 1&#xff09;React 先将调用的每个 setState 所产生的更新对象存储在一个队列中。 2&#xff09;在所有的同步…...

微信小程序开发日记第二天

坚持在各个平台更新自己写小程序的心得体会&#xff0c;在百度贴吧和csdn更新自己的小程序日记&#xff0c;同时也是个体不断地对于云技术的开发和成长&#xff0c;进行提升&#xff01;不断地将开源开放创新思维运用到自己的小程序当中&#xff0c;小程序制作的关键就是&#…...

如果您忘记了 Apple ID 和密码,按照指南可重新进入您的设备

即使您的 iPhone 或 iPad 由于各种原因被锁定或禁用&#xff0c;也可以使用 iTunes、“查找我的”、Apple 支持和 iCloud 解锁您的设备。但是&#xff0c;此过程需要您的 Apple ID 和密码来验证所有权并移除激活锁。如果您忘记了 Apple ID 和密码&#xff0c;请按照我们的指南重…...

Top4免费音频剪辑软件大比拼,2024年你选哪一款?

现在我们生活在一个数字化的时代&#xff0c;音频内容对我们来说很重要。不管是给自己拍的视频配背景音乐、整理开会时的录音&#xff0c;还是自己写歌&#xff0c;有个好用的音频剪辑软件都特别重要。今天&#xff0c;我要给大家介绍几款特别好用的音频剪辑软件免费的&#xf…...

基于SSM的电影院售票系统设计与实现

文未可获取一份本项目的java源码和数据库参考。 前言 近些年的电影在人们文娱活动中占据重要地位&#xff0c;另外&#xff0c;由于人们的生活越来越富有&#xff0c;越来越多的人们不再选择在家里看电影&#xff0c;而是选择去电影院看电影。但是&#xff0c;以往的售票方式是…...

uniapp 必须掌握的细节

1.使用watch实现实时监控的效果 例如&#xff1a;实时监测手机号码的示例 // 实时监测手机号码 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对话框&#xff1a;在保留当前页面状态的情况下&#xff0c;告知用户并承载相关操作。 Dialog 对话框组件可以在保留当前页面信息的状态下弹出一个对话框&#xff0c;并…...

一个月学会Java 第2天 认识类与对象

Day2 认识类与对象 第一章 初识类 经过一个程序的编写&#xff0c;应该对程序的结构有点好奇了吧&#xff0c;如果你有基础&#xff0c;接下来的肯定非常的易懂&#xff0c;如果你没有基础也没有关系&#xff0c;反复琢磨一下也就懂了&#x1f606; 我们来重复一下第一个程序 …...

【WRF数据准备】MODIS静态地理数据下载及制备

【WRF数据准备】MODIS静态地理数据下载及制备 MODIS数据介绍数据下载数据拼接MRT工具介绍基于MRT软件完成数据拼接 格式转换&#xff1a;tif文件转二进制格式编写INDEX修改GEOGRID.TBL以及namelist.wps修改GEOGRID.TBL修改namelist.wps 参考 MODIS数据介绍 MODIS-MCD12Q1 v061…...

MySQL数据库——索引

目录 什么是索引&#xff08;Index&#xff09;&#xff1f; 怎样加索引&#xff1f; 索引的特点 索引类型 主键索引(Primary Key) 辅助索引&#xff08;二级索引&#xff09; 聚集索引和非聚集索引 聚集索引 非聚集索引 单列索引和联合索引 单列索引 联合索引 创…...

【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 特点&#xff1a; GitHub Actions 核心概念&#xff1a; 应用场景&#xff1a; RSS RSS的主要特点&#xff1a; 使用场景&#xff1a; RSS的工作原理&#xff1a; 关于Github Readme Card 关于Github贡献的3D图 关于个人最新博文的获取 关于代码…...

ElasticSearch备考 -- Multi match

一、题目 索引task有3个字段a、b、c&#xff0c;写一个查询去匹配这三个字段为mom&#xff0c;其中b的字段评分比a、c字段大一倍&#xff0c;将他们的分数相加作为最后的总分数 二、思考 通过题目要求对多个字段进行匹配查询&#xff0c;可以考虑multi match、bool query操作。…...

滚雪球学Oracle[2.5讲]:数据库初始化配置

全文目录&#xff1a; 前言一、配置文件的高级参数设置1.1 open_cursors&#xff1a;游标打开数量限制案例演示 1.2 session_cached_cursors&#xff1a;会话缓存游标数量案例演示 1.3 pga_aggregate_target与sga_target&#xff1a;内存分配优化案例演示 二、内存管理模式的选…...

Java - Spring框架 (ios+aop)

Spring 简介 Spring框架是为了解决企业应用开发的复杂性&#xff0c;使用基本的JavaBean代替EJB&#xff0c;并提供了更多的企业应用功能&#xff0c;Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架。 Spring优点 Spring是一个开源的免费的框架(容器) Spring是一…...

计算机网络(十) —— IP协议详解,理解运营商和全球网络

目录 一&#xff0c;关于IP 1.1 什么是IP协议 1.2 前置认识 二&#xff0c;IP报头字段详解 三&#xff0c;网段划分 3.1 IP地址的构成 3.2 网段划分 3.3 子网划分 3.4 IP地址不足问题 四&#xff0c;公网IP和私有IP 五&#xff0c;理解运营商和全球网络 六&#xff…...

速速收藏!这些2024年上映的AI电影与短剧,申请加入你的国庆假期宅家计划!

2024年上映的AI电影 01 科幻惊悚电影《致命AI Afraid》 导演&#xff1a;克里斯韦兹上映日期:2024-08-30(美国)片长:84分钟剧情简介&#xff1a;Curtis一家被选中去测试一种革新性的居家设备&#xff1a;数字家庭助手AIA&#xff0c;包括各种感应设备和摄像头等&#xff0c;…...

23.2 prometheus为k8s做的4大适配工作

本节重点介绍 : k8s监控中的4大采集类型总结prometheus为k8s监控做的4大适配工作 k8s关注指标分析 在监控每个细分的领域时&#xff0c;我们都要先思考下到底需要关注哪些方面的指标。k8s中组件复杂&#xff0c;我们主要专注的无外乎四大块指标&#xff1a;容器基础资源指标…...

1、如何查看电脑已经连接上的wifi的密码?

在电脑桌面右下角的如下位置&#xff1a;双击打开查看当前连接上的wifi的名字&#xff1a;ZTE-kfdGYX-5G 按一下键盘上的win R 键, 输入【cmd】 然后&#xff0c;按一下【回车】。 输入netsh wlan show profile ”wifi名称” keyclear : 输入完成后&#xff0c;按一下回车&…...

循环链表和双向链表

一、 带尾指针的循环链表的合并 算法步骤&#xff1a; p存表头结点——pTa->next;Tb表头连接到Ta表尾——Ta->nextTb->next->next;释放Tb表头结点——delate Tb->next;修改指针——Tb->nextp; LinkList Connect(LinkList Ta,LinkList Tb){pTa->next; …...

【Linux庖丁解牛】—Linux基本指令(中)!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a; Linux庖丁解牛 &#x1f516;克心守己&#xff0c;律己则安 目录 1、rmdir与rm指令 2、man指令 3、cp指令 4、mv指令 5、cat与tac指令 6、重定向 7、more指令 8、…...

【电路笔记】-运算放大器微分器

运算放大器微分器 文章目录 运算放大器微分器1、概述2、运算放大器微分器的表示2.1 理想微分器2.2 输出公式2.3 交流分析3、实际微分器3.1 理想配置的局限性3.2 带串联电阻的伪微分器3.3 具有并联电容器的伪微分器4、总结1、概述 在我们之前关于积分器运算放大器的文章中,我们…...

【Unity踩坑】使用内购时获取Google Play license key

在Unity中使用了IAP&#xff08;内购&#xff09;后&#xff0c;需要设置Google Play license key。 这个key需要在Google Play Console中&#xff08;https://play.google.com/console&#xff09;&#xff0c;找到相应的应用&#xff0c;在左侧“创收设置”里可以找到license…...

华为OD机试真题-数组拼接-2024年OD统一考试(E卷)

最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客 每一题都含有详细的解题思路和代码注释,精选c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,发现新题及时跟新。 题目描述 现在有多组整数数…...

【Android 14源码分析】Activity启动流程-2

忽然有一天&#xff0c;我想要做一件事&#xff1a;去代码中去验证那些曾经被“灌输”的理论。                                                                                  – 服装…...

ubuntu 18.04 cuda 11.01 gpgpu-sim 裸机编译

1&#xff0c;环境 ubuntu 18.04 x86_64 cuda 11.01 gpgpu-sim master commit 90ec3399763d7c8512cfe7dc193473086c38ca38 2&#xff0c;预备环境 一个比较新的 ubuntu 18.04&#xff0c;为了迎合 cuda 11.01 的版本需求 安装如下软件&#xff1a; sudo apt-get instal…...