Superset 通过 Phoenix 连接 HBase
Superset 无法直接访问 HBase,但是可以通过 Phoenix 来与 HBase 做交互。下面我们将介绍具体的配置步骤。
前提
已安装 Superset
已开启 Phoenix Query Server
安装 PyPhoenix
安装 pyPhoenix
phoenixdb 是一个用于访问 Phoenix Query Server 的 Python 库,同时为 SQLAlchemy 提供了 Phoenix 的 Dialect
cd /path/to/pyphoenix/
pip install phoenixdb
安装完之后,可以通过下面的 Python 代码测试:
import sqlalchemy
db = sqlalchemy.create_engine('phoenix://localhost:8765/')
conn = db.connect()
注意:目前 pyPhoenix 只支持 Python 2.x,如果要在 Python 3.x 下安装,可以下载其 GitHub 的 python3Compliant 分支源码,然后再在其根目录中安装
python setup.py install
截止目前该 module 还无法直接使用,需要根据测试代码的报错信息,修改其安装路径中的 sqlalchemy_phoenix.py 文件,将其中属于 Python 2.x 的库改为适用于 Python 3.x 的库,才能正常使用。
成功安装后,重新启动 Superset
将 HBase 中已存在的表映射到 Phoenix
通过 Phoenix 创建表,则会在 HBase 中创建表,并与 Phoenix 映射。
对于在 HBase 中已存在的表,则需要手动做一次映射,方法就是在 Phoenix 创建一个同名的表,并映射字段。
如下:
-
在 HBase 中创建表
> create 'phoenix','info'
-
插入数据
> put 'phoenix', 'row001','info:name','phoenix' > put 'phoenix', 'row002','info:name','hbase'
-
在 Phoenix 中创建表
> create table "phoenix"(ROW varchar primary key, "info"."name" varchar);
-
查看 Phoenix 表中的数据
这样即完成了映射。
配置 Superset
-
在 Superset 中创建新的 Database。
在 SQLAlchemy URL 中,填写 Phoenix Query Server 的对应 SQLAlchemy URL 即可。
-
在 Superset 中创建新的 Table。
选择 1. 中创建的数据库,然后填写相应的 Schema 和 Table Name 即可
Superset 大小写敏感处理
HBase 是大小写敏感的。
而 Superset 对于标识符大小写敏感的判断遵循如下一般逻辑:
如果标识中只含有小写字母而不含大写字母,则认为是大小写不敏感的,并会将全部字母转为大写;否则,认为是大小写敏感的。
这使得对于大小写敏感的数据库,如果其中有表名不含大写字母,Superset 就读取不到这个表了。
列名也同理,但是可以通过表达式自定义列来间接获取。
例如,在表 ET_BROWSE 中存在列 custom_act_name。为了获取这个列,我们可以在 Superset 做如下操作:
-
在表 ET_BROWSE 中添加一个新的列:
CustomActName
-
将该列的表达式(Expression)设为:
'custom_act_name'
-
在使用中用 CustomActName 替代 custom_act_name 即可
这样做,当 Superset 查询数据时, Query 就变成了类似下面的形式:
SELECT 'custom_act_name' AS "CustomActName",
COUNT(*) AS count
FROM "ET_BROWSE"
GROUP BY 'custom_act_name'
ORDER BY count DESC LIMIT 50000
由于给标识符加了引号,所以可以正确获取到表了。