序列化

序列化仅在 Pro 和 Enterprise 计划(包括自托管和 Metabase 云)中可用。

当您真正开始使用 Metabase 时,通常会有多个 Metabase 实例启动。您可能有几个测试或开发实例和一些生产实例,或者您可能为每个办公室或区域设置了单独的 Metabase。

为了在这种情况下帮助您,Metabase 具有序列化功能,可让您创建 Metabase 内容的导出,然后可以将其导入到一个或多个 Metabase 中。

导出将把源 Metabase 的内容序列化为 YAML 文件。

导入将读取这些导出的 YAML 文件,并根据这些 YAML 文件中序列化的内容在目标 Metabase 中创建或更新项目。

有两种方法可以运行这些 exportimport 命令

我们对如何改进序列化以适应您的工作流程感兴趣。 为现有问题投票,让我们知道这对您很重要。如果相关问题尚不存在,请创建一个并告诉我们您需要什么。

序列化用例

  • 暂存环境。通过从 Metabase 的暂存实例导出重要仪表盘,然后将其导入到您的生产实例中,为重要仪表盘启用暂存到生产的工作流程。
  • 版本控制。将导出的文件检入版本控制并审核对其的更改,因为导出中包含的 YAML 文件非常易读。
  • 将资产复制到其他 Metabase 实例。从源 Metabase 导出“模板”数据,并将其导入到一个或多个目标实例。

查看我们的指南:

序列化不适用于在同一 Metabase 实例中复制资产或交换数据源等用例。如果您在同一实例中使用序列化来复制资产,请查看导出工作原理导入工作原理以及序列化的其他用途中针对您的用例的说明

导出工作原理

导出内容

Metabase 只会导出以下实体

  • 集合(但个人集合不会导出,除非通过导出选项明确指定)
  • 仪表盘
  • 已保存的问题
  • 操作
  • 模型
  • 指标
  • SQL 代码片段
  • 数据模型和表元数据
  • 分段
  • 问题和仪表盘的公开共享设置
  • 通用 Metabase 设置
  • 事件和时间线
  • 数据库连接字符串(仅当通过导出选项指定时)。

所有其他实体(包括用户、组、权限、警报、订阅)都不会导出。

Metabase 将其工件导出到 YAML 文件目录。导出包括:

  • 包含各种 Metabase 实体的 YAML 文件的目录。示例导出可能包括以下目录,具体取决于您导出的内容和 Metabase 的内容:

    • actions
    • collections
      • cards
      • dashboards
      • timelines
    • databases

    通过 API 进行序列化时,导出目录将被压缩为 .tar.gz 文件

  • 一个 settings.yaml 文件,其中包含一些Metabase 范围的设置

默认情况下不包含数据库连接详细信息,但您可以配置导出以包含它们。

导出的通用 Metabase 设置

这是 Metabase 在 settings.yaml 文件中导出的常规设置列表。有关 Metabase 设置的更多信息,请参阅配置 Metabase

humanization-strategy
native-query-autocomplete-match-style
site-locale
report-timezone-short
report-timezone-long
application-name
enable-xrays
show-homepage-pin-message
source-address-header
enable-nested-queries
custom-geojson-enabled
start-of-week
custom-geojson
available-timezones
unaggregated-query-row-limit
aggregated-query-row-limit
hide-embed-branding?
search-typeahead-enabled
enable-sandboxes?
application-font
available-locales
landing-page
enable-embedding
application-colors
application-logo-url
application-favicon-url
show-homepage-xrays
show-metabot
enable-whitelabeling?
show-homepage-data
site-name
application-font-files
loading-message
report-timezone
persisted-models-enabled
enable-content-management?
subscription-allowed-domains
breakout-bins-num
available-fonts
custom-formatting

自定义导出内容

您可以自定义导出内容。您可以告诉 Metabase:

  • 导出特定集合
  • 不导出集合
  • 不导出 Metabase 设置
  • 不导出表元数据
  • 包含示例字段值(默认排除)
  • 包含数据库连接详细信息(默认排除)

请参阅 CLI 命令中的导出参数API 调用中的导出参数

序列化问题的示例

问题可以在集合目录的 cards 目录中找到。这是一个使用 SQL 编写的问题的示例卡片 YAML 文件,该问题使用字段筛选器并具有面积图可视化效果。

为了保留原生查询的多行格式,请从原生查询中删除尾随空格。如果您的原生查询有尾随空格,YAML 会将您的查询转换为单行字符串文字(这只会影响呈现,而不会影响功能)。

