前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Superset sqllab连接hive无法显示表信息的问题

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

原创
作者头像
框框不是欢欢
发布2022-10-17 10:37:33
1.3K0
发布2022-10-17 10:37:33
举报
文章被收录于专栏:大数据探索大数据探索

一、问题

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

二、解决问题

1、原因

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

spark sql

hive sql

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

代码语言:javascript
复制
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添加方言去解决,但是我这里为了偷懒只是改了一下去兼容

代码语言:javascript
复制
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)]

成功

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、问题
  • 二、解决问题
    • 1、原因
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档