Superset 是不是支持后台异步数据源刷新?
Posted
技术标签:
【中文标题】Superset 是不是支持后台异步数据源刷新?【英文标题】:Does Superset support background asynchronous datasource refresh?Superset 是否支持后台异步数据源刷新? 【发布时间】:2020-01-12 12:41:30 【问题描述】:我正在使用 Superset 构建实时仪表板,我希望在特定日期和时间在后台更新和缓存数据源(从 sqlLab 结果集构建)。
我将超集连接到 mysql 并在 SQLLab 中构建了一些查询。这些查询的结果用作构建图表和仪表板的数据源。问题是有时这些查询花费的时间太长并且图表/仪表板无法正确显示(例如查询超时 - 显示警告消息)。我配置了缓存时间和芹菜异步。 worker,但是当这个缓存过期时,仪表板会被刷新并执行与图表/数据源相关的查询,显示超时(或其他错误)消息。
实际结果:
图表/仪表板在刷新时显示超时警告消息。预期结果:
图表/仪表板始终从缓存中读取以避免运行长查询。 安排后台异步。数据源在特定日期和时间刷新。更新 -- 2019 年 9 月 12 日
我发现 superset 有一个 Celery 任务,它会根据不同的策略定期预热缓存。其中一种策略 (DashboardTagsStrategy) 使用自定义标签预热图表/仪表板的缓存。我知道如果我们在 config.py 中添加一个 CELERYBEAT_SCHEDULE 部分 指定 crontab 并标记特定图表,我们可以在特定日期和时间安排后台异步数据源刷新。要遵循的步骤是:
在 SQL Lab 中执行查询。 将此查询的结果用作数据源。 基于此数据源构建图表。 标记此图表(我仍然不知道如何标记图表或仪表板) 在 config.py 中添加基于标签的预热缓存策略。 在图表(或数据源?¿)中配置缓存超时【问题讨论】:
您有没有找到一种方法来标记您的仪表板?我也在寻找标记预热缓存策略,但我似乎找不到标记仪表板的方法。 【参考方案1】:超集可以执行查询(在超集中也称为“数据源”)并将其结果缓存一段时间(数据源上的图表缓存超时参数)。您将使用此缓存来避免在数据“足够新鲜”时重新查询数据库 - 例如每日销售图表可以缓存 24 小时。 从概念上讲,Superset 是一种数据可视化工具,但不是数据准备/转换工具,因此,afaik 没有安排后台作业在特定日期/时间进行自动定期刷新的概念。 相反,您想要做的是在数据库中创建物化视图,并将这些视图/表用作超集查询和图表的数据源。 您将需要使用不同的工具来安排这些材料视图的刷新 - 这可能就像 cron 作业一样简单。 然后,您可以将这些物化视图用作图表的数据源。这些视图中的数据实际上是静态的,无需异步运行超集查询或将结果缓存在超集中。
【讨论】:
大卫,感谢您的回复。我发现我们可以使用不同的策略(使用 celery beats)来安排缓存刷新。其中一种策略是基于标记的(刷新特定标记对象的缓存)。我认为它可以用于调度数据源刷新,但我仍然不知道如何在 Superset 中标记对象。 我看到的唯一与 Celery beats 相关的是允许电子邮件报告任务(但我没有看到其他预定义的任务类型,例如查询刷新) - 请参阅 superset.incubator.apache.org/installation.html#email-reports。我还看到您可以在/savedqueryviewapi/api/read
公开您想要刷新的查询 - 请参阅superset.incubator.apache.org/installation.html#sql-lab
这里可以看到缓存预热策略github.com/apache/incubator-superset/blob/master/superset/tasks/…。我想使用 DashboardTagsStrategy 但我不知道如何标记图表或仪表板。
我明白了。以下是仪表板标签的问题和 PR:github.com/apache/incubator-superset/issues/3821github.com/janetye/incubator-superset/pull/1github.com/janetye/incubator-superset/pull/2 我需要尝试一下...以上是关于Superset 是不是支持后台异步数据源刷新?的主要内容,如果未能解决你的问题,请参考以下文章