使用 Export/Import V2 导出和导入数据
Export/Import V2 会创建可移植的 GreptimeDB 数据快照。你可以使用它备份数据、恢复数据,或在 GreptimeDB 实例之间迁移数据。
V2 快照包含 schema 元数据、manifest 和数据文件。数据文件会 被拆分为 chunks,因此中断的导出和导入任务可以从之前的进度继续执行。
本指南使用以下命令:
greptime cli data export-v2 create:创建快照greptime cli data export-v2 verify:验证快照greptime cli data export-v2 list:列出父路径下的快照greptime cli data export-v2 delete:删除快照greptime cli data import-v2:从快照导入数据
前置条件
使用 Export/Import V2 之前,请确认:
- GreptimeDB HTTP endpoint 可访问,例如
127.0.0.1:4000。 - 你的
greptimebinary 包含cli data export-v2和cli data import-v2命令。 - CLI client 和 GreptimeDB server 都能读写快照存储位置。
对于远程对象存储,仅有快照 URI 还不够。你还需要显式启用一个受支持的存储后端,并传入该后端的连接选项。Export/Import V2 支持 S3-compatible 存储、阿里云 OSS、Google Cloud Storage 和 Azure Blob Storage。例如,对于 S3-compatible 存储,需要同时使用 --s3、--s3-bucket 和 --s3-region。
对于 file:// 快照,路径必须同时能被 GreptimeDB server 和 CLI client 访问。通常这意味着 CLI 与 standalone server 运行在同一台主机上,或者将同一个文件系统路径挂载到 GreptimeDB server 中。对于远程、Kubernetes 或分布式部署,请使用 S3 或 MinIO 等对象存储,而不是本地 file:// 路径。
快照 URI(例如 s3://my-bucket/snapshots/prod)标识快照位置。对象存储选项(例如 --s3-bucket my-bucket)配置 CLI 如何连接到对应后端。请在 create、verify、import、list 和 delete 命令中保持这些选项一致。
使用本地文件系统快速开始
只有在 CLI client 和 GreptimeDB server 共享同一路径时,才应使用本地文件系统快照。例如,对于本地 standalone server,如果 CLI 在同一台主机上运行,这种方式可以工作。
创建快照:
greptime cli data export-v2 create \
--addr 127.0.0.1:4000 \
--to file:///tmp/greptime-snapshots/demo
恢复之前先验证快照:
greptime cli data export-v2 verify \
--snapshot file:///tmp/greptime-snapshots/demo
从快照导入:
greptime cli data import-v2 \
--addr 127.0.0.1:4000 \
--from file:///tmp/greptime-snapshots/demo
默认情况下,导出和导入使用 greptime catalog。如果需要使用其他 catalog,请添加 --catalog <catalog>。
导出到远程对象存储
Export/Import V2 可以将快照存储到 AWS S3、MinIO 等 S3-compatible 服务、阿里云 OSS、Google Cloud Storage 和 Azure Blob Storage。下面的示例使用 S3 backend,因为 S3 和 MinIO 是常见选择。对于其他对象存储,请使用 支持的存储后端 中对应的 backend flag 和选项。
S3 或 MinIO
对于 AWS S3 以及 MinIO 等 S3-compatible 服务,请使用 S3 backend。
S3-compatible endpoint
对于 MinIO,请传入 --s3-endpoint:
greptime cli data export-v2 create \
--addr 127.0.0.1:4000 \
--to s3://greptime/snapshots/local-test \
--s3 \
--s3-bucket greptime \
--s3-region us-west-2 \
--s3-access-key-id superpower_ci_user \
--s3-secret-access-key superpower_password \
--s3-endpoint http://127.0.0.1:9000
验证、导入、列出或删除快照时,也需要使用相同的存储选项:
greptime cli data export-v2 verify \
--snapshot s3://greptime/snapshots/local-test \
--s3 \
--s3-bucket greptime \
--s3-region us-west-2 \
--s3-access-key-id superpower_ci_user \
--s3-secret-access-key superpower_password \
--s3-endpoint http://127.0.0.1:9000
greptime cli data import-v2 \
--addr 127.0.0.1:4000 \
--from s3://greptime/snapshots/local-test \
--s3 \
--s3-bucket greptime \
--s3-region us-west-2 \
--s3-access-key-id superpower_ci_user \
--s3-secret-access-key superpower_password \
--s3-endpoint http://127.0.0.1:9000
对于 AWS S3,请使用相同的 --s3 选项;除非使用自定义 endpoint,否则不要传 --s3-endpoint。如果你的环境使用 instance profile 或其他凭据提供机制,可能不需要显式传入 access key。S3 backend 仍然需要 --s3、--s3-bucket 和 --s3-region。
导出指定 schemas
使用 --schemas 只导出指定 schemas。可以传入逗号分隔的列表:
greptime cli data export-v2 create \
--addr 127.0.0.1:4000 \
--to file:///tmp/greptime-snapshots/observability \
--schemas public,metrics
也可以多次传入该选项:
greptime cli data export-v2 create \
--addr 127.0.0.1:4000 \
--to file:///tmp/greptime-snapshots/observability \
--schemas public \
--schemas metrics
导入时,--schemas 会从快照中选择一个子集:
greptime cli data import-v2 \
--addr 127.0.0.1:4000 \
--from file:///tmp/greptime-snapshots/observability \
--schemas public
如果请求的 schema 不存在于快照中,导入会失败。
只导出 schema
使用 --schema-only 导出表定义,不导出数据:
greptime cli data export-v2 create \
--addr 127.0.0.1:4000 \
--to file:///tmp/greptime-snapshots/schema-only \
--schema-only
导入 schema-only 快照会恢复 schema,但不会导入数据 chunks:
greptime cli data import-v2 \
--addr 127.0.0.1:4000 \
--from file:///tmp/greptime-snapshots/schema-only
按时间范围和 chunk window 导出
对于大数据集,请使用有界时间范围和 chunk window。Export/Import V2 会为范围内的每个 schema 创建一个或多个数据 chunks。
greptime cli data export-v2 create \
--addr 127.0.0.1:4000 \
--to s3://greptime/snapshots/prod-2026-06 \
--start-time 2026-06-01T00:00:00Z \
--end-time 2026-07-01T00:00:00Z \
--chunk-time-window 1d \
--s3 \
--s3-bucket greptime \
--s3-region us-west-2 \
--s3-access-key-id superpower_ci_user \
--s3-secret-access-key superpower_password \
--s3-endpoint http://127.0.0.1:9000
--chunk-time-window 需要同时指定 --start-time 和 --end-time。
Chunks 会按时间窗口创建。例如,15 分钟的范围配合 --chunk-time-window 5m 会创建 3 个 chunks。导入时,数据任务按 chunk 和 schema 调度。如果快照包含 3 个 chunks,且有 2 个 schema 包含数据,则导入会调度 6 个数据任务。
快照数据文件也会按 schema 和 chunk 组织。例如,一个多 chunk 快照可能包含如下路径:
data/logs/1/app_logs.parquet
data/logs/2/app_logs.parquet
data/logs/3/app_logs.parquet
data/public/1/host_metrics.parquet
data/public/2/host_metrics.parquet
data/public/3/host_metrics.parquet
请根据数据量和数据密度选择 chunk window:
- 对于较小或稀疏的数据集,使用更大的 window,避免产生太多小 chunks。
- 对于较大的数据集,使用更小的 window,让每个 chunk 保持在可管理的大小。
- 可以先从
1d开始,再根据导出耗时和 chunk 大小调整。
调整并行度
导出有两个并行度选项:
--parallelism控制每个 schema、每个 chunk 上 server-sideCOPY DATABASE的并行度。默认值为1。--chunk-parallelism控制 client 同时运行多少个 export chunks。默认值为1,有效范围是1..=64。
导入使用:
--task-parallelism控制 client 同时运行多少个 import data tasks。默认值为1,有效范围是1..=64。
请逐步提高这些值,并监控 GreptimeDB、对象存储和网络资源使用情况。