Superset连接Spark-SQL

本文档记录了如何使用Superset连接Spark-SQL,以及遇到的数据表列表显示异常的解决方案。通过启动Spark的Thrift服务,设置SQLALCHEMYURI,可以建立连接。然而,由于pyhive默认行为导致数据表列表显示不正确。为解决此问题,提出了修改pyhive代码、增加新的方言或使用Hive外部表的三种思路。详细步骤和代码位置已给出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

尝试使用superset连接spark-sql,superset官方文档只提到使用推荐使用pyhive,但是怎么连接,并没有详细说明,经过研究superset issues,结合自己的经验推测尝试,成功实现连接。

由于网上资料较少,在此记录,以做备忘,同时希望能够帮助遇到同样问题的道友。

连接方法

1、首先启动spark的thrift服务

2、superset连接spark-sql,SQLALCHEMY URI填写格式如下:

hive://<spark-master-host>:10000/iceberg

spark-master-host可以从spark web ui查看。

iceberg是spark catalog名称,如果不指定,默认为default

问题

这种方式连接上spark-sql后,superset的sqllab可以正常通过spark查询数据,也可以正常显示数据库列表,但是无法正常显示数据表列表。

这是因为spark-sql展示数据表列表时,会显示两列,第一列是数据表所在的数据库的名称,第二列才是数据表名称,而pyhive默认选择第一列数据返回,所以在superset中,数据表列表显示不正确。

这个问题是pyhive的问题,因为pyhive不直接支持spark-sql。

如果想解决这个问题,这里提供三种思路:

1、修改pyhive,在hive方言中增加返回数据的判断,如果展示数据有两列,则返回第二列。

这里提供pyhive一个发布版的代码位置:pyhive v0.6.3 代码位置

最新版本,代码或有变动。

2、修改pyhive,增加spark方言。

3、使用hive外部表。

这里第三种思路是使用hive外部表,是因为我的使用场景是数据湖场景,架构是spark+iceberg,这时可以在hive中创建iceberg的外部表,然后superset通过hive查询iceberg的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值