---
title: "主流 AP 数据库数据迁移至 OceanBase 最佳实践 - OceanBase 数据库 V4.6.0 | OceanBase 文档中心"
description: 主流 AP 数据库数据迁移至 OceanBase 最佳实践 概述 本文面向将主流分析型处理（AP, Analytical Processing）数据库——包括华为云 DWS、StarRocks 和阿里云 ADB（AnalyticDB for MySQL）——迁移至 OceanBase 的用户，提供端到端的数据迁移最佳…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.6.0

# 主流 AP 数据库数据迁移至 OceanBase 最佳实践

更新时间：2026-06-18 10:13:19

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.6.0/zh-CN/620.obap/300.obap-data-transfer/200.data-migration/500.best-practices-migrating-from-mainstream-databases-to-oceanbase.md)  

## 概述

本文面向将主流分析型处理（AP, Analytical Processing）数据库——包括华为云 DWS、StarRocks 和阿里云 ADB（AnalyticDB for MySQL）——迁移至 OceanBase 的用户，提供端到端的数据迁移最佳实践。

OceanBase 支持通过外部表（External Table）机制实现高效、可扩展的旁路导入（Direct Load），适用于大规模数据迁移场景。

## 总体迁移方案

推荐采用 **“导出-中转-导入”三阶段架构**：

1. **导出阶段**：在源 AP 数据库中，通过可写外部表将数据导出为结构化文件（如 Parquet 或 ORC），存储至对象存储（如 S3、OSS）或 HDFS。
 2. **中转阶段**：数据暂存于对象存储或分布式文件系统，作为中间媒介。
 3. **导入阶段**：OceanBase 通过只读外部表直接读取上述文件，并利用旁路导入能力将数据高效写入目标表。

该方案具备以下优势：

- 解耦源与目标系统，降低对生产环境的影响；
 - 利用列式存储格式提升 I/O 与压缩效率；
 - 支持并行、旁路导入，显著提升吞吐。

## 源数据库数据导出

### 支持的数据库

以下 AP 数据库均原生支持通过外部表导出数据：

- 华为云 GaussDB(DWS)
 - StarRocks
 - 阿里云 AnalyticDB for MySQL（ADB）

### 推荐导出格式

**优先选择列式存储格式：Parquet 或 ORC**。

#### 格式优势

- **高压缩率**：显著减少中间数据体积，节省存储与网络带宽；
 - **强类型与嵌套结构支持**：避免 CSV 等文本格式中的分隔符冲突、转义等问题；
 - **高性能读写**：相比 CSV，导入/导出性能提升约 20%–30%，尤其适合宽表和复杂数据类型。

### 官方操作文档参考

