数据湖 Table format 中个别的功能

总结下来 Table format 有四点核心特性。

第一,结构自由。像之前的 Hive 只能支持简单的加列操作,而在 Delta、Iceberg 这样的 Table format 之上用户可以自由地更改表的结构,可以加列、减列、改列,而且对数据的迁移和变更不会有要求。

第二,读写自由。因为它通过快照能够保证数据的 ACID,任何实时、离线以及 AI 的需求都可以自由地往这个表里面写数据或者读数据。

第三,流批同源。因为 Table format 核心的一个功能是可以很好地支持流场景,我们的批和流都可以往新的 Table format 去写和读。

第四,引擎平权。这点非常重要,它不能只是绑定某一个引擎,比如说像 Delta 在 1.0 时代是 Spark 生态中的一个组件,在一个月之前 Delta2.0 的发布再次向我们证明了去适配多个引擎的重要性。

在 Table format 这些项目的官网中,他们会主推一些功能主要包含 CDC、SQL 扩展,数据的 Rollback,以及 time travel,模式演进(Schema evolution)以及我们经常说的流式更新(Upsert)、读时合并(merge-on-read)的功能。

CDC 一定程度上能起到平替消息队列的作用,比如说在生产场景中,实时计算主要会用 Kafka 或者 Pulsar 做流表的选型。有了 Table format 之后,我们可以基于数据湖来实现类似于消息队列的功能,当然它的数据延迟会从毫秒或者秒级降级为分钟级别。像 Upsert、读时合并和行业内或者说很多公司去推广数据湖的主要场景,就是拿这个实时更新以及读时合并去平替 Apache Kudu、Doris、Greenplum 这些实时更新的数仓系统。

企业需要怎样的数据湖

首先一点是如果我们只是关注数据湖 Table format 中个别的功能,推广起来是非常困难的。比如说数据湖的 CDC 功能,确实在某种程度上能够平替消息队列,但是也会引入一些其他的问题:首先是延迟的问题;其次是用数据湖做消息队列可能会引入很多小文件,这个小文件谁来管理?还有第三个是比较隐形的问题,以前消息队列的成本就是挂在业务团队那边,如果我们现在用一个公共的数据湖底座,这个成本该怎么分摊?

在过去两年中,我们跟行业内很多公司交流,大体上都是在这样一种矛盾之中挣扎,想用数据湖的新技术来替代一些其他方案,对业务的吸引力是非常不足的。我们的数据湖或者 Lakehouse(湖仓一体)的技术究竟能给企业带来怎样的价值?

在我们的生产场景中,我们的整个数据平台体系在 2020 年遇到最主要的问题,就是流批平台割裂。大家知道我们围绕 Hive 这套离线数仓已经产生了非常丰富的方法论,从数据模型、数据资产到数据质量,基于数据湖的开放架构我们产生了非常好的一套规范、标准以及治理体系。

但是我们把目光切换到实时场景下,目前主要用 Flink 做实时计算,用 Kafka 作为流表的选型,当我们做流表 join 时可能单独需要从数据库那边拉一个实时同步的任务,后面如果我们做数据分析,需要比较高的数据新鲜度,需要引入 Kudu 或者 Doris 这些能够准实时或者实时更新的数仓系统。

这套东西和我们离线整套的技术选型以及工具是非常割裂的,而且没有形成比较好的规范,主要还是点对点的开发为主。

举个例子,如果我们既要做实时也要做离线,就需要拉两套链路。离线的链路根据我们整套方法论,根据离线整个流程的工作流,是能比较容易规范地定义出一套出来。实时场景下我们更多需要开发者,需要用户自己去了解 Flink 怎么玩儿,Kafka 怎么读,这个过程中序列化、反序列化怎么做,怎么在 Kudu 上建表,这一套规范给用户带来了非常大的负担。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Layui table 是一种基于Layui框架的表格插件,它可以方便地实现表格的展示、分页、排序、筛选等功能。关于表格的格式化,Layui table 提供了多种方式: 1. 格式化单元格内容:通过 table.render() 方法的 templet 属性可以自定义单元格的内容,例如: ```javascript table.render({ elem: '#demo', cols: [[ {field: 'name', title: '姓名'}, {field: 'score', title: '分数', templet: function(d){ return d.score + ' 分'; }} ]], data: [ {name: '张三', score: 90}, {name: '李四', score: 80} ] }); ``` 2. 格式化列头:通过 table.render() 方法的 toolbar 属性可以自定义列头的内容,例如: ```javascript table.render({ elem: '#demo', cols: [[ {field: 'name', title: '姓名'}, {field: 'score', title: '分数'} ]], toolbar: '<div>自定义列头内容</div>', data: [ {name: '张三', score: 90}, {name: '李四', score: 80} ] }); ``` 3. 格式化行数据:通过 table.render() 方法的 done 属性可以自定义行数据的展示方式,例如: ```javascript table.render({ elem: '#demo', cols: [[ {field: 'name', title: '姓名'}, {field: 'score', title: '分数'} ]], done: function(res, curr, count){ var data = res.data; for(var i=0;i<data.length;i++){ data[i].score = data[i].score + ' 分'; } table.reload('demo', { data: data }); }, data: [ {name: '张三', score: 90}, {name: '李四', score: 80} ] }); ``` 以上是 Layui table 的三种格式化方式,你可以根据实际需求选择合适的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值