superset的一些问题集合,转载


我可以一次查询/联接多个表吗?

不是直接的否。Superset SQLAlchemy数据源只能是单个表或视图。

使用表时,解决方案是具体化一个表,该表包含分析所需的所有字段,很可能是通过某个计划的批处理过程实现的。

视图是一个简单的逻辑层,它将任意SQL查询抽象为一个虚拟表。这允许您联接和联合多个表,并使用任意SQL表达式应用某些转换。由于Superset将有效地在查询(视图)的顶部运行查询,因此存在数据库性能的限制。一个好的实践可能是限制自己将主大表连接到一个或多个小表,并尽可能避免使用GROUPBY,因为Superset将自己执行GROUPBY,并且执行两次该工作可能会降低性能。

无论您使用的是表还是视图,重要的因素是您的数据库是否足够快,能够以交互方式为其提供服务,从而在Superset中提供良好的用户体验。

我的数据源能有多大?

它可以是巨大的!如上所述,主要条件是数据库是否可以在用户可以接受的时间范围内执行查询并返回结果。许多分布式数据库可以执行以交互方式扫描兆字节的查询。

如何创建自己的可视化?

我们正计划使向框架中添加新的可视化效果变得更容易,同时,我们还标记了一些pull请求作为示例,以向人们提供如何提供新的可视化效果的示例。https://github.com/airbnb/superset/issues?q=label%3Aexample+is%3Aclosed

我可以上传和可视化csv数据吗?

是,使用“源”菜单项下的“上载CSV”按钮。这将显示一个允许您指定所需信息的表单。从CSV创建表之后,就可以像“源”->“表”页面上的任何其他表一样加载它。

为什么我的查询超时了?

这里有很多原因导致的超时。

对于运行来自Sql Lab的长查询,默认情况下,Superset允许它在被celery杀死之前运行6小时。如果要增加运行查询的时间,可以在配置中指定超时。例如:

SQLLAB_ASYNC_TIME_LIMIT_SEC = 60 * 60 * 6

Superset正在gunicorn web服务器上运行,该服务器可能会超时web请求。如果要增加默认值(50),可以使用-t标志(以秒为单位)指定启动web服务器时的超时。

Superset runserver -t 300

如果在加载仪表板或explore slice时看到超时(504网关超时),则可能在网关或代理服务器(如Nginx)之后。如果没有从Superset server(正在处理长查询)收到及时的响应,这些web服务器将直接向客户端发送504状态代码。Superset有一个客户端超时限制来解决此问题。如果查询未在客户端超时(默认为60秒)内返回,超级集将显示警告消息以避免网关超时消息。如果网关超时限制较长,可以在superset_config.py中更改超时设置:

SUPERSET_WEBSERVER_TIMEOUT=60

为什么地图在地图框可视化中不可见?

您需要注册到mapbox.com,获取一个API密钥,并在superset_config.py中将其配置为mapbox_API_key。

如何向仪表板添加动态筛选器?

很简单:使用Filter Box小部件,构建一个片段,并将其添加到仪表板中。

Filter Box小部件允许您定义一个查询来填充可用于筛选的下拉列表。为了构建不同值的列表,我们运行一个查询,并按您提供的度量对结果进行排序,按降序排序。

该小部件还具有一个复选框Date Filter(日期过滤器),可以对仪表板启用时间过滤功能。选中该框并刷新后,将显示“from(从)”和“to(到)”下拉列表。

默认情况下,筛选将应用于构建在共享筛选所基于的列名的数据源之上的所有切片。还要求在表编辑器的column选项卡中将该列检查为“filterable”。

但是如果你不希望某些小部件在你的仪表板上被过滤呢?您可以通过编辑仪表板来实现这一点,在表单中,编辑JSON Metadata,更具体地说是filter_immune_slices键,它接收一个sliceid数组,该数组不应受到仪表板级筛选的影响。

{
    "filter_immune_slices": [324, 65, 92],
    "expanded_slices": {},
    "filter_immune_slice_fields": {
        "177": ["country_name", "__time_range"],
        "32": ["__time_range"]
    },
    "timed_refresh_immune_slices": [324]
}

