Apache Superset 的官方 issue[1] 中有人问到,
我建了个 delta lake,并创建了几个表。现在我想从这些表读取数据,并在 Apache Superset 中创建仪表板。请问该怎么做。
Spark
参考 Delta Lake 中使用 Spark SQL DDL 和 DML 运行 Spark Thrift Server, 通过 jdbc+hive://
的方式连接, 如果有兴趣请留言,我回头整理一篇详细的使用教程。
Postgres
今天介绍的是通过 PL/Python 的方式来实现数据湖的访问, 关于 PL/Python 可以先看下我之前的两篇文章
另外建议看下
准备工作
-
安装好了 Postgres 以及 PL/Python
-
以鸢尾花数据(iris.csv)为例
-
本文使用的是 PostgreSQL 14 和 Python 3.9
-
安装所需 Python 包
pip install deltalake typing-extensions
不安装 typing-extensions
调用 delta lake 的时候会报错
(psycopg2.errors.ExternalRoutineException) ModuleNotFoundError: No module named 'typing_extensions'
代码示例
-
生成测试数据湖
import pandas as pd
iris = pd.read_csv('iris.csv')
from deltalake.writer import write_deltalake
write_deltalake( '/Users/steven/data/iris',iris)
-
创建数据湖读取函数
create or replace function read_iris(iris_path text)
returns table(sepal_length REAL,sepal_width REAL
,petal_length REAL,petal_width REAL
,species text)
as $$
from deltalake import DeltaTable
dt = DeltaTable(iris_path)
df= dt.to_pandas()
return df.values.tolist()
$$ language plpython3u;
-
使用 PL/Python 创建一个函数,返回类型为 iris table(4 个数字变量和一个字符串变量)
-
核心代码读取数据湖,并转为 DataFrame, 并输出该 DataFrame 的二维数组
-
测试函数
select * from read_iris('/Users/steven/data/iris');
-
基于函数创建视图
create or replace view iris as
select * from read_iris('/Users/steven/data/iris');
-
推荐创建物化视图
create materialized view iris1 as
select * from read_iris('/Users/steven/data/iris');
select count(*) from iris1;
-- 返回 150
-
更新数据湖
write_deltalake( '/Users/steven/data/iris',iris.head(),mode='overwrite')
-
更新物化视图之前
select count(*) from iris1;
-- 仍然返回 150
-
刷新物化视图
REFRESH MATERIALIZED VIEW iris1;
select * from iris1
-- 然后5条数据
Superset 通过 Postgres 连接访问创建好的视图和物化视图
Presto
熟悉该数据库的,也可以尝试下这个方案
参考资料
issue: https://github.com/apache/superset/issues/20758
原文始发于微信公众号(alitrack):Superset通过PostgreSQL 访问数据湖
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/62739.html