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 创建表案例二(ARRAY数组类型)

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.mfbz.cn/a/886555.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV计算机视觉库

计算机视觉和图像处理 Tensorflow入门深度神经网络图像分类目标检测图像分割OpenCVPytorchNLP自然语言处理 OpenCV 一、OpenCV简介1.1 简介1.2 OpenCV部署1.3 OpenCV模块 二、OpenCV基本操作2.1 图像的基本操作2.1.1 图像的IO操作2.1.2 绘制几何图像2.1.3 获取并修改图像的像素…

【算法篇】回溯算法类(2)(笔记)

目录 一、LeetCode 题目 1. 子集II 2. 递增子序列 3. 全排列 4. 全排列 II 5. 重新安排行程 6. N皇后 7. 解数独 二、题目思路整理 一、LeetCode 题目 1. 子集II https://leetcode.cn/problems/subsets-ii/description/https://leetcode.cn/problems/subsets-ii/des…

【C++】类与对象基础概念解析

恭喜你学习完C语言与数据结构的有关内容&#xff0c;现在让我们开始进行对C的学习吧~ &#x1f49d;&#x1f49d;&#x1f49d;如果你对C语言或数据结构还存在疑惑&#xff0c;欢迎观看我之前的作品 &#x1f449;【数据结构】 &#x1f449;【C语言】 目录 一、引言 二、类…

MapBox Android版开发 6 关于Logo

MapBox Android版开发 6 关于Logo Logo的显示查看源码及思路&#xff08;Logo&#xff09;第一步第二步 隐藏Logo示例查看源码及思路&#xff08;Info&#xff09;第一步第二步 隐藏Logo和Info示例 看到有网友留言问如何移除Logo&#xff0c;今天看了下V9源码&#xff0c;发现M…

CORE MVC 过滤器 (筛选器)《2》 TypeFilter、ServiceFilter

TypeFilter、ServiceFilter ServiceFilter vs TypeFilter ServiceFilter和TypeFilter都实现了IFilterFactory ServiceFilter需要对自定义的Filter进行注册&#xff0c;TypeFilter不需要 ServiceFilter的Filter生命周期源自于您如何注册&#xff08;全局、区域&#xff09;&…

Ps:打开与置入

在 Adobe Photoshop 中&#xff0c;理解不同的“打开”和“置入”命令及其用途&#xff0c;可以根据不同的需求选择最佳方式来管理和编辑图像文件。 ◆ ◆ ◆ 打开 1、Ps菜单&#xff1a;文件/打开 File/Open 快捷键&#xff1a;Ctrl O 用于直接打开现有的图像文件。 打开的…

【HDP】zookeeper未授权漏洞修复

目录 一、禁用四字命令 二、ZK-Client增加kerberos 一、禁用四字命令 Zookeeper四字命令的使用方式非常简单&#xff0c;通常有两种方式。第一种是通过Telnet方式&#xff0c;使用Telnet客户端登录ZooKeeper的对外服务端口&#xff0c;然后直接使用四字命令即可&#xff1b;第…

计算机网络-系分(5)

目录 计算机网络 DNS解析 DHCP动态主机配置协议 网络规划与设计 层次化网络设计 网络冗余设计 综合布线系统 1. 双栈技术 2. 隧道技术 3. 协议转换技术 其他网络技术 DAS&#xff08;Direct Attached Storage&#xff0c;直连存储&#xff09; NAS&#xff08;Net…

centos环境安装JDK详细教程

centos环境安装JDK详细教程 一、前期准备二、JDK安装2.1 rpm方式安装JDK2.2 zip方式安装JDK2.3 yum方式安装JDK 本文主要说明CentOS下JDK的安装过程。JDK的安装有三种方式&#xff0c;用户可根据实际情况选择&#xff1a; 一、前期准备 查看服务器操作系统型号&#xff0c;执…

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

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

鸿蒙harmonyos next纯flutter开发环境搭建

