summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeZhengjie <[email protected]>2021-01-19 00:05:46 +0800
committerHeZhengjie <[email protected]>2021-01-19 00:05:46 +0800
commit98e99d54f73572c3231fb85f49bc0178129b1ab4 (patch)
treebecc6caf7e56d33ba9fcba2e97de8c33dd683c1e
parent08dce375a2cf967d939722850598481cfaf64bd5 (diff)
Upload New File
-rw-r--r--用OpenLooKeng来使用ClickHouse吧_.md234
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