ClickHouse + openLooKeng = ?
用openLooKeng查询ClickHouse
为什么要用OLK来使用CH呢?
当然不是为了快(毫无疑问)~
如果你有clickhouse和其他多个数据源交互的需求,比如mysql,hbase呀。
如果你有跨DC的需求呀。
使用openLooKeng是一个好的选择,使用olk来接入clickhouse,避免了不同数据源之间数据类型的转换,但同样也对数据类型和sql语法进行了限制,需要根据需求进行选择。
简单的尝试
oPenLooKeng提供了对其特性的试用,
OLK的基本安装使用
安装
按照官方文档,可以手动部署和自动部署,如果想自己上手玩一玩,可以自己去编译源代码,参考开发者指南。
命令行接口
openLooKeng CLI提供了一个基于终端的交互shell,用于运行查询。CLI是一个可执行的JAR文件,可以通过java -jar ./hetu-cli-*.jar
执行。
下载于服务器对应版本的 CLI 文件,例如:hetu-cli-1.0.0-executable.jar
,运行:
1 | java -jar ./hetu-cli-1.0.0-executable.jar --server localhost:8080 --catalog hive --schema default |
使用--help
选项运行CLI,查看可用选项。
使用JDBC操作
mvn依赖:
1 | <dependency> |
这里是1.0.1,目前社区版本已经到1.1.0。
JDBC URL支持的格式为:
1 | jdbc:lk://host:port |
这里catalog可以视为不同的数据源,schema可以视为不同的database,比如:
1 | String url = "jdbc:lk://example.net:8080/hive/sales"; |
具体的连接参数参考文档。
编译源代码
如果你想自己折腾一下olk,从源码入手直接编译是一个不错的选择。
环境要求:
- Mac OS X或Linux
- Java 8 Update 161或更高版本(8u161+)(64位)。同时支持Oracle JDK和OpenJDK。
- Maven 3.3.9+(用于构建)
- Python 2.4+(与启动器脚本一起运行)
从Gitee上pull最新版本代码:
https://gitee.com/openlookeng/hetu-core?_from=gitee_search
运行mvn命令编译并跳过检查:
1 | ./mvnw clean install -DskipTests |
可以用多进程加速
1 | ./mvnw -T 2C clean install -DskipTests |
使用以下选项创建运行配置:
1 | Main Class:io.prestosql.server.PrestoServer |
点击IDEA上的运行,然后在浏览器中输入http://localhost:8080/
进入olk的web端。
踩坑需知:
presto/openLooKeng要求开发环境为MacOS或Linux,如果你是winodws代码,修改很小部分的代码也能运行,参考这里。
maven仓库路径需要为默认.m2/repository,这个问题当时搞了我好久!
加入ClickHouse驱动
OLK支持接入不同的数据源,包括hive,hana,mysql等,除了官网列举的这些,还可以从Gitee/Github下载其他贡献者提交的connector。
olk的clickhouse驱动可以去我的Gitee仓库下载https://gitee.com/heatao/hetu-core。
编译完成后移动到openLooKeng plugin目录k并在catalog目录下添加clickhouse的catalog,重启olk即可。
具体可以参考clickhouse connector文档。
函数和语法的转变
尤其需要注意的是,clickhouse的语法并非完全和sql03的标准一致,很多clickhouse的函数或语法并不在olk中支持,即便下推也很难做到这一点。
使用olk查询clickhouse,为了兼容不同的数据源,需要使用olk的语法。
olk支持的全部语法:
https://openlookeng.io/zh-cn/docs/docs/functions/logical.html
olk的语法在connector中并非全部支持,还需要数据源有对应的实现,大部分语法只要数据类型一致,在==非下推==的条件下,大部分函数皆可使用,数据会从不同的数据源,比如clickhouse被查询到内存中,openlookeng再进一步处理。
在==下推==条件下,语法仅支持connector函数支持的,目前clickhouse支持的函数如下(未来会支持更多):
操作符
- 逻辑运算:AND/OR/NOT
- 算术运算:+-*=/|&
- 注意在ol中的 / 是向下 取整,相当于intDiv
- 比较运算:> < >=, <=,!=
表达式
Case表达式,between and表达式,in表达式,Like表达式,is null表达式
内置函数
聚合统计函数
1 | CORR($1,$2) |
数学函数
1 | ABS($1) |
字符串函数
1 | CONCAT($1,$2) |
时间函数
1 | YEAR($1) |
子句
order by
group by
limit
having