name: Products by week
description: Area chart of products created by week
entity_id: r6vC_vLmo9zG6_r9sAuYG
created_at: "2024-05-08T19:10:24.348808Z"
creator_id: [email protected]
display: area
archived: false
collection_id: onou5H28Wvy3kWnjxxdKQ
collection_preview: true
collection_position: null
query_type: native
dataset: false
cache_ttl: null
database_id: Sample Database
table_id: null
enable_embedding: false
embedding_params: null
made_public_by_id: null
public_uuid: null
parameters:
  - default:
      - Gizmo
    id: c37d2f38-05fa-48c4-a208-19d9dba803c6
    name: Pick a category
    slug: category_filter
    target:
      - dimension
      - - template-tag
        - category_filter
    type: string/=
parameter_mappings: []
dataset_query:
  database: Sample Database
  native:
    query: |-
      SELECT
        category,
        date_trunc ('week', created_at) AS "Week",
        count(*) AS "Count"
      FROM
        products
      WHERE
        
      GROUP BY
        category,
        "Week"
    template-tags:
      category_filter:
        default:
          - Gizmo
        dimension:
          - field
          - - Sample Database
            - PUBLIC
            - PRODUCTS
            - CATEGORY
          - base-type: type/Text
        display-name: Pick a category
        id: c37d2f38-05fa-48c4-a208-19d9dba803c6
        name: category_filter
        type: dimension
        widget-type: string/=
  type: native
result_metadata:
  - base_type: type/Text
    display_name: CATEGORY
    effective_type: type/Text
    field_ref:
      - field
      - CATEGORY
      - base-type: type/Text
    name: CATEGORY
    semantic_type: null
  - base_type: type/DateTime
    display_name: Week
    effective_type: type/DateTime
    field_ref:
      - field
      - Week
      - base-type: type/DateTime
    name: Week
    semantic_type: null
  - base_type: type/BigInteger
    display_name: Count
    effective_type: type/BigInteger
    field_ref:
      - field
      - Count
      - base-type: type/BigInteger
    name: Count
    semantic_type: type/Quantity
visualization_settings:
  column_settings: null
  graph.dimensions:
    - Week
    - CATEGORY
  graph.metrics:
    - Count
serdes/meta:
  - id: r6vC_vLmo9zG6_r9sAuYG
    label: products_created_by_week
    model: Card
initially_published_at: null
metabase_version: v1.49.7 (f0ff786)
type: question

Metabase 使用实体 ID 来识别和引用 Metabase 项目

Metabase 为每个 Metabase 项目(仪表盘、问题、模型、集合等)分配一个唯一的实体 ID。实体 ID 使用 NanoID 格式

您可以在导出的 YAML 文件中的 entity_id 字段中查看项目的实体 ID。例如,在序列化问题的示例中,您将看到该问题的实体 ID

entity_id: r6vC_vLmo9zG6_r9sAuYG

此 ID 也出现在 serdes/meta → id 字段中(这些 ID 必须匹配)

serdes/meta:
  - id: r6vC_vLmo9zG6_r9sAuYG

为了消除共享相同名称的实体的歧义,Metabase 在导出实体的文件和目录名称中包含实体 ID。

r6vC_vLmo9zG6_r9sAuYG_products_by_week.yaml
IA96oUzmUbYfNFl0GzhRj_accounts_model.yaml
KUEGiWvoBFEc5oGQCEnPg_converted_customers.yaml

例如,在上面的序列化问题的示例中,您可以看到字段 collection_id

collection_id: onou5H28Wvy3kWnjxxdKQ

此 ID 指的是问题保存到的集合。在实际导出中,您将能够找到此集合的 YAML 文件,其名称以其 ID 开头:onou5H28Wvy3kWnjxxdKQ

数据库、模式、表和字段通过名称标识

默认情况下,Metabase 导出一些数据库和数据模型设置。默认情况下,导出不包括数据库连接字符串。您可以显式包含数据库连接字符串。您也可以选择完全排除数据模型。

Metabase 在 databases 目录中序列化数据库和表。它将包含每个数据库、表、字段、分段和指标的 YAML 文件。

数据库、表和字段通过其名称引用(与 Metabase 特有的项目不同,后者通过实体 ID 引用)。

例如,在序列化问题的示例中,有几个 YAML 键引用示例数据库

database_id: Sample Database
---
dataset_query:
  database: Sample Database