在上面的json blob中,切片324、65和92不会受到任何仪表板级筛选的影响。

现在注意filter_immune_slice_fields键。这个选项允许您更具体地定义特定的切片id,应该忽略哪些筛选字段。

注意使用时间范围关键字,该关键字保留用于处理上述时间边界过滤。

但是,当处理来自不同表或数据库的切片时,过滤会发生什么情况?如果列名是共享的,那么过滤器将被应用,就这么简单。

如何限制仪表板上的定时刷新?

默认情况下,仪表板定时刷新功能允许您根据设置的计划自动重新查询仪表板上的每个切片。但是,有时您不希望所有的切片都被刷新—特别是在某些数据移动缓慢或运行大量查询的情况下。要从定时刷新过程中排除特定的切片,请将timed_refresh_immune_slices(定时刷新免疫切片)键添加到仪表板JSON Metadata字段:

{
   "filter_immune_slices": [],
    "expanded_slices": {},
    "filter_immune_slice_fields": {},
    "timed_refresh_immune_slices": [324]
}

在上面的例子中,如果为仪表板设置了定时刷新,那么除了324之外的每个切片都将按计划自动重新查询。

切片刷新也将在指定的时间段内交错进行。您可以通过将stagger_refresh设置为false来关闭此交错,并通过将JSON Metadata字段中的stagger_time设置为以毫秒为单位的值来修改交错周期:

{
    "stagger_refresh": false,
    "stagger_time": 2500
}

在这里,如果启用定期刷新,则整个仪表板将立即刷新。忽略2.5秒的交错时间。

为什么“flask fab”或superset在启动时冻结/挂起/没有响应(我的主目录是NFS挂载的)?

默认情况下,superset在~/.superset/superset.db创建并使用sqlite数据库。众所周知,如果在NFS上使用Sqlite,由于NFS上的文件锁定实现被破坏,因此它不会很好地工作。

可以使用SUPERSET_HOME环境变量覆盖此路径。

另一种解决方法是通过在superset_config.py中添加SQLALCHEMY_database_URI=‘sqlite:///new/location/superset.db’(如果需要,创建文件),然后将superset_config.py所在的目录添加到PYTHONPATH环境变量(例如export PYTHONPATH=/opt/logs/sandbox/airbnb/)来更改superset存储sqlite数据库的位置。

如果表架构更改了怎么办?

表模式不断发展,而Superset需要反映这一点。在仪表板的生命周期中,添加新维度或度量是很常见的。要让Superset发现新列,只需转到菜单->源->表,单击架构已更改的表旁边的编辑图标,然后在“详细信息”选项卡中单击“保存”。在场景后面,新的列将被合并。随后,您可能需要重新编辑表以配置列选项卡,选中相应的框并再次保存。

如何着手开发新的可视化类型?

下面是一个Github PR示例,其中包含描述代码不同部分的注释:https://Github.com/airbnb/superset/pull/3013

什么数据库引擎可以用作Superset的后端?

为了说明这一点,数据库后端是一个OLTP数据库,Superset使用它来存储内部信息,比如用户列表、切片和仪表板定义。

Superset的后端使用Mysql、Postgresql和Sqlite进行测试。建议您在其中一个数据库服务器上安装Superset以用于生产。

使用列存储,非OLTP数据库(如Vertica、Redshift或Presto)作为数据库后端将无法工作,因为这些数据库不是为这种类型的工作负载而设计的。在Oracle、Microsoft SQL Server或其他OLTP数据库上安装可能可以工作,但未经测试。

请注意,几乎所有具有SqlAlchemy集成的数据库都应该作为Superset的数据源工作得非常好,而不是作为OLTP后端。

如何配置OAuth身份验证和授权?

您可以查看这个Flask AppBuilder配置示例。

https://github.com/dpgaspar/Flask-AppBuilder/blob/master/examples/oauth/config.py

如何在仪表板上设置默认筛选器?

容易的。只需在筛选器处于活动状态时应用筛选器并保存仪表板。

如何让Superset刷新表的架构?

向表中添加列时,可以使用“源->表”页中的“Refresh Metadata(刷新元数据)”操作,让父集检测并合并新列。只需选中要刷新架构的表旁边的复选框,然后单击“操作”->“刷新元数据”。

