Hologres实例间迁移

Hologres支持多种方式的导入导出,如数据集成、Holo Shipper、跨库查询等,提供非常方便快捷的数据传输功能,在实际应用场景中经常有Hologres实例之间数据互访迁移的情况。本文为您介绍Hologres实例间数据迁移最佳实践。

Hologres元数据迁移

将实例中的元数据(只包含表结构,不包含数据)全部迁移至另外一个实例,可以使用Holo Shipper工具导出元数据。操作步骤如下。

  1. 下载holo-shipper-1.2.4.jarJar包,并进行相关配置,详情请参见Holo Shipper

  2. 只迁移元数据,Holo Shipper的配置如下。

    --将一个Hologres实例中的某些表结构ship到另一个Hologres实例中,保留源表owner和权限,不同步与这些表无关的用户,不同步源数据库的guc参数和extension
    
    java -jar holo-shipper.jar -s holo -h <源实例endpoint> -p 80 -u <源实例用户名> -w <源实例密码> -d holo -h <目标实例endpoint> -p 80 -u <目标实例用户名> -w <目标实例密码>  -l <配置文件路径> --no-data --no-all-roles --no-guc --no-ext

    配置中文件JSON模板如下。

    shipList中元素为SchemaName必须显式逐个指定,表名可以用通配符指代所有(模板中是将数据库中的public Schema下的所有表同步)。

    [
      {
        "dbName": "<DataBaseName>",
        "shipList": {
           "public": ["*"],
           "<SchemaName1>" :["<TableName1>","<TableName2>"],
           "<SchemaName2>" :["<TableName3>"]
        }
      }
    ]

    配置中文件JSON具体示例如下。

    [
        {
            "dbName": "DB1",
            "shipList": {
                "schema1": ["*"],
                "schema2": ["table1", "table2"]
            },
            "blackList": {
                "schema1": ["table3"]
            }
        },
        {
            "dbName": "DB2",
            "shipList": {
                "schema3": ["*"],
                "schema4": ["table4", "table5"]
            },
            "schemaMapping": {
                "schema4": "schema5"
            },
            "tgMapping": {
                "tablegroup1": "tablegroup2"
            }
        },
        {
            "dbName": "DB3",
            "shipList": {
                "public": ["*"]
            },
            "sinkDB" : "DB3_backup"
        }
    ]
    • 文件为一个JSONArray,Array中每一个JSONObject代表一个数据库。

    • 每个数据库的JSONObject包含元素信息如下。

      Key

      Value

      是否必填

      说明

      dbName

      数据库名称。

      shipList

      JSONObject(其中每个KeySchema名,Value为要ship的表名的List)。

      shipList中的表和它们的子表(且不在blackList中)都会被ship,选择这个Schema中的所有表用*

      blackList

      JSONObject(其中每个KeySchema名,Value为不需要ship的表名的List)。

      blackList中的表和他们的子表不会被ship

      sinkDB

      目的地数据库名称(String类型)。

      不提供的话默认和dbName相同。 当原和目的实例为同一个Hologres实例时可以视为将表从 dbName移到sinkDB

      schemaMapping

      JSONObject(其中每个Key为源Schema名, Value为目标的Schema名)。

      需要改变Schema就在Value指定,不指定默认与原Schema不变。

      tgMapping

      JSONObject(其中每个Key为源Table Group名, Value为在目标的Table Group名)。

      需要改变Table Group就在Value指定,不指定将默认使用目标库的默认Table Group。

Hologres实例间全量数据迁移

DataWorks数据集成实现Hologres整库迁移(推荐)

DataWorks数据集成支持将Hologres实例数据整库同步至另一个Hologres实例,实现整库表结构和数据同步的能力。详情请参见Hologres整库数据离线同步至Hologres

Holo-Shipper实现Hologres实例迁移

将一个实例的全量数据迁移至另一个实例,可以使用Hologres提供的迁移工具Holo Shipper,只需要一个命令语句,即可简单方便地实现全量数据迁移操作,详情请参见Holo Shipper

说明

如果实例中的数据量较大,如TB级别或者以上的数据量,建议不要使用Holo Shipper,否则会因为ECS带宽不足等原因导致数据传输时间过长。超大数据量的迁移建议使用DataWorks数据集成Hologres整库同步功能。

迁移全量数据包括账号、权限等,代码示例如下:

$ java -jar holo-shipper.jar -s holo -h xx.xx.xx.xx -p xxxx -u username -w password -d holo -h xx.xx.xx.xx -p xxxx -u username2 -w password2  -l ship_list_json_path

ship_list_json_pathJSON的内容如下。

[
  {
    "dbName": "DB",
    "shipList": {
      "schema1": ["*"],
      "schema2": ["*"]
    }
  }
]

Hologres实例间部分表的全量数据迁移

DW数据集成迁移Hologres部分表数据(推荐)

DataWorks数据集成支持将Hologres实例数据整库同步至另外一个Hologres实例,实现整库表结构和数据同步的能力。在同步时可以选择需要迁移的部分表,实现部分表数据的全量迁移。详情请参见Hologres整库数据离线同步至Hologres

Holo-Shipper迁移Hologres部分表数据

将实例的部分表全量数据迁移至另外一个实例,也可以通过迁移工具Holo Shipper实现,只需要一个命令语句即可实现数据迁移,操作简单方便。如下示例将一个Hologres实例中的某些表迁移到另一个Hologres实例中,保留源表Owner和权限,代码示例如下:

将一个Holo实例中的某些表ship到另一个Holo实例中,保留源表owner和权限,不同步与这些表无关的用户

$ java -jar holo-shipper.jar -s holo -h xx.xx.xx.xx -p xxxx -u username -w password -d holo -h xx.xx.xx.xx -p xxxx -u username2 -w password2  -l ship_list_json_path --no-all-roles

ship_list_json_pathJSON的内容如下(不需要迁移的表,配置迁移blackList,则不会被迁移)。

--迁移table1和table2表的全量数据,不迁移table3表的数据
[
 {
     "dbName": "DB1",
     "shipList": {
         "schema1": ["*"],
         "schema2": ["table1", "table2"]
     },
     "blackList": {
         "schema1": ["table3"]
     }
 }
]

下载超过10000行的数据

HoloWeb、DataStudioHologres SQL模块仅支持10000行以内的数据下载,如果要下载超过10000行的结果集,建议使用COPY命令语句将数据先导入至OSS,再下载,详情请参见导出至本地文件