公司app是用纯flutter开发的&#xff0c;目前支持android和iOS&#xff0c;后续估计也会支持鸿蒙harmonyos。目前谷歌flutter并没有支持咱们国产手机操作系统鸿蒙harmonyos&#xff0c;于是乎国内有个叫OpenHarmony-SIG的组织&#xff0c;去做了鸿蒙harmonyos适配flutter开发的…

安卓主板_MTK4G/5G音视频记录仪整机及方案定制

音视频记录仪方案&#xff0c;采用联发科MT6877平台八核2* A78 6* A55主频高达2.4GHz, 具有高能低耗特性&#xff0c;搭载Android 12.0智能操作系统&#xff0c;可选4GB32GB/6GB128GB内存&#xff0c;运行流畅。主板集成NFC、双摄像头、防抖以及多种无线数据连接&#xff0c;支…

【web安全】——sql注入

1.MySQL基础 1.1information_schema数据库详解 简介&#xff1a; 在mysql5版本以后&#xff0c;为了方便管理&#xff0c;默认定义了information_schema数据库&#xff0c;用来存储数据库元数据信息。schemata(数据库名)、tables(表名tableschema)、columns(列名或字段名)。…

java设计模式介绍

常见的设计模式有哪些呢&#xff1f; 单例模式&#xff08;Singleton Pattern&#xff09;&#xff1a; 就像是武林中的“独孤求败”&#xff0c;一个类只有一个实例&#xff0c;并提供一个全局访问点。 常用于需要控制资源访问的场景&#xff0c;比如数据库连接池。 工厂模式…

828华为云征文|部署音乐流媒体服务器 mStream

828华为云征文&#xff5c;部署音乐流媒体服务器 mStream 一、Flexus云服务器X实例介绍二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置2.4 Docker 环境搭建 三、Flexus云服务器X实例部署 mStream3.1 mStream 介绍3.2 mStream 部署3.3 mStream 使用 四、…

51c自动驾驶~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/11466109 #HTCL 超过所有视觉方案&#xff01;HTCL&#xff1a;分层时间上下文问鼎OCC 本文是对ECCV2024接受的文章 HTCL: 的介绍&#xff0c;HTCL在SemanticKITTI基准测试中超过了所有基于相机的方法&#xff0c;甚至在和…

java中创建不可变集合

一.应用场景 二.创建不可变集合的书写格式&#xff08;List&#xff0c;Set&#xff0c;Map) List集合 package com.njau.d9_immutable;import java.util.Iterator; import java.util.List;/*** 创建不可变集合:List.of()方法* "张三","李四","王五…

每日OJ题_牛客_游游的水果大礼包_枚举_C++_Java

目录 牛客_游游的水果大礼包 题目解析 C代码 Java代码 牛客_游游的水果大礼包 游游的水果大礼包 (nowcoder.com) 描述&#xff1a; 游游有n个苹果&#xff0c;m个桃子。她可以把2个苹果和1个桃子组成价值a元的一号水果大礼包&#xff0c;也可以把1个苹果和2个桃子…

拆解维修飞科剃须刀

原因 用了好几年的剃须刀&#xff0c;经过一次更换电池。后来上面的盖帽松动&#xff0c;无法合盖&#xff0c;经过把弹片矫正后修复。最近一次”大力出奇迹“的操作直接断送了这个老伤员最后的可能性。最终只能花了将近十块大洋买了一套盖着和中间座。简单更换了一下。 记录…

Unity NetCode 客户端连接不上服务器,局域网模式 Failed to connect to server.

报错代码: Failed to connect to server. 报错截图&#xff1a; 解决办法: 服务端:绑定127.0.0.1和端口 客户端:写好对应服务端ip和端口 如何查看服务端所在局域网IP&#xff0c;192.xxx.xxx.xx,就不用教了吧。 注意这个钩&#xff0c;得点下&#xff0c;默认不勾选。 意…