序列化

序列化仅适用于 ProEnterprise 计划(包括自托管和 Metabase 云服务)。

当您开始使用 Metabase 后,经常会遇到需要部署多个 Metabase 实例的情况。您可能会有几个测试或开发实例,以及几个生产实例,或者您可能为每个办公室或地区都有一个独立的 Metabase。

为了帮助您处理这种情况,Metabase 提供了一个序列化功能,允许您创建一个 Metabase 内容的*导出*,然后可以将其*导入*到一个或多个 Metabase 中。

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

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

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

我们很想了解如何改进序列化以适应您的工作流程。 投票支持现有议题,让我们知道它对您很重要。如果还没有相关议题,请创建一个并告诉我们您的需求。

序列化用例

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

请查看我们的指南,了解

导出工作原理

导出会导出什么

Metabase 将只导出以下实体

  • 集合(但个人集合不会被导出,除非通过 导出选项明确指定)
  • 仪表盘
  • 已保存的问题
  • 文档(不含评论)
  • 操作
  • 模型
  • 指标
  • 代码片段
  • 数据模型和表元数据
  • 分段
  • 问题的公开分享设置和仪表板
  • 常规 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: admin@metabase.local
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 是 Metabase 生成的顺序 ID 的补充。实体 ID 使用 NanoID 格式,并且在不同的 Metabase 实例之间是稳定的。所谓“稳定”,意味着您可以例如从一个 Metabase 导出带有实体 ID 的仪表板,然后将其导入到另一个 Metabase 中,而该仪表板将使用相同的实体 ID,即使它位于不同的 Metabase 中。

要在 Metabase 中获取项目的实体 ID

  1. 访问 Metabase 中的项目。
  2. 点击信息按钮。
  3. 在概览选项卡中,复制实体 ID。

您也可以在导出的 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 指向保存问题的集合。在实际导出中,您会找到一个以其 ID 开头的集合的 YAML 文件:onou5H28Wvy3kWnjxxdKQ

实体 ID 可与嵌入配合使用

Metabase 支持在 静态嵌入嵌入式分析 JS交互式嵌入嵌入式分析 SDK 中使用问题、仪表板和集合的 实体 ID

在您的应用中嵌入 Metabase 时使用实体 ID 的高层工作流程如下所示:

  1. 在本地运行的 Metabase 中创建一个仪表板。
  2. 使用应用程序代码中的实体 ID 将仪表板嵌入到您的本地应用程序中。
  3. 通过序列化将您的 Metabase 更改导出为 YAML 文件。
  4. 将您的 Metabase 更改(导出的 YAML 文件)导入到您的生产 Metabase 中。
  5. 由于实体 ID 在生产 Metabase 中保持不变,您可以直接将应用程序中的代码推送到生产环境,代码将引用正确的仪表板。

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

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

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

数据库、表和字段通过其名称进行引用(不像 Metabase 特定的项目,它们 通过实体 ID 进行引用)。

例如,在 序列化问题的示例中,有几个 YAML 键引用了 Sample Database

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

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

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

它引用了 Sample DatabasePUBLIC 模式的 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 必须已存在于目标实例中,或者必须有一个包含此 ID 的集合导出 YAML 文件。

序列化最佳实践

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

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

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

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

避免使用序列化进行备份

请注意:序列化*不是*用于备份您的 Metabase。

请参阅 备份 Metabase

如果您想将默认的 H2 数据库迁移到 MySQL/Postgres,请改用 迁移指南

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

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

Metabase 为导出和导入添加日志

导出:Metabase 将日志添加为 export.log 到压缩目录中。

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

使用 CLI 命令进行序列化

要序列化 Metabase Cloud 上的数据,请使用 导入和导出 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 选项

要查看 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 所在的目录,并使用以下命令,其中 path_to_export 是您要导入的导出的路径

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

目前,您只能将导出的工件导入到与导出版本相同的 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

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

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

有关序列化的通用信息,请参阅 导出工作原理导入工作原理序列化最佳实践

API 导出参数

您可以附加可选参数来告诉 Metabase 在导出中包含或排除什么。您也可以组合参数(当然,除了 all_collections 和选择性集合)。

因此,假设您正在 localhost 上进行测试,并且想从导出中排除所有集合,则 URL 的格式如下:

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

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

https://: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. 将密钥分配给 Admin 组

步骤 2:导出

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

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

我们使用 POST 而不是 GET 来处理 /export 端点。

此命令将下载文件,文件名为 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 \
  'https://your-metabase-url/api/ee/serialization/import' \
  -o -

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

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

序列化的其他用途

序列化旨在用于版本控制、暂存到生产的工作流程以及将资产复制到其他 Metabase 实例。虽然可以使用序列化来处理其他用例(例如,在单个实例*内*复制资产),但我们不对这些用例提供官方支持。

我们正在提供一些关于如何处理这些不受支持用例的指导,但您应自行承担风险。我们强烈建议您首先在非生产实例上测试涉及序列化的任何流程,并在有问题时联系 help@metabase.com

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

通过序列化复制资产虽然技术上可行,但不受官方支持,因此请自行承担风险。这里的风险在于您可能需要管理长串的依赖关系,这会增加您忘记编辑实体 ID 或覆盖已存在的实体 ID 的可能性。因此,请务必进行备份并将您的更改提交到版本控制。

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

在开始这次危险的旅程之前,请回顾 导出工作原理导入工作原理,如果您有任何问题,请联系 help@metabase.com

您需要牢记

  • 导入一个实体 ID 已存在的项目将覆盖现有项目。要使用现有的 YAML 文件创建新项目,您需要 a) 创建一个新的实体 ID 或 b) 清除实体 ID。
  • 两个项目不能拥有相同的实体 ID。
  • entity_idserdes/meta → id 字段在 YAML 文件中应匹配。
  • 如果某个项目的 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 上测试您的序列化,如果您需要任何帮助,请联系 help@metabase.com

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

我们已经为需要构建一个仪表板并根据查看者的不同更改其查询的数据库的情况构建了一个官方解决方案。请查看 数据库路由

在继续之前,请阅读上面的引言,因为那可能就是您想要的。我们保留下面的文档作为备份,以防 数据库路由 无法解决您的问题。

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

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

您的数据库必须具有相同的引擎,并且最好具有相同的架构。

您需要牢记

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

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

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

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

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

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

从旧的序列化命令迁移

如果您是从 Metabase 版本 46.X 或更早版本升级,以下是您需要了解的信息:

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

还有其他一些值得注意的变化:

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

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

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

延伸阅读

阅读其他版本的 Metabase 的文档。

这有帮助吗?

感谢您的反馈!
想改进这些文档? 提议更改。
© . This site is unofficial and not affiliated with Metabase, Inc.