| 数据库 | 文档链接 |
| --- | --- |
| **DWS** | [DWS 数据导出指南](https://support.huaweicloud.com/migration-dws/dws_15_0066.html) |
| **StarRocks** | [使用 INSERT INTO FILES 导出数据](https://docs.starrocks.io/zh/docs/unloading/unload_using_insert_into_files/) |
| **ADB** | [创建外部表](https://help.aliyun.com/zh/analyticdb/analyticdb-for-mysql/developer-reference/create-external-table)   [导出数据至 OSS](https://www.alibabacloud.com/help/zh/analyticdb/analyticdb-for-mysql/user-guide/export-data-to-oss) |

### 导出示例

#### StarRocks 导出示例

```sql
INSERT INTO FILES(
    "path" = "s3://mybucket/unload/data1",
    "format" = "parquet",
    "compression" = "uncompressed",
    "target_max_file_size" = "1024", -- 单位：字节（示例为 1KB）
    "aws.s3.access_key" = "xxxxxxxxxx",
    "aws.s3.secret_key" = "yyyyyyyyyy",
    "aws.s3.region" = "us-west-2"
)
SELECT * FROM sales_records;

```

#### ADB 导出示例

```sql
CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_demo.osstest3 (
    A STRUCT<var1:STRING, var2:INT>
)
STORED AS PARQUET
LOCATION 'oss://testBucketName/osstest/Parquet';

INSERT INTO adb_external_demo.osstest3 SELECT * FROM t1;

```

#### 说明

请确保目标存储桶（Bucket）已正确配置访问权限，并验证网络连通性。

## 全量数据导入 OceanBase

OceanBase 提供两种主流方式从对象存储导入数据：

### 使用 `INSERT INTO` URL 外部表导入

适用于直接指定文件路径的场景，语法灵活，支持正则匹配文件名。

```sql
INSERT /*+ direct(true, 0) enable_parallel_dml parallel(32) */ INTO t1
SELECT * FROM FILES(
  location = 's3://data/?host=xxx&access_id=xxx&access_key=xxx',
  format = (TYPE = 'PARQUET'),
  pattern = 'datafiles$'
);

```

### 使用 `LOAD DATA` 语句导入

适合标准化批量导入任务。

```sql
LOAD DATA /*+ direct(true,0) parallel(2) */
FROM 's3://data/?host=xxx&access_id=xxx&access_key=xxx'
INTO TABLE t1
FORMAT (type = 'PARQUET');

```

#### 说明

两种方式均支持 `direct(true)` 直写模式和并行度控制，可大幅提升导入性能。

详细语法与参数说明，请参见：[全量旁路导入](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000006277724)。

## 直接读取外部数据源（高级场景）

除对象存储外，OceanBase 还支持通过外部表直接访问 HDFS、ODPS 等异构数据源，适用于已有数据湖架构的用户。

### HDFS 数据源

语法示例如下：

```sql
INSERT INTO t1
SELECT * FROM files(
  LOCATION = 'hdfs://${namenode_host}:${namenode_port}/user?principal=hdfs/hadoop@EXAMPLE.COM&keytab=/path/to/hdfs.keytab&krb5conf=/path/to/krb5.conf&configs=dfs.data.transfer.protection=authentication,privacy',
  FORMAT = (
    TYPE = 'CSV',
    FIELD_DELIMITER = ',',
    FIELD_OPTIONALLY_ENCLOSED_BY = '\''
  ),
  PATTERN = 'test_tbl1.csv'
);

```

### ODPS（MaxCompute）数据源

语法示例如下：

```sql
INSERT INTO t1
SELECT * FROM SOURCE (
    TYPE = 'ODPS',
    ACCESSID = 'your_id',
    ACCESSKEY = 'your_key',
    ENDPOINT = 'http://service.cn-hangzhou.maxcompute.aliyun.com/api',
    PROJECT_NAME = 'my_project',
    TABLE_NAME = 'my_table'
);

```

**参考文档**：[CREATE EXTERNAL TABLE（MySQL 模式）](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005686072)

## 增量数据同步策略

当前 OceanBase 4.4.x 版本的旁路导入功能**仅支持全量导入**。针对持续写入场景，推荐采用 **“全量 + 增量”混合方案**。

### 分区级全量导入（有限增量支持）

若源数据按时间分区（如，按月），可对新分区执行全量旁路导入：

```sql
-- 导入指定分区（追加）
INSERT /*+ direct(true, 0) enable_parallel_dml parallel(32) */ INTO t1 PARTITION(p0, p1)
SELECT * FROM external_table;

-- 覆盖指定分区
INSERT /*+ direct(true, 0) enable_parallel_dml parallel(32) */ OVERWRITE t1 PARTITION(p0, p1)
SELECT * FROM external_table;

```

#### 局限性

- **表级锁限制**：即使指定分区，导入过程仍会锁定整张表，无法并行执行多个分区的导入任务；
 - **隐藏表开销**：每次导入需为整表创建临时隐藏表，当分区数量庞大时，元数据操作耗时显著增加。

**优化建议**：对于高分区表，可结合 **分区交换（Partition Exchange）** 技术规避上述问题。

### 使用 OMS 实现增量同步

对于需要实时同步增量变更的场景，推荐使用 **OceanBase Migration Service（OMS）**：

- **适用条件**：源端具备 CDC（Change Data Capture）能力；
 - **AP 数据库限制**：DWS、StarRocks、ADB 等通常**不提供原生 CDC 输出**；
 - **推荐做法**：从这些 AP 数据库的**上游业务系统**（如 MySQL、Oracle）捕获增量日志，并通过 OMS 同步至 OceanBase。
 - **支持情况**：OMS 支持 Oracle（含 OGG）、MySQL 等主流 OLTP 数据库的增量同步。
 - 详细操作指南请参见：[使用 OMS 进行数据迁移](https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000004023033)

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
