Velox开发环境配置踩坑记录
Velox是Facebook开源的数据库执行引擎,这几天起了兴趣准备试下,中文搜索引擎也没搜出环境配置的教程,于是就写了这篇记录下踩坑情况
环境
WSL2(Docker)
32GB Memory(分配给Docker 24GB)
Ryzen5 4600H(6核12线程,分配给Docker 8个线程)
配置
有了前面LLVM和MLIR的配置经验,那就不多哔哔,直接上Docker
1 | docker pull ghcr.io/facebookincubator/velox-dev:ubuntu-22.04 |
(”镜像怎么加速“这个问题不属于本篇内容)
拉取完后记得-it/-itd
启动镜像,
1 | docker run -itd --name Velox ghcr.io/facebookincubator/velox-dev:ubuntu-22.04 /bin/bash |
然后VScode Dev Container进去,就像下面这张图
切换到根目录删除根目录下的/velox
,重新Git Clone份最新的(Velox项目每天都有更新,变化很大)
1 | rm /velox |
直接make会报错,需要事先安装pkg-config
(如果make
报错再安装也不迟)
1 | apt insatll pkg-config |
大约有1200多项需要编译(内存最高占用到18GB,开8个线程需要编译快1个小时)
测试Demo的可执行文件在_build/release/velox/exec/tests/velox_in_10_min_demo
Velox In 10 minutes
https://facebookincubator.github.io/velox/velox-in-10-min.html
如果要新增/修改CPP文件,直接make即可
在velox/exec/tests/VeloxIn10MinDemo.cpp
中的VeloxIn10MinDemo::run()
中可以见到演示代码
在启动演示代码之前,VeloxIn10MinDemo
这个类用于初始化,关键字有PrestoSQL,DuckDB,TPC-H,还提供了parseExpression
,compileExpression
,makeTpchSplit
等函数:
1 | class VeloxIn10MinDemo : public VectorTestBase { |
教程写着:虽然Velox不提供SQL Parser,但测试环境提供DuckDB的SQL Parser作为参考
奇怪的是,如果我单独保留vectors
章节的代码,程序编译就会报错
1 | TypeResolver.cpp:(.text+0x4d): undefined reference to `facebook::velox::core::Expressions::resolverHook_' |
代码运行记录
data->toString(1, 5)
输出1到4行,不填输出列属性
1 | std::cout << data->toString(1, 5) << std::endl; |
compileExpression
函数如下图所示,似乎依赖PrestoSQL
?
1 | std::unique_ptr<exec::ExprSet> compileExpression( |
compileExpression
函数会生成AST树,而经过evaluate
才会转为执行结果
1 | VectorPtr evaluate(exec::ExprSet& exprSet, const RowVectorPtr& input) { |
有了PlanBuilder()
就可以实现Aggregations
,Sorting
,Filtering
,Joins
这些操作,甚至支持与TPC-H
的Connector(”TPC-H connector generates TPC-H tables on the fly”)
1 | plan = PlanBuilder() |
结语
感觉Velox in 10 minutes更多的是提起人们对Velox的兴趣,而非展示Velox的执行细节(这部分内容需要Debug去寻找)