有没有办法强制使用特定的颜色?

可以在每个仪表板上使用label_colors键在JSON元数据属性中提供标签到颜色的映射。

{
    "label_colors": {
        "Girls": "#FF69B4",
        "Boys": "#ADD8E6"
    }
}

Superset是否与[insert database engine here]一起工作?

随着时间的推移,社区已经整理了一个数据库列表,这些数据库在文档的数据库依赖项部分中可以很好地使用Superset。此页中未列出的数据库引擎也可能工作。我们依靠社区为这个知识库做出贡献。

要通过SQLAlchemy连接器在Superset中支持数据库引擎,需要定义符合Python的SQLAlchemy方言和DBAPI驱动程序。对SQL支持有限的数据库也可以工作。例如,即使Druid不支持连接和子查询,也可以通过SQLAlchemy连接器连接到Druid。要支持的数据库的另一个关键元素是通过Superset数据库引擎规范接口。这个接口允许定义超出SQLAlchemy和DBAPI范围的特定于数据库的配置和逻辑。这包括以下功能:

  • 与日期相关的SQL函数,允许Superset在运行时间序列查询时获取不同的时间粒度
  • 引擎是否支持子查询。如果为false,则Superset可以运行两阶段查询来补偿限制
  • 方法处理日志并推断查询完成百分比
  • 如果驱动程序不是标准DBAPI,如何处理游标和连接的技术细节
  • 更多,请阅读代码了解更多详细信息

除了SQLAlchemy连接器之外,还可以扩展Superset并编写自己的连接器,尽管涉及的内容要多得多。目前唯一的例子就是Druid连接器,它正在被Druid不断增长的SQL支持以及最近DBAPI和SQLAlchemy驱动程序的可用性所取代。如果您正在考虑集成的数据库有任何类型的SQL支持,那么最好采用SQLAlchemy方法。注意,要使本机连接器成为可能,数据库需要支持运行OLAP类型查询,并且应该能够执行基本SQL中的典型操作:

  • 聚合数据
  • 应用筛选器(=!=,>,<,>=,<=,在,…)
  • 应用具有类型筛选器
  • 注意模式,公开列和类型

Wait_timeout默认时间短

