clickhouse+superset搭建数据平台(三)-superset安装并连接clickhouse

本文主要介绍superset的安装以及如何从superset连接clickhouse数据库。

Superset 是apache的一个孵化项目,定位为一款现代的,准商用BI系统。

Superset是由Airbnb开源的数据分析与可视化平台,该工具主要特点是可自助分析、自定义仪表盘、分析结果可视化(导出)、用户/角色权限控制,还集成了一个SQL编辑器,可以进行SQL编辑查询等。

比较常用的功能有:

  • SQL查询。superset可以提供sql查询工具直接访问数据库或者数据仓库。
  • 报表设计。SQL查询完数据库后,你可以选择将查询结果保存为表格或者图表保存到superset中方便将来重复查询。通过superset,你可以制作出漂亮的统计图表。
  • 定时任务。你可以选择将仪表板定时推送到指定邮箱,定时订阅数据报表和图表。

以下是本文目录:

  • 1、OS dependencies
  • 2、创建虚拟环境
  • 3、安装Superset并初始化
  • 4、安装sqlalchemy-clickhouse
  • 5、连接clickhouse
  • 6、测试clickhouse连接

1、OS dependencies

sudo apt-get install build-essential libssl-dev libffi-dev python3-dev libsasl2-dev libldap2-dev

otherwise build for cryptography fails.

2、创建虚拟环境

根据官方文档,官方推荐在虚拟环境中安装Superset,好处是因为这样子可以区分出项目依赖包防止和系统的包依赖和系统变量混淆。Python3 本身自带了virtualenv,假如没有集成virtualenv,可以通过pip3安装:

aukuno@vm-ubuntu:~/Downloads$ sudo apt install virtualenv

接下来我们创建superset的虚拟环境并且激活:

# 创建虚拟环境
aukuno@vm-ubuntu:~/Downloads$ python3 -m venv superset
# 激活虚拟环境
aukuno@vm-ubuntu:~/Downloads$ source superset/bin/activate
(superset) aukuno@vm-ubuntu:~/Downloads$ 

一旦激活,接下来你所做的所有操作都会被限定在虚拟环境中,要退出虚拟环境只需要输入deactivate即可。

3、安装Superset并初始化

跟随以下步骤安装安装Superset并初始化

(superset) aukuno@vm-ubuntu:~/Downloads$ sudo pip3 install apache-superset

# 初始化Superset的数据库superset.db,一般存放在~/.superset中,
superset db upgrade

# 创建管理员(admin),根据提示输入username,姓名,邮箱以及密码。
$ export FLASK_APP=superset
flask fab create-admin
# password:superset
## 成功时提示
# Recognized Database Authentications.
# Admin User admin created.

# 加载样本示例数据
superset load_examples

# 创建默认角色和权限
superset init


# 服务器本地访问模式,只能从服务器浏览器访问web,不能从远程访问服务器IP:port,假如要绑定别的端口在`-p`中指定即可。
superset run -p 8088 --with-threads --reload --debugger
# 服务器远程访问模式,可以从本地浏览器打开web界面
gunicorn -w 4 --timeout 100 -b 0.0.0.0:8088 --limit-request-line 0 --limit-request-field_size 0 --forwarded-allow-ips="" superset:app
# 0.0.0.0:8088表示运行在服务器的8088端口,在本地打开浏览器输入服务器IP:8088即可访问

4、安装sqlalchemy-clickhouse

SQLAlchemy-clickhouse是clickhouse的odbc驱动,我们需要安装它从而让superset能访问sqlalchemy的接口。

(superset) aukuno@vm-ubuntu:~/Downloads$ sudo pip3 install sqlalchemy-clickhouse

5、连接clickhouse

安装好sqlalchemy-clickhouse后,我们让superset运行为本地访问模式,

(superset) aukuno@vm-ubuntu:~/Downloads$ superset run -p 8088 --with-threads --reload --debugger

在服务器的浏览器输入localhost:8088,输入superset的admin账号和密码登录,登陆成功后在导航栏中点击Sources,选择右上角添加符号添加clickhouse数据库。

clickhouse+superset搭建数据平台(三)-superset安装并连接clickhouse_第1张图片

