GraphScope
GraphScope copied to clipboard
Support Cypher with GAIA-IR
TBD
目前compiler主要支持了gremlin语言,并引入antlr做相关的语法检查,整体链路大致为antlr语法检查->ast树 (traversal结构) -> ir表示层,主要功能是针对不同的用户层语言检查并翻译为ir的algebra表示,具体步骤为:
- 在antlr语法层,我们定义了一系列gremlin语法 ,并通过antlr翻译为相应的antlr语法树,compiler基于antlr的语法树结构作进一步parse,转化为gremlin相关的ast结构;
- 在优化层,我们基于traversal结构apply一些启发式优化,i.e. fuse V/E + filter && fuse outE+filter/inV/count ...
- 在ast翻译层,我们进一步将ast结构翻译为ir的逻辑表示,这个部分主要是对gremlin功能接近的算子进行聚合,并对齐到ir提供的algebra接口上;
gremlin在语言定义和表示方面存在一定缺陷,一方面gremlin提供的算子太过揉杂,算子和算子之前的功能边界并不清晰,在用户使用方面会觉得太过复杂;另一方面,gremlin的语言定义和执行并没有很好的解耦,自带的ast结构不仅仅包含算子表示,还包括了内部实现,当引入其他语言时 (i.e. cypher),这样的结构很难直接用来复用;
为了避免上述问题,在引入cypher时,我们会重新定义/refine中间的ast结构,目前考虑参考gsql的相关表示,并将gremlin的相关算子统一到该结构上;更进一步的,我们会基于该结构apply相关的逻辑执行优化,目前考虑参考calcite的parser层;