在该示例中字段筛选器(category_filter:)的描述中,您可以看到对用于填充筛选器选项的字段的引用

dimension:
  - field
  - - Sample Database
    - PUBLIC
    - PRODUCTS
    - CATEGORY

它指的是示例数据库的 PUBLIC 模式中 PRODUCTS 表中的 CATEGORY 字段。 databases 目录中序列化的 Sample Database 还将包含此字段和表的 YAML 文件。

导入工作原理

在导入期间,Metabase 将读取提供的 YAML 文件并根据 YAML 规范创建项目。序列化问题的示例说明了 Metabase 如何记录重建项目所需的信息。

Metabase 在导入期间不会从目标实例中删除项目,但会覆盖已存在的项目。

Metabase 依赖于实体 ID来确定要创建或覆盖哪些项目,以及项目之间的关系。当导入到已经包含某些内容的实例中时,请记住:

  • 如果您导入的项目的 entity_id 在目标 Metabase 中不存在,Metabase 将创建一个新项目。

  • 如果您导入的项目的 entity_id 在目标 Metabase 中已存在,则现有项目将被覆盖。

    特别是,这意味着如果您导出一个问题,然后在导出的 YAML 文件中进行更改(例如通过直接编辑 name 字段来重命名问题),然后将编辑后的文件导回,Metabase 将尝试应用您对 YAML 所做的更改。

  • 如果您导入的项目的 entity_id 为空,Metabase 将创建一个新项目。在这种情况下,任何 serdes/meta → id 都将被忽略。

  • YAML 中引用的所有项目和数据源必须已存在于目标 Metabase 中,或者包含在导入中。

    例如,如果导出的 YAML 具有字段 collection_id: onou5H28Wvy3kWnjxxdKQ,则集合 onou5H28Wvy3kWnjxxdKQ 必须已存在于目标实例中,或者必须有一个 YAML 文件,其中包含具有此 ID 的集合的导出。

序列化最佳实践

源实例和目标实例使用相同的 Metabase 版本

目前,只有当源 Metabase 和目标 Metabase 具有相同的主版本时,序列化才有效。如果您使用的是 CLI 序列化命令,则用于运行序列化命令的 .jar 文件的版本也应与源 Metabase 和目标 Metabase 版本匹配。

如果您使用 H2 作为应用程序数据库,则需要在导入或导出之前停止 Metabase。

如果您使用 Postgres 或 MySQL 作为应用程序数据库,则可以在 Metabase 仍在运行时导入和导出。

避免将序列化用于备份

请注意:序列化并非旨在备份您的 Metabase。

请参阅备份 Metabase

如果您改为希望执行从 Metabase 附带的默认 H2 数据库到 MySQL/Postgres 的一次性迁移,请改用迁移指南

您需要手动添加许可证令牌

Metabase 从导出中排除您的许可证令牌,因此如果您运行 Metabase Enterprise Edition 的多个环境,则需要手动将您的许可证令牌添加到目标 Metabase,可以通过 Metabase 用户界面或通过 环境变量

Metabase 向导出和导入添加日志

导出:Metabase 将日志添加到压缩目录中,文件名为 export.log

导入:您可以添加 -o - 标志以将日志直接导出到终端,或添加 -o import.log 以保存到文件。

使用 CLI 命令进行序列化

要在 Metabase 云上序列化数据,请使用导入和导出 API 端点

Metabase 提供 exportimport CLI 命令。

有关序列化的常规信息,请参阅“导出工作原理”“导入工作原理”“序列化最佳实践”

使用 CLI 导出

要导出 Metabase 实例的内容,请更改到您正在运行 Metabase JAR 的目录并运行:

java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar export dir_name

其中 dir_name 可以是您想为目录命名的任何名称。

export 选项

要查看导出选项列表,请使用 help 命令

java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar help export

这将运行,然后打印如下内容:

export path & options
	 Serialize Metabase instance into directory at `path`.
	 Options:
	   -c, --collection ID             Export only specified ID; may occur multiple times.
	   -C, --no-collections            Do not export any content in collections.
	   -S, --no-settings               Do not export settings.yaml
	   -D, --no-data-model             Do not export any data model entities; useful for subsequent exports.
	   -f, --include-field-values      Include field values along with field metadata.
	   -s, --include-database-secrets  Include database connection details (in plain text; use caution).

--collection