(MySQLdb._exceptions.OperationalError) (2006, ‘MySQL server has gone away’) (Background on this error at: http://sqlalche.me/e/e3q8)

解:vim /etc/mysql/my.cnf ,在[mysqld]下面添加wait_timeout = 108000解决问题,发生这个问题的原因是因为数据包 过大导致上传太久,默认等待时间是mysql> show global variables like ‘%timeout’; wait_timeout 是28800秒,所以会发生这个错误。

使用pip3 install superset报错-1

Could not find a version that satisfies the requirement prison<1.0.0,>=0.1.2 (from flask-appbuilder<2.3.0,>=2.1.9->superset) (from versions: 0.1.0-, 0.1.0, 0.1.1)

No matching distribution found for prison<1.0.0,>=0.1.2 (from flask-appbuilder<2.3.0,>=2.1.9->superset)

解:这个是prison版本的问题,我因为之前pip install superset不一样的版本,所以导致这个问题,我是使用pip uninstall superset,把之前安装在电脑上的superset删除,再次运行就好了。如果还不行,那么你就需要手动pip install prison --version。

使用pip3 install superset报错-2

error: Microsoft Visual C++ 14.0 is required. Get it with “Microsoft Visual C++ Build Tools”: https://visualstudio.microsoft.com/downloads/

----------------------------------------

Command “d:\worker\software\python3\python.exe -u -c “import setuptools, tokenize;file=‘C:\Users\19178\AppData\Local\Temp\pip-install-_ycx3cp5\python-geohash\setup.py’;f=getattr(tokenize, ‘open’, open)(file);code=f.read().replace(’\r\n’, ‘\n’);f.close();exec(compile(code, file, ‘exec’))” install --record C:\Users\19178\AppData\Local\Temp\pip-record-vih_ejv4\install-record.txt --single-version-externally-managed --compile” failed with error code 1 in C:\Users\19178\AppData\Local\Temp\pip-install-_ycx3cp5\python-geohash\

解:根据以上信息需要安装Microsoft Visual C++ 14.0,安装后之后也不用重启,再次运行pip3 install superset即可成功

运行yarn和yarn run build ,‘xxx’ 不是内部或外部命令,也不是可运行的程序或批处理文件。

解: npm install yarn(可能会报错) 或者 npm install -g yarn --registry=https://registry.npm.taobao.org //npm安装yarn

yarn config set registry https://registry.npm.taobao.org -g //设置注册地址

yarn config set sass_binary_site http://cdn.npm.taobao.org/dist/node-sass -g

安装好yarn之后,就可以运行yarn和yarn run build了。

在pycharm里面在(pythonenv) D:\worker\idatafun\pythonenv\incubator-superset>目录下面使用这个命令:python setup.py install会报错。

VERSION: 0.999.0dev
GIT SHA: b6f31abcfea9d819082d21a21a895058688c2144
-==--==--==--==--==--==--==--==--==--==--==--==--==--==--==-
Traceback (most recent call last):
  File "setup.py", line 57, in <module>
    with open(VERSION_INFO_FILE, "w") as version_file:
FileNotFoundError: [Errno 2] No such file or directory: 'D:\\worker\\idatafun\\pythonenv\\incubator-superset\\superset\\static\\assets\\version_info.json' 

解:加上软链接
mklink /J "D:\worker\idatafun\superset_dev\incubator-superset\superset\static\assets" "D:\worker\idatafun\superset_dev\incubator-superset\superset\assets"
记得换目录

Superset runserver -d -p 8088命名报错

解:Error:No such command “runserver”.在superset搭建最后一步报这个错,执行superset --help,没有看到runserver,但是有一个run,superset run -p 8088成功。

Superset登录密码忘记,或者根本没有设置密码,应该怎么做?

解:删除该用户下的superset.db数据库文件,再次用命令fabmanager create-admin --app superset 创建用户和密码就可以了

​​​​​​​# No user created an error occured
解:删除superset.db ,默认安装在当前用户下.superset里面,然后创建用户成功

​​​​​​​# python superset db upgrade或者superset db upgrade提示“不是内部或外部命令”
解:要解决这个问题,可以直接通过 cd 命令进入 Superset 安装目录( …\superset\bin )。然后运行如下命令:

python superset db upgrade

​​​​​​​# 修改数据库为mysql数据库
解:在config.py配置文件里面SQLALCHEMY_DATABASE_URI ==‘mysql://root:111111@localhost:3306/superset_tommy?charset=UTF8’

​​​​​​​# fabmanager create-admin --app superset创建新用户报错
报错信息:Traceback (most recent call last):

File “D:\worker\software\python3\lib\runpy.py”, line 193, in _run_module_as_main

"__main__", mod_spec)

File “D:\worker\software\python3\lib\runpy.py”, line 85, in _run_code

exec(code, run_globals)

File “D:\worker\idatafun\superset_dev\Scripts\fabmanager.exe_main_.py”, line 9, in

File “d:\worker\idatafun\superset_dev\lib\site-packages\flask_appbuilder\console.py”, line 417, in cli

cli_app()

File “d:\worker\idatafun\superset_dev\lib\site-packages\click\core.py”, line 722, in call

return self.main(*args, **kwargs)

File “d:\worker\idatafun\superset_dev\lib\site-packages\click\core.py”, line 697, in main

rv = self.invoke(ctx)

File “d:\worker\idatafun\superset_dev\lib\site-packages\click\core.py”, line 1066, in invoke

return _process_result(sub_ctx.command.invoke(sub_ctx))

File “d:\worker\idatafun\superset_dev\lib\site-packages\click\core.py”, line 895, in invoke

return ctx.invoke(self.callback, **ctx.params)

File “d:\worker\idatafun\superset_dev\lib\site-packages\click\core.py”, line 535, in invoke

解:由于我安装的是最新版,创建用户命令已经改成flask fab create-admin,就好使了,前提是已经pip install mysqlclient。

原文链接:
http://www.luyixian.cn/news_show_267777.aspx

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值