大数据从专家到小白

数据湖技术

Apache Iceberg

Iceberg是一个通用的表格式(数据组织格式),它可以适配Presto,Spark等引擎提供高性能的读写和元数据管理功能。

Schema

SQL关系模型:要求数据预先定义好Schema(有哪些表,每张表有哪些列,每一列的类型是什么),然后按照定义好的Schema去写数据。

文档模型:对于数据Schema的要求非常灵活,每条数据就是一个文档,文档内部的数据格式不做严格限定。

对数据模型的限制,反过来也会成为一种对灵活性的束缚。在大数据场景中,半结构化、无结构化的数据是非常常见的,因此也催生了 Schema-on-Write 和 Schema-on-Read 两种不同的处理方式。

Schema-on-Read(场景更灵活)

指的是原始数据在写入的时候不做过多的校验。而在查询之前,再去按照查询分析的需求去定义一个Schema并分析(动态决定以何种视角看待数据),类似在数据之上按需建立一个视图。这种方式显然更灵活,但相应的性能上会一般会打一些折扣。

步骤

1.基于查询语句的语义推断​
从用户输入的SQL语句中自动推断出所需要的Schema。
用户提交SQL查询时,系统首先对语句进行词法分析和语法解析,生成抽象语法树(AST)
通过遍历语法树提取​​投影字段(SELECT子句)​​、​​过滤条件(WHERE子句)​​等关键信息,直接推断出查询所需的字段名类型

eg:对于SELECT id, login_time FROM logs WHERE status=200,系统会从语法树中识别需要提取id、login_time和status三个字段,并根据status=200的等值判断初步推断status为数值类型

2.动态数据内容解析​
针对半结构化数据,系统在读取原始数据时,按需解析其内部结构。
JSON数据​​:递归解析嵌套字段,自动识别键值对并映射为临时列。
​​日志行​​:通过正则匹配或分隔符拆分,提取键值对形式的字段。
若数据中存在多态结构(如某字段在不同记录中类型不同),系统会根据实际值动态转换类型(如将混合的字符串和数值统一为字符串)。

3.​​运行时类型推导​​
字段类型并非预先定义,而是在计算过程中根据​​数据内容​​和​​操作语义​​动态确定
若字段参与算术运算(如SUM(price)),则尝试将其解析为数值类型。
若字段用于字符串函数(如SUBSTR(title,1,5)),则强制作为字符串处理。
对于无法明确推断类型的场景(如未参与运算的纯投影字段),默认采用兼容性更高的类型(如VARCHAR)。

4.容错与缺省处理​​
当查询字段在部分数据中不存在时,系统会填充NULL值而非报错,保证查询可执行。
对于嵌套结构(如JSON数组),通过列式展开(Flatten)自动生成多行记录,无需预先定义嵌套关系

Schema-on-Write(性能更高):对应关系模型

数据的Schema是预先定义好的。数据在写入数据仓库之前,必须要按照定义好的Schema去写入。如果原始数据不符合定义的Schema,则需要先通过一些ETL的过程去对数据进行清洗加工,然后再写入。数据写入的同时,往往能够根据确定的Schema建立一些索引结构,查询的时候也同样直接按照确定的Schema去查询,往往能够获得较好的查询性能。

创建字段索引的时候,指定了有哪些字段,每个字段是什么类型,相当于创建了一个关系模型的Schema。
字段索引开启统计后,会为字段构建列存,从而在执行时可以高效读取指定列的数据。

没有索引也能用SQL ?深度解析 SLS Schema-on-Read 分析原理与应用
面向异构数据的Schema-on-Read分析技术设计与实践

Flink

Hive

Hadoop

HDFS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值