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

SQL高级技巧之埋点解析

一、背景

大数据时代,数据来源主要是业务系统以及用户行为日志,其中 ,用户行为日志的形式主要是埋点,埋点的形式通常是Json格式的字符串,属于半结构化数据,如何将其规范化并入仓?后续如何方便使用?这就需要数仓工作者深思熟虑。

二、案例

用户打开APP并浏览时会触发条目曝光,我们会将曝光日志上传到 Kafka,并 Sink 到数仓,然后通过 ELT 开发相应的底表供使用,但是埋点不是一成不变的,随着产运增加相应的埋点变量,表的字段也会逐渐增多,表结构的频繁变更势必对下游造成影响,为避免频繁变更表结构,我们使用lef字段储存剩余未解析的埋点变量,无论后期增加多少埋点变量,直接从lef中解析即可。
但是在开发过程中也遇到一些问题,那就是lef中的数据该如何储存?下面为大家一一道来,请看CASE:

在这里插入图片描述
起初,lef中字段是以JSON形式存储,但是随着一些不重要的且非埋点事件本身的数据也不像单独放在表中,所以考虑跟lef合并在一起,代码如下:

select 
       lef
      ,recv_ts
      ,to_json(named_struct('lef',lef,'recv_ts',recv_ts)) as json_str
from tmp_test where pt = max_pt('tmp_test')
limit 30;

结果如下:
在这里插入图片描述
在这里插入图片描述
其中,json_str 就是最终字段,但在使用时并不方便,比如解析其中ifAiAnswer_var,代码如下:

select get_json_object(get_json_object(lef,'$.lef'),'$.ifAiAnswer_var') 
from table
;

本来 get_json_object 函数支持通过 get_json_object(column,'$.val1.val2') 获取,所以对代码做了修改:

select 
       lef
      ,recv_ts
      ,to_json(named_struct('lef',from_json(lef,'map<string,string>'),'recv_ts',recv_ts)) as json_str
from tmp_test where pt = max_pt('tmp_test')
limit 30;

结果如下:
在这里插入图片描述
这个时候,就可以根据 path 向下直接获取了。


http://www.kler.cn/a/550940.html

相关文章:

  • Linux之kernel(1)系统基础理论(3)
  • GPT-4与内容生成:从写作到编程的跨越
  • Rust学习总结之所有权(三)
  • 深入解析 VIE(Variable Interest Entity,可变利益实体)架构:中国公司如何在海外上市?
  • Supabase全面介绍与使用指南
  • 【合集】Java进阶——Java深入学习的笔记汇总 再论面向对象、数据结构和算法、JVM底层、多线程、类加载、
  • Debezium同步之如何同步GIS数据
  • 字节跳动AI编辑器Trae基本配置教程
  • Retrofit+OkHttp+ViewModel
  • Web后端 Tomcat服务器
  • 基于pytest+requests+allure+yaml实现接口自动化测试框架
  • LeetCode 1287.有序数组中出现次数超过25%的元素:遍历
  • 【BUG】LLM|Ubuntu 用 ollama 部署 DeepSeek 但没输出,llama 有输出
  • 【第1章:深度学习概览——1.5 深度学习的核心组件与概念解析之损失函数与优化算法的选择】
  • OneCode 组件分类整理及枚举介绍
  • TensorFlow深度学习实战(8)——卷积神经网络
  • Spring MVC 的核心以及执行流程
  • Python实用技巧:轻松上手自动化数据爬取与存储
  • DeepSeek原理介绍以及对网络安全行业的影响
  • 计时器任务实现(保存视频和图像)