序列化
序列化仅适用于 Pro 和 Enterprise 计划(包括自托管和 Metabase 云服务)。
一旦您真正开始使用 Metabase,通常会有多个 Metabase 实例在运行。您可能有一些测试或开发实例,以及一些生产实例,或者您可能每个办公室或区域都有一个独立的 Metabase 实例。
为了帮助您应对这种情况,Metabase 提供了序列化功能,允许您创建 Metabase 内容的导出,然后可以将其导入到一个或多个 Metabase 实例中。
导出会将您的源 Metabase 的内容序列化为 YAML 文件。
导入将读取这些导出的 YAML 文件,并根据这些 YAML 文件中序列化的内容在目标 Metabase 中创建或更新项目。
有两种方法可以运行这些 export
和 import
命令
我们很乐意了解如何改进序列化以适应您的工作流程。为现有问题投票,让我们知道这对您很重要。如果尚未存在相关问题,请创建一个并告诉我们您的需求。
序列化用例
- 暂存环境。通过从 Metabase 的暂存实例导出重要仪表板,然后将其导入到您的生产实例中,实现暂存到生产的工作流程。
- 版本控制。将导出的文件检入版本控制并审计其更改,因为导出中包含的 YAML 文件非常易读。
- 将资产复制到其他 Metabase 实例。从源 Metabase 导出“模板”数据,并将其导入到一个或多个目标实例。
查看我们的指南:
导出工作原理
导出内容
Metabase 只导出以下实体:
- 集合(但个人集合除非通过导出选项明确指定,否则不会导出)
- 仪表盘
- 已保存的问题
- 操作
- 模型
- 指标
- 代码片段
- 数据模型和表元数据
- 分段
- 问题和仪表板的公共共享设置
- 通用 Metabase 设置
- 事件和时间线
- 数据库连接字符串(仅当通过导出选项指定时)
所有其他实体——包括用户、组、权限、警报、订阅——都不会导出。
Metabase 会将其工件导出到一个 YAML 文件目录。导出内容包括:
-
包含各种 Metabase 实体的 YAML 文件的目录。示例导出可能包括以下目录,具体取决于您导出的内容和 Metabase 的内容:
- 操作
- 集合
- 卡片
- 仪表板
- 时间线
- 数据库
通过 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 设置
- 不导出表元数据
- 包含示例字段值(默认排除)
- 包含数据库连接详细信息(默认排除)
序列化问题的示例
问题可以在集合目录的 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
- 访问 Metabase 中的项目。
- 点击信息按钮。
- 在“概览”选项卡中,复制实体 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 指的是问题所保存的集合。在实际导出中,您将能够找到一个此集合的 YAML 文件,其名称以其 ID 开头:onou5H28Wvy3kWnjxxdKQ
。
实体 ID 与嵌入配合使用
Metabase 支持在静态嵌入、交互式嵌入和嵌入式分析 SDK 中使用问题、仪表板和集合的实体 ID。
在您的应用程序中嵌入 Metabase 时,使用实体 ID 的高级工作流程大致如下:
- 在您本地运行的 Metabase 中创建一个仪表板。
- 使用应用程序代码中的实体 ID 在本地将仪表板嵌入到您的应用程序中。
- 通过序列化将您的 Metabase 更改导出为 YAML 文件。
- 将您的 Metabase 更改(导出的 YAML 文件)导入到您的生产 Metabase 中。
- 由于实体 ID 在生产 Metabase 中保持不变,您只需将应用程序中的代码推送到生产环境,代码将引用正确的仪表板。
数据库、模式、表和字段通过名称进行识别
默认情况下,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
它指的是 `Sample Database` 中 `PUBLIC` 模式下 `PRODUCTS` 表中的 `CATEGORY` 字段。`databases` 目录中序列化的 `Sample Database` 也将包含此字段和表的 YAML 文件。
导入的工作原理
在导入过程中,Metabase 将读取提供的 YAML 文件并根据 YAML 规范创建项目。序列化问题示例 展示了 Metabase 如何记录重建项目所需的信息。
Metabase 在导入期间不会从目标实例中删除项目,但会覆盖已存在的项目。
Metabase 依赖实体 ID 来确定要创建或覆盖哪些项目,以及项目之间的关系。将内容导入到已包含某些内容的实例时,请记住:
-
如果您导入一个在目标 Metabase 中不存在
entity_id
的项目,Metabase 将创建一个新项目。 -
如果您导入一个在目标 Metabase 中已存在
entity_id
的项目,则现有项目将被覆盖。特别是,这意味着如果您导出问题,然后在导出的 YAML 文件中进行更改——例如通过直接编辑
name
字段来重命名问题——然后将编辑后的文件重新导入,Metabase 将尝试应用您对 YAML 所做的更改。 -
如果您导入一个带有空
entity_id
的项目,Metabase 将创建一个新项目。在这种情况下,任何serdes/meta → id
都将被忽略。 -
YAML 中引用的所有项目和数据源必须已存在于目标 Metabase 中,或者包含在导入中。
例如,如果导出的 YAML 中有字段
collection_id: onou5H28Wvy3kWnjxxdKQ
,那么集合onou5H28Wvy3kWnjxxdKQ
必须已存在于目标实例中,或者必须有一个包含此 ID 集合导出的 YAML 文件。
序列化最佳实践
源和目标实例使用相同的 Metabase 版本
目前,序列化仅在源和目标 Metabase 具有相同主版本时才有效。如果您使用 CLI 序列化命令,则用于运行序列化命令的 .jar 文件的版本也应与源和目标 Metabase 版本匹配。
如果您使用 H2 作为应用程序数据库,您需要在导入或导出之前停止 Metabase
如果您使用 Postgres 或 MySQL 作为应用程序数据库,您可以在 Metabase 仍在运行时进行导入和导出。
避免使用序列化进行备份
请注意:序列化不用于备份您的 Metabase。
请参阅备份 Metabase。
如果您只是想从 Metabase 随附的默认 H2 数据库一次性迁移到 MySQL/Postgres,请使用迁移指南。
您需要手动添加许可证令牌
Metabase 会从导出中排除您的许可证令牌,因此如果您运行多个 Metabase 企业版环境,您需要手动将许可证令牌添加到目标 Metabase 实例中,可以通过 Metabase 用户界面,或通过环境变量。
Metabase 在导出和导入中添加日志
导出:Metabase 将日志作为 export.log
添加到压缩目录中。
导入:您可以添加 -o -
标志将日志直接输出到终端,或 -o import.log
保存到文件中。
使用 CLI 命令进行序列化
要在 Metabase Cloud 上序列化数据,请使用导入和导出 API 端点
Metabase 提供了 export
和 import
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(您要导入到的 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 序列化命令一样,这些端点仅适用于 Pro 和 Enterprise 计划。
您可以通过 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://: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。例如,要包含集合 1
和 2
:
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 调用进行序列化时,您必须压缩文件
为了控制网络文件大小,export
和 import
端点都期望使用 GZIP 压缩的 Tar 文件 (.tgz
)。
压缩目录
压缩目录(例如,名为 metabase_data
的目录)。
tar -czf metabase_data.tgz metabase_data
解压目录
要解压/解压缩目录
tar -xvf metabase_data.tgz
序列化 API 示例
第 1 步:设置 API 密钥
- 创建API 密钥。
- 将密钥分配给管理员组
第 2 步:导出
- 发送
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。
我们对
/export
端点使用POST
,而不是GET
。
此命令会将文件下载为名为 metabase_data.tgz
的 GZIP 压缩 Tar 文件。
- 解压压缩文件
tar -xvf metabase_data.tgz
提取的目录将类似于 metabase-yyyy-MM-dd_HH-mm
,其中包含导出日期和时间。
第 3 步:导入
- 压缩包含序列化 Metabase 应用程序数据的目录
假设您的 Metabase 应用程序数据的 YAML 文件位于名为 metabase_data
的目录中。在将这些文件导入到目标 Metabase 之前,您需要压缩这些文件。
tar -czf metabase_data.tgz metabase_data
- 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。
- YAML 文件中的
entity_id
和serdes/meta → id
字段应该匹配。 - 如果 YAML 文件中项目的
entity_id
和serdes/meta → id
字段为空,Metabase 将创建一个具有新实体 ID 的新项目。 -
一个项目引用的所有项目和数据源都应该已经存在于目标 Metabase 中,或者包含在导入中。
例如,一个集合可以包含一个仪表板,该仪表板包含一个基于引用数据源的模型构建的问题。所有这些依赖项都必须包含在导入中或已存在于目标实例中。
这意味着您可能需要多阶段导出/导入:首先在 Metabase 中创建您需要的一些项目(例如集合),将其导出以获取其实体 ID,然后导出您要复制的内容,并在引用它们的项目中使用这些 ID。
例如,要复制一个仅包含直接基于原始数据(而非模型或其他已保存问题)构建的问题的集合,并且不更改问题的现有数据源,您可以使用以下过程:
- 在 Metabase 中,创建一个“模板”集合并添加您想要复制的项目。
- 在 Metabase 中,创建一个新集合,作为复制项目的目标。
- 导出模板集合和目标集合(您可以使用导出参数仅导出几个集合)。导出中模板问题的 YAML 文件将具有自己的实体 ID 并引用模板集合的实体 ID。
- 从目标集合的导出中获取其实体 ID。
-
在模板集合导出中问题的 YAML 文件中:
- 清除问题的
entity_id
和serdes/meta → id
字段的值。这将确保模板问题不会被覆盖,而是 Metabase 会创建新问题。 - 将对模板集合的
collection_id
引用替换为新集合的 ID。
- 清除问题的
- 导入编辑过的文件。
此过程假定您复制的问题都将使用相同的数据源。您可以将其与切换数据源结合使用,为每个复制的集合使用不同的数据源。
如果您想一次性创建多个集合副本,那么您可以创建自己的目标实体 ID(它们可以是使用 NanoID 格式的任何字符串),复制所有模板 YAML 文件,并用您创建的实体 ID 替换模板实体 ID 和对它们的任何引用,而不是为每个副本重复此过程。
如果您的集合包含仪表板、模型和其他可能增加依赖项的项目,此过程可能会变得更加复杂——您需要处理每个依赖项。我们强烈建议您首先在非生产 Metabase 上测试您的序列化,如果您需要任何帮助,请联系 help@metabase.com。
使用序列化在一个实例中切换问题的数据源
我们已经为需要构建一个仪表板并根据查看者更改其查询数据库的情况开发了官方解决方案。请查看数据库路由。
在继续之前,请先阅读上面的引用框,因为那可能就是您要找的内容。我们保留了下面的文档作为备用,以防数据库路由无法解决您的问题。
如果您想将所有基于数据库 A 构建的问题切换为使用数据库 B,并且数据库 B 的架构与数据库 A 完全相同,则无需使用序列化:只需在管理员 > 数据库中交换连接字符串即可。
如果您想更改 Metabase 中部分问题的数据源(例如,仅针对单个集合中的问题),则可以手动序列化问题,然后编辑导出的 YAML 文件。
您的数据库必须具有相同的引擎,并且理想情况下应具有相同的架构。
您需要记住:
- 数据库、表和字段在 Metabase 中按名称引用
- 数据库连接详细信息默认不导出。要导出数据库连接详细信息,您需要在导出参数中指定。
- 项目引用的数据库、表和字段应已存在于目标 Metabase 中,或包含在导入中。
例如,如果您想将电影评论
集合中的所有问题切换为使用浪漫
数据库而不是恐怖
数据库,并且两个数据库都具有相同的架构,则可以遵循以下过程:
- 在 Metabase 中,在管理员 > 数据库中添加一个新的数据库连接并将其命名为
浪漫
。 -
导出集合
电影评论
。您可以告诉 Metabase 导出单个集合,或者您可以导出所有集合,然后只处理
电影评论
集合文件夹中的文件 - 在此集合中项目的 YAML 文件中,将所有对
恐怖
数据库的引用替换为对浪漫
的引用。 - 导入编辑过的文件。
导入将覆盖原始问题。如果您希望创建使用不同数据源的新问题,则可以将此过程与使用序列化复制资产结合使用。
此过程假定您的新数据源具有完全相同的架构。如果架构不同,则您还需要替换所有表和字段的所有引用。此过程可能很复杂且容易出错,因此我们强烈建议您首先在非生产实例上测试您的序列化,如果您需要任何帮助,请联系help@metabase.com。
从旧的序列化命令迁移
如果您正在从 Metabase 46.X 或更早版本升级,以下是您需要了解的内容:
export
命令取代了dump
命令。import
命令取代了load
命令。
其他一些需要注意的更改
- 导出的 YAML 文件结构略有不同
- Metabase 会在每个文件前加上一个 24 个字符的实体 ID(例如
IA96oUzmUbYfNFl0GzhRj_accounts_model.yaml
)。您可以运行 Metabase 命令删除实体 ID。 - 文件树略有不同。
- Metabase 会在每个文件前加上一个 24 个字符的实体 ID(例如
- 要序列化个人集合,您只需在
-c
选项(--collection
的缩写)后面的逗号分隔 ID 列表中包含个人集合 ID。
如果您已编写脚本来自动化序列化,则需要:
- 使用升级后的 Metabase(使用新的
export
和import
命令)重新序列化您的 Metabase。请注意,序列化仅在您使用相同的 Metabase 版本导出和导入您的 Metabase 时才有效。 - 使用新命令更新这些脚本。请参阅新的导出选项。
- 如果您的脚本对导出的 YAML 文件进行任何后处理,您可能需要更新脚本以适应略有不同的目录和 YAML 文件结构。
延伸阅读
- 序列化教程
- 数据库路由
- 多个环境
- 设置基于 git 的工作流
- 需要帮助?请联系support@metabase.com
阅读其他版本的 Metabase 的文档。