基于 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。