ClickHouse用UDF解析XML字符串和XML文件

news2025/1/13 13:51:10

一.如果是读取xml文件的时候,文件入库需要使用文件读取UDF

创建了1个测试文件

wsdFileRead(): 直接读取文件内容

SELECT wsdFileRead('/home/temp/wsd_test.xml')

Query id: 09b6e5fe-7169-43f7-b001-90e2eeabb8da

┌─wsdFileRead('/home/temp/wsd_test.xml')─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ <?xml version="1.0" encoding="UTF-8"?><des>  <context>    <ANNOUNCEMENT_START_TIME>20240416</ANNOUNCEMENT_START_TIME>    <LAND_DISTRICT>1101202</LAND_DISTRICT>    <FIELD_NUM>12</FIELD_NUM>    <TRA_AGENCY_CODE>11110000MB03920782F</TRA_AGENCY_CODE>    <PUB_SERVICE_PLAT_CODE>121100002400591890H</PUB_SERVICE_PLAT_CODE>    <UNIT_ADDRESS>TEST1</UNIT_ADDRESS>    <LAND_PROJECT_NAME>TEST2</LAND_PROJECT_NAME>  </context></des> │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

1 row in set. Elapsed: 0.002 sec.

wsdFileReadB64(): 读取文件内容并base64加密

SELECT wsdFileReadB64('/home/temp/wsd_test.xml')

Query id: 76ea5d06-7802-4f71-98e5-0728d9b0372e

┌─wsdFileReadB64('/home/temp/wsd_test.xml')──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48ZGVzPiAgPGNvbnRleHQ+ICAgIDxBTk5PVU5DRU1FTlRfU1RBUlRfVElNRT4yMDI0MDQxNjwvQU5OT1VOQ0VNRU5UX1NUQVJUX1RJTUU+ICAgIDxMQU5EX0RJU1RSSUNUPjExMDEyMDI8L0xBTkRfRElTVFJJQ1Q+ICAgIDxGSUVMRF9OVU0+MTI8L0ZJRUxEX05VTT4gICAgPFRSQV9BR0VOQ1lfQ09ERT4xMTExMDAwME1CMDM5MjA3ODJGPC9UUkFfQUdFTkNZX0NPREU+ICAgIDxQVUJfU0VSVklDRV9QTEFUX0NPREU+MTIxMTAwMDAyNDAwNTkxODkwSDwvUFVCX1NFUlZJQ0VfUExBVF9DT0RFPiAgICA8VU5JVF9BRERSRVNTPlRFU1QxPC9VTklUX0FERFJFU1M+ICAgIDxMQU5EX1BST0pFQ1RfTkFNRT5URVNUMjwvTEFORF9QUk9KRUNUX05BTUU+ICA8L2NvbnRleHQ+PC9kZXM+ │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

1 row in set. Elapsed: 0.002 sec.

二.如果处理clickhouse的字段含有xml字符串的情况

1.导入自定义UDF 