默认情况下,Metabase 将在导出中包含所有集合(个人集合除外)。要包含个人集合,您必须使用 --collection 标志显式添加它们。

--collection 标志(别名 -c)允许您按 ID 指定一个或多个要包含在导出中的集合。您可以在集合的 URL 中找到集合 ID,例如,对于 your-metabase.com/collection/42-terraforming-progress 中的集合,ID 将为 42

如果您想指定多个集合,请用逗号分隔 ID。例如:

java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar export export_name --collection 1,2,3

--no-collections

--no-collections 标志(别名 -C)告诉 Metabase 从导出中排除所有集合。

--no-settings

--no-settings 标志(别名 -S)告诉 Metabase 排除 settings.yaml 文件,该文件包含站点范围的设置,默认情况下会导出该文件。

--no-data-model

--no-data-model 标志(别名 -D)告诉 Metabase 从导出中排除表元数据设置。管理员在管理设置的“表元数据”选项卡中定义元数据设置。

--include-field-values

--include-field-values 标志(别名 -f)告诉 Metabase 包含字段值的示例值,Metabase 使用这些值来呈现下拉菜单。默认情况下,Metabase 排除这些示例字段值。

--include-database-secrets

--include-database-secrets 标志(别名 -s)告诉 Metabase 包含连接详细信息,包括数据库用户名和密码。默认情况下,Metabase 排除这些数据库连接密钥。如果您不使用此标志,则需要在目标 Metabase 中手动输入凭据。

使用 CLI 导入

要将导出的工件导入到 Metabase 实例中,请转到您正在运行目标 Metabase 的目录(您要导入到的 Metabase),并使用以下命令,其中 path_to_export 是您要导入的导出的路径

java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar import path_to_export

目前,您只能将导出的工件导入到从相同 Metabase 版本创建的 Metabase 实例中。

import 选项

大多数选项在从 Metabase 导出数据时定义。要查看导入标志的列表,请运行

java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar help import

这将打印出

import path & options
         Load serialized Metabase instance as created by the [[export]] command from directory `path`.

通过 API 序列化

与 CLI 序列化命令一样,这些端点仅适用于 ProEnterprise 计划。

您可以通过 Metabase 的 API 导入和导出序列化的 Metabase 数据,这使得 Metabase Cloud 部署可以进行序列化。

有两个端点

  • POST /api/ee/serialization/export
  • POST /api/ee/serialization/import

对于 /export 端点,我们使用 POST,而不是 GET。导出操作不会修改您的 Metabase,但它耗时且密集,因此我们使用 POST 以防止意外导出。

目前,这些端点是同步的。如果序列化过程耗时过长,请求可能会超时。在这种情况下,我们建议使用 CLI 命令。

有关序列化的常规信息,请参阅“导出工作原理”“导入工作原理”“序列化最佳实践”

API 导出参数

您可以附加可选参数来告知 Metabase 在导出中包含或排除哪些内容。您还可以组合参数(当然,all_collections 和选择性集合除外)。

因此,假设您在 localhost 上进行测试,并且您想从导出中排除所有集合,您应该像这样格式化 URL

https://127.0.0.1:3000/api/ee/serialization/export?all_collections=false

您可以包含多个参数,用 & 分隔。例如,要从导出中排除设置和数据模型

https://127.0.0.1:3000/api/ee/serialization/export?data_model=false&settings=false

collection

类型:整数数组。

默认值:Metabase 将导出所有集合,除非 all_collections 设置为 false

要选择要导出的集合,请包含集合 ID。例如,要包含集合 12

collection=1&collection=2

all_collections

类型:布尔值

默认值:true(除非您使用 collection 指定集合的子集)。

要排除所有集合

all_collections=false

settings

类型:布尔值。

默认值:true

要排除包含站点范围设置的 settings.yaml 文件

settings=false

data_model

类型:布尔值。

默认值:true

要排除 表元数据

data_model=false

field_values

类型:布尔值。

默认值:false

要包含字段值的示例值,Metabase 使用这些值来呈现下拉菜单

field_values=true

database_secrets

类型:布尔值。

默认值:false

要包含数据库连接详细信息,例如数据库用户名和密码

database_secrets=true

dirname

类型:字符串。

默认值:<instance-name>-<YYYY-MM-dd_HH_mm>

要指定不同的目录

dirname=name_of_your_directory

通过 API 调用进行序列化时,您必须压缩文件

为了控制网络上的文件大小,exportimport 端点都期望使用 GZIP 压缩的 Tar 文件 (.tgz)。

