资讯

展开

Superset sqllab连接hive无法显示表信息的问题

作者:快盘下载 人气:

一、问题

使用superset,连接hive时(hive的引擎是spark),表名和表信息无法加载,加载出来了一堆表的数据库名

Superset sqllab连接hive无法显示表信息的问题

二、解决问题

1、原因

这个问题的原因是superset里面是使用pyhive去连接,表名加载是通过"show tables in {dbname}"去获取的,而spark sql和hive sql的"show tables"的执行返回结果格式不一样,pyhive最新版本20.0.1并没有支持spark的方言,平时使用没问题,但是放在使用superset去连接的时候,表名显示就混乱。

spark sql

hive sql

Hive

然后我们找到pyhive关于show tables的代码,位置:~/python3.8/site-packages/pyhive/sqlalchemy_hive.py

def get_table_names(self, connection, schema=None, **kw):
        query = 'SHOW TABLES'
        if schema:
            query += ' IN ' + self.identifier_preparer.quote_identifier(schema)

        return [row[0] for row in connection.execute(query)]

这里单纯的时候第一列作为table name返回,这里的话可以给spark添加方言去解决,但是我这里为了偷懒只是改了一下去兼容

def get_table_names(self, connection, schema=None, **kw):
        query = 'SHOW TABLES'
        if schema:
            query += ' IN ' + self.identifier_preparer.quote_identifier(schema)

        # spark sql table name in row[1], hive sql table name in row[0]
        return [row[1] if len(row) > 1 else row[0] for row in connection.execute(query)]
        # return [row[0] for row in connection.execute(query)]

成功

SQL

加载全部内容

相关教程
猜你喜欢
用户评论
快盘暂不提供评论功能!