模型持久化
目前仅适用于 PostgreSQL、MySQL 和 Redshift。
Metabase 可以持久化模型的查询结果,从而加快模型(以及基于这些模型的问题)的加载速度。
Metabase 会将模型结果存储在数据仓库(而非 Metabase 应用程序数据库)的定制模式中的表中。当用户基于模型提问时,Metabase 将使用存储结果的表,而不是重新运行模型的查询。
模型持久化不适用于数据沙箱。
在 Metabase 中启用模型持久化
要持久化模型以加快加载速度,您需要为以下项启用模型持久化:
为您的 Metabase 启用模型持久化
要为您的 Metabase 启用模型持久化,请转到**管理设置** > **性能** > **模型持久化**。
您可以设置模型以默认频率(每 1 小时、2 小时等)刷新,或选择**自定义**选项以使用 cron 语法指定您自己的更新频率。
cron 调度程序会使用**报表时区**(如果已选择)。否则,调度程序将使用**系统时区**(在 Metabase Cloud 中默认为 GMT)。
我们建议您根据源表更新新数据的频率,安排模型以合理的频率刷新。
如果有人更改了模型的查询定义,则基于该模型的任何问题都将重新运行模型的查询,直到下一次计划的模型刷新。
为每个数据库启用模型持久化
为 Metabase 启用模型持久化后,您需要为每个特定数据库进行设置,因为 Metabase 需要在数据仓库中创建一个模式来存储持久化的模型。
-
转到**管理设置** > **数据库** > [您的数据库] > **启用模型持久化**。如果您为 Metabase 提供的数据库连接凭据具有足够的权限,Metabase 应该会为您完成所有工作:Metabase 将检查模式是否已存在,否则尝试创建它。如果连接的凭据缺乏在数据库中创建模式的必要权限,您需要自行在数据库中创建模式。
-
要在数据仓库中手动创建模式,请单击信息图标以获取模式名称。
-
在您的数据库中创建模式——确保您使用步骤 1 中的确切模式名称。例如,如果您正在运行 PostgreSQL 作为数据仓库,您可以通过运行
CREATE SCHEMA IF NOT EXISTS schema_name
来创建模式,其中schema_name
是 Metabase 在信息图标中向您显示的名称。 -
确保 Metabase 用于连接数据仓库的凭据可以管理和写入该模式。
为单个模型启用模型持久化
单个模型持久化仅在 Pro 和 Enterprise 计划(包括自托管和 Metabase Cloud)中可用。
您还可以为单个模型切换持久化开关。查看模型时,单击右上角的 **…** 并选择**编辑设置**。打开**持久化模型数据**开关(您需要对模型的集合具有策展访问权限才能执行此操作)。
对于数据更新频率与您为该数据库中其他模型设置的计划不同的模型,或者对于使用频率高于或低于该数据库中其他模型的模型,切换单个模型的持久化非常有用。
刷新模型持久化结果
要刷新模型的查询结果,请转到模型并单击三点菜单 (…),然后选择**编辑设置**。在打开的信息侧边栏中,您将看到有关 Metabase 上次刷新模型结果的时间的注释,以及刷新结果的图标。
查看模型持久化日志
您可以通过单击右上角的齿轮图标并选择**管理设置** > **工具** > **模型缓存日志**来查看模型持久化的日志。请参阅管理工具。
持久化模型和缓存之间的区别
持久化模型与缓存结果不同
- **模型持久化在数据仓库中;缓存结果存储在应用程序数据库中**。Metabase 将缓存结果存储在其应用程序数据库中。Metabase 将模型持久化到您连接的数据仓库中,作为表。
- **Metabase 刷新模型结果并使缓存结果失效**。Metabase 将根据您设置的计划刷新模型的结果。也就是说,Metabase 将重新运行模型的查询并将结果存储在您的数据仓库中。对于已保存问题和仪表盘的缓存结果,Metabase 不会自动运行查询;它会在用户查看问题或仪表盘时缓存结果,并根据您设置的缓存策略使缓存结果失效。
延伸阅读
阅读其他Metabase 版本的文档。