函数名

  • wsdXpathArrB64('参数1',参数2)
  • wsdXpathB64('参数1‘,'参数2')

2.wsdXpathB64

此函数参数1传递字段值,需要base64编码,保证了xml字段数据如果含有特殊符号也可以解析成功,

参数2传递xpath表达式

这里我随便选取一个时间节点它的表达式是/des/context/ANNOUNCEMENT_START_TIME

具体使用 

SELECT decodeURLComponent(base64Decode(submit_content)) AS ROUTE_WAY
FROM
(
    SELECT wsdXpathB64(base64Encode(submit_content), '/des/context/ANNOUNCEMENT_START_TIME') AS submit_content
    FROM WSD_CONTENT
    WHERE sid = '001100005c20f73c4232b626dba00fa921ce'
)
LIMIT 4

Query id: f0dc9ace-c05d-4a47-b12f-f7102093fa57

┌─ROUTE_WAY─┐
│ 20240416  │
└───────────┘

3.wsdXpathArrB64

第一个参数和上面的函数一样,base64编码后的字段

第二个参数传一个xpath表达式的数组

具体如下

SELECT
    sid,
    decodeURLComponent(base64Decode(submit_content[1])) AS ROUTE_WAY,
    decodeURLComponent(base64Decode(submit_content[2])) AS DATA_NO,
    decodeURLComponent(base64Decode(submit_content[3])) AS DATA_KEY,
    decodeURLComponent(base64Decode(submit_content[4])) AS CA_KEY,
    decodeURLComponent(base64Decode(submit_content[5])) AS DATA_EN,
    decodeURLComponent(base64Decode(submit_content[6])) AS DATA_TYPE,
  
FROM
(
    SELECT
        wsdXpathArrB64(base64Encode(replaceRegexpAll(submit_content, '\\+', ' ')), ['/des/title/ROUTE_WAY', '/des/title/DATA_NO', '/des/title/DATA_KEY', '/des/title/CA_KEY', '/des/title/DATA_EN', '/des/title/DATA_TYPE']) AS submit_content,
        sid
    FROM CEN_SUBMIT_CONTEXT_600
    WHERE sid = '0011726f801b96724c0790f9a38e3593cca7'
)

Query id: 147b7dba-f694-4cbc-84cd-85f781244d20

Row 1:
──────
sid:                     0011726f801b96724c0790f9a38e3593cca7
ROUTE_WAY:               0
DATA_NO:                 600
DATA_KEY:                ff8080818d548044018e59dc7ac10bde
CA_KEY:                  88888888889999999999
DATA_EN:                 DEAL_BEHAVIOR_INFO
DATA_TYPE:               1

4.解析xml文件

##使用不带base64加密的函数
SELECT
    wsdXpathB64(base64Encode(wsdFileRead('/home/temp/wsd_test.xml')), '/des/context/ANNOUNCEMENT_START_TIME') AS xx,
    base64Decode(xx) AS yy

Query id: d9db0f57-e187-4137-ba92-3024b5fe8e61

┌─xx───────────┬─yy───────┐
│ MjAyNDA0MTY= │ 20240416 │
└──────────────┴──────────┘

1 row in set. Elapsed: 0.004 sec.


###使用带base64加密的函数
SELECT
    wsdXpathB64(wsdFileReadB64('/home/temp/wsd_test.xml'), '/des/context/ANNOUNCEMENT_START_TIME') AS xx,
    base64Decode(xx) AS yy

Query id: 55a5da4b-46d6-4205-9844-3cd2c17a3a2b

┌─xx───────────┬─yy───────┐
│ MjAyNDA0MTY= │ 20240416 │
└──────────────┴──────────┘

1 row in set. Elapsed: 0.005 sec.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue--》深入了解 VueUse 功能性工具集

今天博主为大家介绍一款实用性的插件名字叫做 VueUse &#xff0c;它是专门为 Vue.js 生态系统设计的功能性工具集合。其提供了许多可重用的功能函数&#xff0c;可以帮助开发者更轻松地构建 Vue.js 应用程序。其提供了大量的功能&#xff0c;包括状态管理、副作用管理、组合式…

NCH WavePad for Mac:功能全面的音频编辑利器

NCH WavePad for Mac是一款功能全面的音频编辑软件&#xff0c;专为Mac用户设计。它集音频录制、编辑、处理和效果添加于一体&#xff0c;为用户提供一站式的音频解决方案。 NCH WavePad for Mac v19.16注册版下载 作为一款专业的音频编辑器&#xff0c;WavePad支持对音频文件进…

大厂产品专家是做晋升述职的?

在大厂里,晋升都是需要述职的。与年终述职不同,晋升述职要求严格很多。这种情况下,如何完美表达自己才是适合晋升的人选?这篇文章,值得即将晋升和准备晋升的各位看看。 之前学姐写了一篇文章,讲怎么做年度述职,反响还不错~有兴趣的童鞋可以戳这里复习。今天学姐来讲一个…

用Nest实现对数据库的增删改查~

概述 为了与 SQL和 NoSQL 数据库集成&#xff0c;Nest 提供了 nestjs/typeorm 包。Nest 使用TypeORM是因为它是 TypeScript 中最成熟的对象关系映射器( ORM )。因为它是用 TypeScript 编写的&#xff0c;所以可以很好地与 Nest 框架集成。 TypeORM 提供了对许多关系数据库的支…

WEB攻防-ASP中间件IIS 短文件名探针安全漏洞

IIS短文件名探针安全漏洞是一个与IIS&#xff08;Internet Information Services&#xff09;服务相关的安全问题。该漏洞主要是由于HTTP请求中使用了旧DOS 8.3名称约定&#xff08;SFN&#xff09;的代字符&#xff08;〜&#xff09;波浪号&#xff0c;这使得远程攻击者有可能…

使用 Meta Llama 3 构建人工智能的未来

使用 Meta Llama 3 构建人工智能的未来 现在提供 8B 和 70B 预训练和指令调整版本,以支持广泛的应用 使用 Meta AI 体验 Llama 3 我们已将 Llama 3 集成到我们的智能助手 Meta AI 中,它扩展了人们完成工作、创造和与 Meta AI 联系的方式。通过使用 Meta AI 进行编码任务和解…

ROS学习笔记(13)坐标变换(TF和TF2)

0.前提 我翻了一下我以前的教程发现我居然没有讲过TF坐标转换&#xff0c;那现在补上。在机器人学中坐标转换是一个极为重要的概念、内容&#xff0c;在大量的科技公司招聘机器人岗位的人才时掌握机器人运动学正解和逆解等都是加分项。机器人在实际应用当中会涉及到大量的位置…

椋鸟数据结构笔记#11:排序·下

文章目录 外排序&#xff08;外部排序&#xff09;文件拆分并排序归并文件两个文件归并多文件归并优化 萌新的学习笔记&#xff0c;写错了恳请斧正。 外排序&#xff08;外部排序&#xff09; 当数据量非常庞大以至于无法全部写入内存时&#xff0c;我们应该怎么排序这些数据呢…

冈萨雷斯数字图像处理资源(课后习题答案+代码+图片)

冈萨雷斯数字图像处理相关资源整理&#xff0c;资源全部来源互联网&#xff0c;方便大家下载 冈萨雷斯数字图像处理相关资源整理 课后习题 冈萨雷斯数字图像处理源代码

16.Nacos环境隔离

环境隔离namespace Namespace->Group->Service/Data->集群->实例 Namespace: Group&#xff1a; nacos控制台新增一个开发环境的命名空间&#xff1a;dev, 会产生命名空间的id。 将命名空间的id配置到微服务的配置文件中&#xff1a; spring:cloud:nacos:server…

MATLAB将多张小图整合到一张大图形成模板图

MATLAB将多张小图整合到一张大图形成模板图 代码如下: clc;close all;clear all;warning off;%清除变量 rand(seed, 100); randn(seed, 100); format long g;foldername字符模板; [datacell,filenamecell,filenameAllcell]readfun_1n(foldername); K2length(filenamecell);% …

25计算机考研院校数据分析 | 上海交通大学

上海交通大学电子信息与电气工程学院成立于2001年12月&#xff0c;其前身可湖源至百年前的电机专科&#xff0c;具有中国电气工程师“摇篮”之美称。50年代根据学科发展需要分为电工与计算机科学系(三系)和电子工程系(四系)。1985年&#xff0c;三系和四系合并&#xff0c;成立…

电子签名在人力资源中的应用:让HR工作更高效

人力资源&#xff08;HR&#xff09;行业是电子签领域的重要应用之一&#xff0c;它可以在以下场景中使用电子签&#xff1a; 1. 在招聘流程中&#xff0c;HR部门可以利用电子签名工具来完成与招聘候选人之间的任何文件签署操作。例如&#xff0c;维护人才库数据库、简历、面试…

RAG:智能图书馆员引领AI的知识之旅

想象一下&#xff0c;你是一个法官&#xff0c;面对一个复杂的案件&#xff0c;你需要查阅大量的法律文献来找到相关的案例和法律条文。在AI的世界里&#xff0c;也有一个类似的“法官”——大型语言模型&#xff08;LLMs&#xff09;。它们能够回答各种问题&#xff0c;但有时…

RISC-V CVA6 在 Linux 下相关环境下载与安装

RISC-V CVA6 在 Linux 下相关环境下载与安装 所需环境与源码下载 CVA6 源码下载 首先&#xff0c;我们可以直接从 GitHub 一次性拉取所有源码&#xff1a; git clone --recursive https://github.com/openhwgroup/cva6.git如果这里遇到网络问题&#xff0c;拉取失败&#x…

vulfocus靶场struts2 命令执行 CVE-2016-3081

远程攻击者利用漏洞可在开启动态方法调用功能的Apache Struts 2服务器上执行任意代码&#xff0c;取得网站服务器控制权。 影响版本: Struts 2.3.20 - Struts Struts 2.3.28 (except 2.3.20.3 and 2.3.24.3) 工具利用&#xff1a; struts2 综合利用工具&#xff1a; http://i…

4月23号总结

java实现发送邮件 在做聊天室项目的时候&#xff0c;由于需要发送邮箱验证码&#xff0c;所以自己查找了这方面的内容。 首先需要在Maven里面依赖 <dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><versio…

牛客社区所有的表和SQL语句

文章目录 1 帖子表 discuss_post1.1 字段描述1.2 相关功能描述1.2.1 分页查询帖子1.2.2 查询帖子总数量1.2.3 插入一条帖子记录1.2.4 根据帖子ID查询某条帖子1.2.5 更新帖子评论数量1.2.6 更新帖子类型1.2.6 更新帖子状态1.2.7 更新帖子分数 2 用户表 user2.1 字段描述2.2 相关…

spring一二三级缓存和@Lazy解决循环依赖流程

简单对象指的是 实例化后还没有属性注入的时候的早期bean lambda表达式用于判断a是否存在aop代理 假如a和b循环依赖&#xff0c;a实例化时&#xff0c; bean创建流程如下&#xff1a; 0&#xff0c;创建一个set记录当前正在实例化的bean&#xff0c; 1.实例化a的简单对象时…

陆金所控股一季报到底是利好还是利空?

3月底&#xff0c;陆金所控股&#xff08;LU.N;06623.HK&#xff09;因其特别分红方案受到市场高度关注。但在4月23日发布的2024年一季度财报中&#xff0c;陆金所控股营收同比下降30.9%&#xff0c;净亏损8.3亿元。 两者对比&#xff0c;外界不由得对公司的经营状况产生疑惑。…