SQL高级技巧之埋点解析

一、背景

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

二、案例

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

但是在开发过程中也遇到一些问题,那就是lef中的数据该如何储存?下面为大家一一道来,请看CASE:

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

sql 复制代码
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,代码如下:

sql 复制代码
select get_json_object(get_json_object(lef,'$.lef'),'$.ifAiAnswer_var') 
from table
;

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

sql 复制代码
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 向下直接获取了。

相关推荐
江畔柳前堤18 分钟前
第15章:docker故障排查与面试题
大数据·运维·git·elasticsearch·docker·容器·eureka
2601_9568657741 分钟前
AI企业内训的“效果转化”密码:从“学AI”到“用AI”的机构能力拆解
大数据·人工智能
A-刘晨阳1 小时前
关键基础设施安全底座:自主可控时序大模型TimechoAI的国产化实践与深度时序分析能力
大数据·数据库·安全·时序数据库
武子康1 小时前
调查研究-212 智谱 ZCode Harness for GLM-5.2:国产 Coding Agent 从“模型能力“走向“工程执行环境“
大数据·人工智能·深度学习·llm·claude·glm·智谱
隔窗听雨眠1 小时前
拓宽智能体跑道:亚马逊云科技AgentCore Runtime配额升级背后的基础设施逻辑
大数据·人工智能·科技
Databend1 天前
2KB histogram 背后:Databend 如何低成本追踪长尾延迟
大数据·数据分析·agent
Databend1 天前
从湖仓升级为 Agent 时代的数据控制面,Snowflake 和 Databricks 有哪些布局
大数据·数据库·agent
阿里云大数据AI技术2 天前
StarRocks x Fluss x Paimon湖流一体方案:构建秒级响应、湖流一体的实时数据引擎
大数据·人工智能
Databend2 天前
Agent 轨迹分析与归因的数据工程实践
大数据·数据库·agent
喵个咪2 天前
Go Wind UBA 拆解系列 - 架构总览:三服务、数据流与契约优先
大数据·后端·go