Database中填入在superset的新名称,SQLAlchemy URI则填入clickhouse的资源链接,在这里是clickhouse://default:[email protected]:8123/DW_TAXI_CHICAGO
其中,

  • default是clickhouse的默认用户
  • click是default的登录密码,可以在/etc/clickhouse-server/users.d/default-password.xml中找到。
  • 192.168.0.104是clickhouse服务器的ip
  • 8123是clickhouse的默认运行端口,检测端口是否已经打开且可以访问可以用curl 'http://localhost:8123',返回ok既是没有问题。
    更详细关于SQLAlchemy URI的资源可以参考SQLAlchemy的官方文档。

clickhouse+superset搭建数据平台(三)-superset安装并连接clickhouse_第2张图片
同时勾选以下几项:

  • Allow Csv Upload
    If selected, please set the schemas allowed for csv upload in Extra.
  • Allow CREATE TABLE AS
    Allow CREATE TABLE AS option in SQL Lab
  • Allow DML
    Allow users to run non-SELECT statements (UPDATE, DELETE, CREATE, …) in SQL Lab

填写完毕后点击Test Connection测试连接是否成功,弹出提示Seems ok则表明连接没有问题,点击Save保存。


Note
创建资源的时候可能会报错误:

  File "/home/pkesso/venv/lib/python3.6/site-packages/sqlalchemy_clickhouse/connector.py", line 102, in _send
    raise Exception(r.text)
Exception: Code: 194, e.displayText() = DB::Exception: Password required for user default (version 19.13.2.19)

这是由于SQLAlchemy-clickhouse导致的,可以通过两种方法解决:

sqlalchemy-clickhouse的安装存放位置可以通过sudo pip3 install sqlalchemy-clickhouse查看,由于已经安装了,那么pip会返回已经安装的提示并打印出安装的位置,如下:

Requirement already satisfied: sqlalchemy>=1.0.0 in /usr/local/lib/python3.6/dist-packages (from sqlalchemy-clickhouse)
Requirement already satisfied: iso8601>=0.1.12 in /usr/local/lib/python3.6/dist-packages (from infi.clickhouse_orm>=1.0.0->sqlalchemy-clickhouse)
Requirement already satisfied: pytz in /usr/lib/python3/dist-packages (from infi.clickhouse_orm>=1.0.0->sqlalchemy-clickhouse)

可以看出来sqlalchemy-clickhouse安装在/usr/local/lib/python3.6/dist-packages中。同理可以查看python所有安装包的位置。

1、注释掉sqlalchemy_clickhouse/connector.py中的代码Database._send = _send,

as it will use none auth to check _is_existing_database in infi/clickhouse_orm/database.py

2、或者将更改sqlalchemy_clickhouse/connector.py中的_send函数由:

def _send(self, data, settings=None, stream=False):
    if PY3 and isinstance(data, string_types):
        data = data.encode('utf-8')
    params = self._build_params(settings)
    r = requests.post(self.db_url, params=params, data=data, stream=stream)
    if r.status_code != 200:
        raise Exception(r.text)
    return r

替换为:

def _send(self, data, settings=None, stream=False):
    if PY3 and isinstance(data, string_types):
        data = data.encode('utf-8')
    params = self._build_params(settings)
    # r = requests.post(self.db_url, params=params, data=data, stream=stream)
    r = self.request_session.post(
        self.db_url, params=params, data=data, stream=stream, timeout=self.timeout)
    if r.status_code != 200:
        raise Exception(r.text)
    return r

6、测试clickhouse连接

打开SQL Lab,在左边导航栏中选择数据库为clickhouse中的数据库,也即是上一步连接clickhouse时输入的数据库名称,需要注意的是这不是在clickhouse中的数据库名称,而是连接到superset后另起的名称。Schema选择DW_TAXI_CHICAGO,这个才是clickhouse中的数据库名称。

在编辑框中输入SQL,点击Run Query,可以看到返回的结果数据如图所示,则说明连接成功。

clickhouse+superset搭建数据平台(三)-superset安装并连接clickhouse_第3张图片

你可能感兴趣的:(数据分析)