压缩目录

要压缩目录(例如,名为 metabase_data 的目录)。

tar -czf  metabase_data.tgz metabase_data

解压目录

要解压/解压缩目录

tar -xvf  metabase_data.tgz

序列化 API 示例

步骤 1:设置 API 密钥

  1. 创建一个 API 密钥
  2. 将密钥分配给管理员组

步骤 2:导出

  1. 发送 curl 请求以导出数据
curl \
  -H 'x-api-key: YOUR_API_KEY' \
  -X POST 'http://your-metabase-url/api/ee/serialization/export' \
  -o metabase_data.tgz

YOUR_API_KEY 替换为您的 API 密钥,并将 your-metabase-url 替换为您的 Metabase 实例的 URL。

对于 /export 端点,我们使用 POST,而不是 GET

此命令会将文件下载为名为 metabase_data.tgz 的 GZIP 压缩 Tar 文件。

  1. 解压缩压缩文件
tar -xvf metabase_data.tgz

解压后的目录将被称为类似于 metabase-yyyy-MM-dd_HH-mm 的名称,其中包含导出日期和时间。

步骤 3:导入

  1. 压缩包含序列化 Metabase 应用程序数据的目录

假设您的 YAML 文件与 Metabase 应用程序数据位于名为 metabase_data 的目录中。在将这些文件导入到目标 Metabase 之前,您需要压缩这些文件。

tar -czf metabase_data.tgz metabase_data
  1. POST 到 /api/ee/serialization/import

从您存储 GZIP 压缩文件的目录中,运行

curl -X POST \
  -H 'x-api-key: YOUR_API_KEY' \
  -F file=@metabase_data.tgz \
  'http://your-metabase-url/api/ee/serialization/import' \
  -o -

YOUR_API_KEY 替换为您的 API 密钥,并将 your-metabase-url 替换为您的 Metabase 实例 URL。 -o - 选项将在终端中输出日志。

如果您将 Metabase 数据导入到与导出它的 Metabase 相同的 Metabase 中,您将覆盖您现有的问题、仪表板等。请参阅 导入工作原理

序列化的其他用途

序列化旨在用于版本控制、从暂存环境到生产环境的工作流程以及将资产复制到其他 Metabase 实例。虽然可以使用序列化进行其他用例(例如在单个实例中复制资产),但我们不正式支持这些用例。

我们提供了一些关于如何处理这些不受支持的用例的指导,但您应该自行承担风险使用它们。我们强烈建议您首先在非生产实例上测试任何涉及序列化的过程,如果您有任何问题,请联系 [email protected]

使用序列化在同一 Metabase 中复制内容

使用序列化复制内容并非易事,因为您需要处理您要复制的所有项目的 实体 ID — 以及与这些项目相关的所有项目的 ID — 以避免覆盖现有数据。

在开始这段危险的旅程之前,请查看 导出工作原理导入工作原理,如果您有任何问题,请联系 [email protected]

您需要记住

  • 导入具有已存在的实体 ID 的项目将覆盖现有项目。要使用现有的 YAML 文件创建新项目,您需要 a) 创建新的实体 ID 或 b) 清除实体 ID。
  • 两个项目不能具有相同的实体 ID。
  • YAML 文件中的 entity_idserdes/meta → id 字段应匹配。
  • 如果项目的 YAML 文件中的 entity_idserdes/meta → id 字段为空白,Metabase 将创建一个具有新实体 ID 的新项目。
  • 项目引用的所有项目和数据源都应已存在于目标 Metabase 中,或包含在导入中。

    例如,一个集合可以包含一个仪表板,该仪表板包含一个基于模型构建的问题,该模型引用一个数据源。所有这些依赖项必须包含在导入中或已存在于目标实例中。

    这意味着您可能需要一个多阶段的导出/导入:首先在 Metabase 中创建您需要的一些项目(如集合),导出它们以获取它们的实体 ID,然后导出您要复制的内容,并在引用它们的项目中使用这些 ID。

