Hive数仓操作(十三)
一、JSON 数据
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,在不同的编程语言之间进行数据传输时非常通用和常用。JSON 格式简单直观,易于阅读和编写,并且可以被大多数编程语言轻松解析和生成。
1. JSON 特点
- 轻量级:JSON 的格式简单,数据量较小,适合网络传输。
- 可读性强:JSON 使用键值对来表示数据,非常直观,易于人类阅读和编写。
- 广泛支持:几乎所有的编程语言(如 JavaScript、Python、Java、C# 等)都支持 JSON,并且有内置或第三方库可以方便地解析和生成 JSON 数据。
2. JSON 的语法
-
对象:由
{}
包围,使用键值对表示数据,键和值之间用冒号:
分隔,键值对之间用逗号,
分隔。{"name": "John Doe","age": 30,"email": "john.doe@example.com" }
-
值的类型:可以是字符串、数字、对象、数组、布尔值(true/false)或 null,甚至可以继续嵌套json。
{"string": "hello","number": 123,"object": {"key": "value"},"array": [1, 2, 3],"boolean": true,"null_value": null }
3. JSON 在 Hive 中的使用
在 Hive 中,处理 JSON 数据非常常见,可以使用 get_json_object()
等函数来解析和提取 JSON 数据中的信息。
get_json_object()
get_json_object()
函数用于从 JSON 字符串中提取指定路径的数据。
示例数据文件
假设有一个名为 users.json
的文件,内容如下:
1,{"name": "John", "age": 30}
2,{"name": "Jane", "age": 25}
导入数据到 Hive 表
首先,我们创建一个表 users
并将数据导入到该表中:
-- 创建表
CREATE TABLE users (user_id INT,user_info STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',';-- 加载数据
LOAD DATA LOCAL INPATH '/path/to/users.json' INTO TABLE users;
然后,使用 get_json_object()
从 JSON 字符串中提取用户的名称和年龄:
SELECTuser_id,get_json_object(user_info, '$.name') as name,get_json_object(user_info, '$.age') as age
FROMusers;
示例结果
user_id | name | age |
---|---|---|
1 | John | 30 |
2 | Jane | 25 |
二、HIVE的JSON 数据处理
在本案例中,我们将介绍如何从JSON格式的数据中提取时间、城市和人名,并将提取的数据进行进一步处理。
示例数据格式
数据表 yizu
中的 cot
字段示例:
1 {"time": 1672531199000, "sex": "male", "searchValue": [{"province": "广东", "city": "深圳"}, "张三"]}
2 {"time": 1672531199001, "sex": "female", "searchValue": [{"province": "北京", "city": "北京"}, "李四"]}
3 {"time": 1672531199002, "sex": "male", "searchValue": [{"province": "上海", "city": "上海"}, "王五"]}
4 {"time": 1672531199003, "sex": "female", "searchValue": [{"province": "江苏", "city": "南京"}, "赵六"]}
5 {"time": 1672531199004, "sex": "male", "searchValue": [{"province": "浙江", "city": "杭州"}, "孙七"]}
第一步:提取数据
- 提取时间
SELECT FROM_UNIXTIME(FLOOR(CAST(get_json_object(cot, '$.time') AS BIGINT)/1000)) AS time
FROM yizu;
结果:
+---------------------+
| time |
+---------------------+
| 2023-01-01 00:59:59 |
| 2023-01-01 01:00:00 |
| 2023-01-01 01:00:01 |
| 2023-01-01 01:00:02 |
| 2023-01-01 01:00:03 |
+---------------------+
- 提取城市
SELECT get_json_object(cot, '$.searchValue[0].city') AS city
FROM yizu;
结果:
+--------+
| city |
+--------+
| 深圳 |
| 北京 |
| 上海 |
| 南京 |
| 杭州 |
+--------+
- 提取人名
SELECT get_json_object(cot, '$.searchValue[1]') AS name
FROM yizu;
结果:
+------+
| name |
+------+
| 张三 |
| 李四 |
| 王五 |
| 赵六 |
| 孙七 |
+------+
- 整合查询
SELECT FROM_UNIXTIME(FLOOR(CAST(get_json_object(cot, '$.time') AS BIGINT)/1000)) AS time,get_json_object(cot, '$.searchValue[0].city') AS city,get_json_object(cot, '$.searchValue[1]') AS name
FROM yizu;
结果:
+---------------------+--------+------+
| time | city | name |
+---------------------+--------+------+
| 2023-01-01 00:59:59 | 深圳 | 张三 |
| 2023-01-01 01:00:00 | 北京 | 李四 |
| 2023-01-01 01:00:01 | 上海 | 王五 |
| 2023-01-01 01:00:02 | 南京 | 赵六 |
| 2023-01-01 01:00:03 | 杭州 | 孙七 |
+---------------------+--------+------+
第二步:数据处理
- 使用
concat_ws
将数据合并为字符串
SELECT concat_ws(',', FROM_UNIXTIME(FLOOR(CAST(get_json_object(cot, '$.time') AS BIGINT)/1000)),get_json_object(cot, '$.searchValue[0].city'),get_json_object(cot, '$.searchValue[1]')) AS new_c
FROM yizu;
结果:
+-----------------------+
| new_c |
+-----------------------+
| 2023-01-01 00:59:59,深圳,张三 |
| 2023-01-01 01:00:00,北京,李四 |
| 2023-01-01 01:00:01,上海,王五 |
| 2023-01-01 01:00:02,南京,赵六 |
| 2023-01-01 01:00:03,杭州,孙七 |
+-----------------------+
- 使用
split
将字符串切割为数组
SELECT split(concat_ws(',',FROM_UNIXTIME(FLOOR(CAST(get_json_object(cot, '$.time') AS BIGINT)/1000)),get_json_object(cot, '$.searchValue[0].city'),get_json_object(cot, '$.searchValue[1]')), ',') AS new_c
FROM yizu;
结果:
+------------------------------------------------+
| new_c |
+------------------------------------------------+
| ["2023-01-01 00:59:59", "深圳", "张三"] |
| ["2023-01-01 01:00:00", "北京", "李四"] |
| ["2023-01-01 01:00:01", "上海", "王五"] |
| ["2023-01-01 01:00:02", "南京", "赵六"] |
| ["2023-01-01 01:00:03", "杭州", "孙七"] |
+------------------------------------------------+
- 使用
explode
将数组转换为多行显示
SELECT id, c1
FROM (SELECT id,split(concat_ws(',',FROM_UNIXTIME(FLOOR(CAST(get_json_object(cot, '$.time') AS BIGINT)/1000)),get_json_object(cot, '$.searchValue[0].city'),get_json_object(cot, '$.searchValue[1]')), ',') AS new_cFROM yizu
) a
LATERAL VIEW EXPLODE(new_c) lv AS c1;
结果:
+----+-------------------+
| id | c1 |
+----+-------------------+
| 1 | 2023-01-01 00:59:59|
| 1 | 深圳 |
| 1 | 张三 |
| 2 | 2023-01-01 01:00:00|
| 2 | 北京 |
| 2 | 李四 |
| 3 | 2023-01-01 01:00:01|
| 3 | 上海 |
| 3 | 王五 |
| 4 | 2023-01-01 01:00:02|
| 4 | 南京 |
| 4 | 赵六 |
| 5 | 2023-01-01 01:00:03|
| 5 | 杭州 |
| 5 | 孙七 |
+----+-------------------+
相关文章:

Hive数仓操作(十三)
一、JSON 数据 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,在不同的编程语言之间进行数据传输时非常通用和常用。JSON 格式简单直观,易于阅读和编写,并且可以被大多数编程语言轻松解析和生成。 1.…...

MyBatis XML映射文件
XML映射文件 XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)XML映射文件的namespace属性为Mapper接口全限定名一致XML映射文件中SQL语句的id与Mapper接口中的方法名一致,并保持返…...

「PYTHON」配置支持cuda计算的torch环境
本教程用于配置可支持cuda加速计算的torch环境 如果单纯使用命令行的pip安装torch,几乎都是cpu版本的,所以想要下载支持cuda的torch,我们只能通过手动下载安装包到本地,再使用pip从下载好的本地文件离线安装 而要想使用cuda加速…...

Chromium 中chrome.history扩展接口c++实现
一、前端 chrome.history定义 使用 chrome.history API 与浏览器的已访问网页的记录进行交互。您可以在浏览器的历史记录中添加、移除和查询网址。如需使用您自己的版本替换历史记录页面,请参阅覆盖网页。 更多参考:chrome.history | API | Chrome…...

(Linux和数据库)1.Linux操作系统和常用命令
了解Linux操作系统介绍 除了办公和玩游戏之外不用Linux,其他地方都要使用Linux(it相关) iOS的本质是unix(unix是付费版本的操作系统) unix和Linux之间很相似 Linux文件系统和目录 bin目录--放工具使用的 操作Linux远程…...

Linux——echo-tail-重定向符
echo命令 类似printf 输出 反引号 重定向符 > 和 >> > 覆盖 >> 追加 tail命令 查看文件尾部内容,追踪文件最新更改 tail -num 从尾部往上读num行,默认10行 tail -f 持续跟踪...

GitHub Copilot 使用手册(一)--配置
一、 什么是GitHub Copilot GitHub Copilot 是GitHub和OpenAI合作开发的一个人工智能工具,在使用Visual Studio Code、Microsoft Visual Studio、Vim、Cursor或JetBrains等IDE时可以协助用户编写代码等工作,实现虚拟的结对编程。 二、 GitHub Copilot …...

【论文阅读】Cross Attention Network for Few-shot Classification
用于小样本分类的交叉注意力网络 引用:Hou, Ruibing, et al. “Cross attention network for few-shot classification.” Advances in neural information processing systems 32 (2019). 论文地址:下载地址 论文代码:https://github.com/bl…...

CV图像处理小工具——json文件转P格式mask
CV图像处理小工具——json文件转P格式mask import cv2 import json import numpy as np import osdef func(file_path: str) -> np.ndarray:try:with open(file_path, moder, encoding"utf-8") as f:configs json.load(f)# 检查JSON是否包含必要的字段if "…...

Typora 快捷键操作大全
Typora 是一款简洁的 Markdown 编辑器,它提供了一些快捷键来帮助用户更高效地编辑文档。以下是一些常用的 Typora 快捷键,这些快捷键可能会根据操作系统有所不同(Windows 和 macOS): 常用格式化快捷键 加粗ÿ…...

<Project-8.1.1 pdf2tx-mm> Python 调用 ChatGPT API 翻译PDF内容 历程心得
原因 用ZhipuAI,测试用的PDF里,有国名西部省穆斯林,翻译结果返回 “系统检测到输入或生成内容可能包含不安全或敏感内容,请您避免输入易产生敏感内容的提 示语,感谢您的配合” 。想过先替换掉省名、民族名等ÿ…...

JDK1.1主要特性
JDK 1.1,也被称为Java Development Kit 1.1,是Java编程语言的第一个更新版本,由Sun Microsystems公司在1997年发布。JDK 1.1在JDK 1.0的基础上进行了许多重要的改进和扩展,进一步巩固了Java作为一种强大、安全的编程语言和平台的地…...

软件测试工作中-商城类项目所遇bug点
商城的 bug 1、跨设备同步问题 当用户在不同设备上使用同一个账户时,购物车数据无法正确同步这可能是由于购物车数据存储和同步机制不完善,导致购物车内容在设备之间无法实时更新。怎么解决:开发把同步机制代码修改了一下,就不会出现这个 bug 了。 2、数…...

Java多线程面试题
1.进程和线程的区别 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU中,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的。 当一个程序被运…...

安徽大学《2022年+2023年831自动控制原理真题》 (完整版)
本文内容,全部选自自动化考研联盟的:《安徽大学831自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2022年真题 2023年真题 Part1:2022年2023年完整版真题 2022年真题 2023年真题…...

Vulnhub靶场案例渗透[6]- DC6
文章目录 1. 靶场搭建2. 信息收集2.1 确定靶机ip2.2 主机信息收集2.3 主机目录扫描2.4 网站用户名和密码爆破 3. 反弹shell4. 提权 1. 靶场搭建 靶场源地址 检验下载文件的检验码,对比没问题使用vmware打开 # windwos 命令 Get-FileHash <filePath> -Algori…...

FreeSWITCH 分机网关路由
不废话了,直接贴代码: --[[作用:分机网关呼叫第一个参数: 分机号码第二个参数: 被叫号码第三个参数: 主叫号码使用例子:<extension name"usergw"><condition><action applicatio…...

数据交换的金钟罩:合理利用安全数据交换系统,确保信息安全
政府单位为了保护网络不受外部威胁和内部误操作的影响,通常会进行网络隔离,隔离成内网和外网。安全数据交换系统是专门设计用于在不同的网络环境(如内部不同网络,内部网络和外部网络)之间安全传输数据的解决方案。 使用…...

区块链积分系统:重塑支付安全与商业创新的未来
在当今社会,数字化浪潮席卷全球,支付安全与风险管理议题日益凸显。随着交易频次与规模的不断扩大,传统支付体系正面临前所未有的效率、合规性和安全挑战。 区块链技术,凭借其去中心化、高透明度以及数据不可篡改的特性,…...

Django学习笔记十三:优秀案例学习
Django CMS 是一个基于 Django 框架的开源内容管理系统,它允许开发者轻松地创建和管理网站内容。Django CMS 提供了一个易于使用的界面来实现动态网站的快速开发,并且具有丰富的内容管理功能和多种插件扩展。以下是 Django CMS 的一些核心特性和如何开始…...

SSH 公钥认证:从gitlab clone项目repo到本地
这篇文章的分割线以下文字内容由 ChatGPT 生成(我稍微做了一些文字上的调整和截图的补充),我review并实践后觉得内容没有什么问题,由此和大家分享。 假如你想通过 git clone git10.12.5.19:your_project.git 命令将 git 服务器上…...

linux 搭建sentinel
1.下载 linux执行下面的命令下载包 wget https://github.com/alibaba/Sentinel/releases/download/1.8.6/sentinel-dashboard-1.8.6.jar2.启动 nohup java -Dserver.port9090 -Dcsp.sentinel.dashboard.serverlocalhost:9090 -Dproject.namesentinel-dashboard -jar sentin…...

微服务发展历程
服务架构演进 服务架构演进过程:抽取各个模块独立维护,独立部署的过程。 初创公司2 ~ 3个研发人员,ALL IN ONE 的框架开发效率最高。随着队伍的壮大,产品,用户,商品成立独立小组,拆出相应的模块…...

提示词优化、GPTs逆向工程、大语言模型原理、大语言模型优化、开源模型本地私有化部署、从零构建大语言模型、智能体构建以及大语言模型的发展趋势
深入理解和掌握大语言模型的前言技术,涵盖了提示词优化、GPTs逆向工程、大语言模型原理、大语言模型优化、开源模型本地私有化部署、从零构建大语言模型、智能体构建以及大语言模型的发展趋势。通过系统化的学习,不仅掌握理论知识,还能在实际…...

nn.Conv2d(二)
**前置知识: 1、nn.Conv2d和torch.nn.functional.conv2d的对比: nn.Conv2d(能自主学习,更新调整卷积核) 模块:可以看作是一个“卷积层”,用在神经网络里。定义一次,用多次…...

获取鸿蒙设备Udid遇到的问题
参考官方文档:注册调试设备-调试应用(HarmonyOS)-AppGallery Connect帮助中心 - 华为HarmonyOS开发者 (huawei.com) 坑一:The sdk hdc.exe version is too low, please upgrade to the latest version. 升级dev工具和sdk配置为api…...

【华为HCIP实战课程十】OSPF网络DR和BDR实战讲解,网络工程师
一、DR与BDR的基础介绍 点到点同步LSA成本小 多点接入网络同步LSA成本大,需要DR/BDR 由于MA网络中,任意两台路由器都需要传递路由信息,网络中有n台路由器,则需要建立n*(n-1)/2个邻接关系。任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源,DR和BDR应运而生!…...

视频怎么去除杂音保留人声?让人声更动听!视频噪音处理攻略
在视频制作过程中,音质是至关重要的一环。然而,很多时候我们录制的视频会伴随着各种不想要的杂音,比如风声、交通噪音或是其他环境音,这些杂音严重影响了观众的观看体验。那么,如何在保留人声的同时,有效地…...

洗衣店数字化转型:Spring Boot订单管理
3系统分析 3.1可行性分析 通过对本洗衣店订单管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本洗衣店订单管理系统采用JAVA作为开发语言,S…...

Koa学习
Koa 安装与配置 1. 初始化项目 在终端中执行以下命令: # 创建项目文件夹 mkdir koa cd koa# 初始化并安装依赖 npm init -y npm install koa npm install nodemon --save-dev2. 修改 package.json 在 package.json 文件中进行如下修改: {"type…...