diff options
| author | HeZhengjie <[email protected]> | 2021-01-19 00:05:46 +0800 |
|---|---|---|
| committer | HeZhengjie <[email protected]> | 2021-01-19 00:05:46 +0800 |
| commit | 98e99d54f73572c3231fb85f49bc0178129b1ab4 (patch) | |
| tree | becc6caf7e56d33ba9fcba2e97de8c33dd683c1e | |
| parent | 08dce375a2cf967d939722850598481cfaf64bd5 (diff) | |
Upload New File
| -rw-r--r-- | 用OpenLooKeng来使用ClickHouse吧_.md | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/用OpenLooKeng来使用ClickHouse吧_.md b/用OpenLooKeng来使用ClickHouse吧_.md new file mode 100644 index 0000000..ae614f2 --- /dev/null +++ b/用OpenLooKeng来使用ClickHouse吧_.md @@ -0,0 +1,234 @@ +## 用OpenLooKeng在使用ClickHouse + +### 为什么要用OLK来使用CH呢? + +当然不是为了快(毫无疑问😊)~ + +如果你有clickhouse和其他多个数据源交互的需求,比如mysql,hbase呀。 + +如果你有跨DC的需求呀。 + +使用OpenLooKeng是一个好的选择,使用olk来接入clickhouse,避免了不同数据源之间数据类型的转换,但同样也对数据类型和sql语法进行了限制,需要根据需求进行选择。 + +#### 简单的尝试 + +oPenLooKeng提供了对其特性的试用, + +### OLK的基本安装使用 + +#### 安装 + +按照官方文档,可以[手动部署][https://openlookeng.io/zh-cn/docs/docs/installation/deployment.html]和[自动部署][https://openlookeng.io/zh-cn/docs/docs/installation/deployment-auto.html],如果想自己上手玩一玩,可以自己去编译源代码,[参考开发者指南][https://openlookeng.io/zh-cn/docs/docs/develop/getting-started.html]。 + +#### 命令行接口 + +openLooKeng CLI提供了一个基于终端的交互shell,用于运行查询。CLI是一个可执行的JAR文件,可以通过`java -jar ./hetu-cli-*.jar`执行。 + +下载于服务器对应版本的 CLI 文件,例如:`hetu-cli-1.0.0-executable.jar`,运行: + +```shell +java -jar ./hetu-cli-1.0.0-executable.jar --server localhost:8080 --catalog hive --schema default +``` + +使用`--help`选项运行CLI,查看可用选项。 + +#### 使用JDBC操作 + +mvn依赖: + +``` +<dependency> + <groupId>io.hetu.core</groupId> + <artifactId>hetu-jdbc</artifactId> + <version>1.0.1</version> +</dependency> +``` + +这里是1.0.1,目前社区版本已经到1.1.0。 + +JDBC URL支持的格式为: + +``` +jdbc:lk://host:port +jdbc:lk://host:port/catalog +jdbc:lk://host:port/catalog/schema +``` + +这里catalog可以视为不同的数据源,schema可以视为不同的database,比如: + +``` +String url = "jdbc:lk://example.net:8080/hive/sales"; +Connection connection = DriverManager.getConnection(url, "test", null); +``` + +具体的连接参数参考[文档][https://openlookeng.io/docs/docs/installation/jdbc.html]。 + +#### 编译源代码 + +如果你想自己折腾一下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命令编译并跳过检查: + +``` +./mvnw clean install -DskipTests +``` + +可以用多进程加速 + +``` +./mvnw -T 2C clean install -DskipTests +``` + +使用以下选项创建运行配置: + +``` +Main Class:io.prestosql.server.PrestoServer +VM Options:-ea -XX:+UseG1GC -XX:G1HeapRegionSize=32M -XX:+UseGCOverheadLimit -XX:+ExplicitGCInvokesConcurrent -Xmx2G -Dconfig=etc/config.properties -Dlog.levels-file=etc/log.properties +Working directory:$MODULE_DIR$ +Use classpath of module:presto-main +``` + +点击IDEA上的运行,然后在浏览器中输入`http://localhost:8080/`进入olk的web端。 + +> 踩坑需知: +> +> presto/openLooKeng要求开发环境为MacOS或Linux,如果你是winodws代码,修改很小部分的代码也能运行,参考[这里][https://blog.csdn.net/ufolr/article/details/108809522]。 +> +> 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[文档][https://gitee.com/heatao/hetu-core]。 + +### 函数和语法的转变 + +尤其需要注意的是,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表达式 + +#### 内置函数 + +##### 聚合统计函数 + +``` +CORR($1,$2) +STDDEV($1) +stddev_pop($1) +stddev_samp($1) +skewness($1) +kurtosis($1) +VARIANCE($1) +var_samp($1) +``` + +##### 数学函数 + +``` +ABS($1) +ACOS($1) +ASIN($1) +ATAN($1) +ATAN2($1,$2) +CEIL($1) +CEILING($1) +COS($1) +e() +EXP($1) +FLOOR($1) +LN($1) +LOG10($1) +LOG2($1) +MOD($1,$2) +pi() +POW($1,$2) +POWER($1,$2) +RAND() +RANDOM() +ROUND($1) +ROUND($1,$2) +SIGN($1) +SIN($1) +SQRT($1) +TAN($1) +``` + +##### 字符串函数 + +``` +CONCAT($1,$2) +LENGTH($1) +LOWER($1) +LTRIM($1) +REPLACE($1,$2) +REPLACE($1,$2,$3) +RTRIM($1) +STRPOS($1,$2) +SUBSTR($1,$2,$3) +POSITION($1,$2) +TRIM($1) +UPPER($1) +``` + +##### 时间函数 + +``` +YEAR($1) +MONTH($1) +QUARTER($1) +WEEK($1) +DAY($1) +HOUR($1) +MINUTE($1) +SECOND($1) +DAY_OF_WEEK($1) +DAY_OF_MONTH($1) +DAY_OF_YEAR($1) +``` + +#### 子句 + +order by + +group by + +limit + +having + +## 如果发现了bug,请务必告诉我!谢谢大噶
\ No newline at end of file |