例如,要复制一个包含直接基于原始数据(而不是模型或其他已保存的问题)构建的问题的集合,而不更改问题的数据源,您可以使用如下过程

  1. 在 Metabase 中,创建一个“模板”集合,并添加您想要复制的项目。
  2. 在 Metabase 中,创建一个新集合,它将作为复制项目的目标。
  3. 导出模板集合和目标集合(您可以使用 导出参数 仅导出少量集合)。导出中模板问题的 YAML 文件将具有自己的实体 ID,并引用模板集合的实体 ID。
  4. 从目标集合的导出中获取目标集合的实体 ID。
  5. 在模板集合导出中问题的 YAML 文件中

    • 清除问题字段 entity_idserdes/meta → id 的值。这将确保模板问题不会被覆盖,而是 Metabase 将创建新问题。
    • 将对模板集合的 collection_id 引用替换为新集合的 ID
  6. 导入编辑后的文件。

此过程假定您复制的问题都将使用相同的数据源。您可以将此过程与 切换数据源 相结合,以便为每个复制的集合使用不同的数据源。

如果您想一次创建集合的多个副本,那么您可以创建自己的目标实体 ID(它们可以是任何使用 NanoID 格式 的字符串),复制所有模板 YAML 文件,并将模板实体 ID 和对它们的任何引用替换为您创建的实体 ID,而不是为每个副本重复此过程。

如果您的集合包含仪表板、模型和其他可能添加依赖项的项目,则此过程可能会变得更加复杂——您需要处理每个依赖项。我们强烈建议您首先在非生产 Metabase 上测试您的序列化,如果您需要任何帮助,请联系 [email protected]

使用序列化在单个实例中交换问题的数据源

如果您想更改 Metabase 中某些问题的数据源——例如,仅更改单个集合中的问题的数据源——您可以手动序列化问题,然后编辑导出的 YAML 文件。

如果您想将每个基于数据库 A 构建的问题切换为使用数据库 B,并且数据库 B 与数据库 A 具有完全相同的架构,则您无需使用序列化:您只需在 管理 > 数据库 中交换连接字符串即可

您的数据库必须具有相同的引擎,理想情况下,它们应该具有相同的架构。

您需要记住

  • 数据库、表和字段在 Metabase 中 按名称引用
  • 默认情况下不导出数据库连接详细信息。要导出数据库连接详细信息,您需要在 导出参数中指定
  • 项目引用的数据库、表和字段应已存在于目标 Metabase 中,或包含在导入中。

例如,如果您想将 Movie reviews 集合中的所有问题切换为使用 Romance 数据库而不是 Horror 数据库,并且两个数据库具有相同的架构,您可以按照如下过程操作

  1. 在 Metabase 中,在 管理 > 数据库 中添加新的数据库连接,并将其命名为 Romance
  2. 导出集合 Movie reviews

    您可以告诉 Metabase 导出单个集合,也可以导出所有集合,然后仅处理 Movie reviews 集合的文件夹中的文件

  3. 在此集合中项目的 YAML 文件中,将所有对 Horror 数据库的引用替换为对 Romance 的引用
  4. 导入编辑后的文件。

导入将覆盖原始问题。如果您希望创建使用不同数据源的新问题,您可以将此过程与 使用序列化复制资产 相结合。

此过程假定您的新数据源具有完全相同的架构。如果架构不同,那么您还需要替换对所有表和字段的所有引用。此过程可能很复杂且容易出错,因此我们强烈建议您首先在非生产实例上测试您的序列化,如果您需要任何帮助,请联系 [email protected]

从旧的序列化命令迁移

如果您是从 Metabase 版本 46.X 或更旧版本升级,以下是您需要了解的内容

  • export 命令取代了 dump 命令。
  • import 命令取代了 load 命令。

需要注意的其他一些更改

  • 导出的 YAML 文件具有略微不同的结构
    • Metabase 将为每个文件添加 24 个字符的实体 ID 前缀(例如 IA96oUzmUbYfNFl0GzhRj_accounts_model.yaml)。您可以在导出之前运行 Metabase 命令来 删除实体 ID
    • 文件树略有不同。
  • 要序列化个人集合,您只需在逗号分隔的 ID 列表中包含个人集合 ID,这些 ID 紧跟 -c 选项(--collection 的缩写)。

如果您编写了脚本来自动化序列化,您将需要

  • 使用升级后的 Metabase 重新序列化您的 Metabase(它使用新的 exportimport 命令)。请注意,只有当您使用相同的 Metabase 版本导出和导入 Metabase 时,序列化才有效。
  • 使用新命令更新这些脚本。请参阅新的 导出选项
  • 如果您的脚本对导出的 YAML 文件进行任何后处理,您可能需要更新您的脚本以适应略微不同的目录和 YAML 文件结构。

进一步阅读

阅读其他 Metabase 版本 的文档。