Superset连接Spark-SQL

尝试使用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的数据。

猜你喜欢

转载自blog.csdn.net/xwd127429/article/details/118995202