不出意外这是 2023 年第一份周报,一直拖着不写倒不是因为没什么可写的,反而是因为最近这几个月接收的信息量太大,一时间没有办法吃透、理解,自然就无法做到有效输出。除了常规的工作以外,这段时间开始接触 ELT 相关的东西,比如 Airbyte、dbt,CDC 领域中的 TapData、Flink CDC ,完善 databend 在 BI 类工具的生态….比如 superset, redash, metadata 等,信息量可以说是爆炸式增长,很多东西也是一知半解的。
这周之所以想起来写是因为写了一点比较有意思的新东西,所以想记录并分享一下。
Clojure & Metabase
是的你没看错,这周一直在写 Clojure。起因是要在 Metabase 中支持 databend,metabase 是一款易用、开源、技术成熟、不断并快速迭代的 BI 工具,打开 metabase 的 Github 首页 可以看到其主要是编程语言正是 Clojure。
很多年轻的朋友可能都没听说过这门编程语言。Clojure 是一种运行在Java平台上的类 Lisp 语言,看到 Lisp 是不是一种上古的气息扑面而来。Clojure 比较成功地把函数式编程引入了 JVM,在JVM平台运行的时候,会被编译为JVM的字节码进行运算。其最大的优势就是在保持了函数式语言的主要特性的前提下,例如immutable state,Full Lisp-style macro support,persistent data structures等等,还能够非常方便的调用Java类库的API,和Java类库进行良好的整合。
Metabase 提供了一种插件系统,方便开发者以开发插件的方式,将数据源添加到 metabase 中,因为要调用 metabase driver 的 API,所以插件的编写也需要使用 Clojure 来完成。
上手 Clojure
Clojure 是完全的函数式编程,基本语法比较简单,大概看了半天的教程配置好开发环境就能写 hello world 了。A few days later….,支持 databend 的 metabase 插件就完成了,项目及相关代码在 metabase databend driver 。
插件使用
Metabase 的插件使用起来非常方便,只需要两个 jar 就能从 databend 读取并分析数据出报表了。
Download metabase.jar
Metabase是一个Java应用程序,可以通过下载JAR文件 并执行 java -jar metabase.jar
来运行。Metabase 使用 JDBC Driver 连接到 Databend。
Download metabase Databend Driver
在下载
metabase.jar
的目录下创建目录plugins
1
2
3ls
metabase.jar
mkdir plugins
下载最新的 databend metabase driver: https://github.com/databendcloud/metabase-databend-driver/releases/latest 到 plugins 目录下
启动 metabase
1
java -jar metabase.jar
启动过程中看到下面的日志就表示 databend 驱动被正常加载:
1
22019-05-07 23:27:32 INFO plugins.lazy-loaded-driver :: Registering lazy loading driver :databend...
2019-05-07 23:27:32 INFO metabase.driver :: Registered driver :databend (parents: #{:sql-jdbc}) 🚚访问 http://hostname:3000 即可打开 metabase 首页
Connect Metabase to Databend
- 填写基本信息,选择
I'll add my data later
- 点击
Add your own data
创建 databend 数据库连接
选择 databend (databend version >=DatabendQuery v1.0.17)
填写数据库连接信息后点击保存
退出后台管理
Run a SQL query
退出后台管理后,在右上角,单击
+ New
菜单,可以运行SQL查询和构建仪表盘。举个 SQL 查询的🌰
点击左下角的可视化按钮可以构建仪表盘
Learn more
有关Metabase以及如何构建仪表板的更多信息,请访问 Metabase 文档。
一些感受
写 Clojure 过程中感受最深的还是圆括号求值 ()
,因为 Clojure 中任何语句的一般形式需要在大括号中求值,向下面这样:
1 | (+ 1 2) ;运算符在前 |
所以当一个函数比较大而且有高阶函数的时候,数括号就会成为一种灾难😂,这个时候就不得不依赖 IDE 的提示了。
机缘巧合粗浅地了解了这门编程语言,不过目前来看使用 Clojure 作为主力开发语言的公司非常少,坊间甚至一度传闻 Clojure is dead。但是语言只是工具,即使工作中无法使用,了解这门优雅、富有表现力的语言来扩展自己的眼界,也是不错的选择。Clojure 社区也有一些有意思的项目,这里抛砖引玉,感兴趣的同学可以去了解一下。
索性在这里记录跟踪一下最近的一些跟开源相关的工作
- tapdata/tapdata 🎉 New connector: databend
- clickvisual/clickvisual Feat: support databend source
- getredash/redash feat: New support databend for redash
- apache/superset feat: support databend for superset
- airbytehq/airbyte 🎉 New source connector: databend
- metabase-databend-driver
- flink-connector-databend