基于 Apache Calcite 的多引擎指标管理最佳实践
谢佳君
中文演讲 2023-08-18 16:45 GMT+8 #olap数据分析中有着各种各样的指标,在维护海量指标的时候,常常有如下的痛点:
- 重复片段无法得到复用。
- 不同引擎需要编写不同的SQL。
- 口径变更难以同步到所有下游。
为了解决这些问题,字节跳动尝试过用已有的技术能力设计方案:
- 将指标尽可能地存储到 Hive 表中:会极大增大存储成本和回溯成本,不太可行。
- 将指标封装到View中:不仅会在Hive产生额外的表信息导致表数量翻倍,而且对分区的支持不友好。查询使用体验较差,因此难以推广。
因为目前已有的技术不足以解决上述问题,所以字节跳动基于Apache Calcite设计并实现了两套新的语法能力:
- 虚拟列:列级别的视图,复用表列权限,推广简单。
- SQL Define Function:使用SQL直接定义函数,方便SQL片段的复用。
这两项能力结合,可以有效降低指标管理的成本例如:
- 指标仅需修改一次,无须下游再同步修改。
- MAP、JSON等集合类型中的字段可以定义成虚拟列,逻辑更加清晰、使用更加方便。
具体典型案例和实现原理将会在演讲PPT中进行介绍。
Speakers:
谢佳君: 字节跳动, 字节跳动高级研发工程师, 字节跳动高级研发工程师,曾参与2022年Apache Asia Con的演讲。
热爱开源,经常参与社区工作,现在是Apache Calcite active committer和Linkedin Coral Contributor。