MMS 迁移能力说明

更新时间:
复制 MD 格式

MaxCompute数据迁移服务MMS在将外部数据源的元数据同步至MaxCompute时,需要将源端的表类型和列数据类型迁移为MaxCompute支持的对应类型。由于不同数据源的类型体系存在差异,MMS 定义了一套标准化的迁移规则,以确保元数据在迁移过程中的完整性和准确性。本文详细说明当前 MMS 支持的各数据源(BigQuery、Hive、Databricks、Snowflake, Redshift)到 MaxCompute 的表类型及列数据类型的迁移规则。

BigQuery

以下为BigQueryMaxCompute的迁移能力介绍。

迁移对象

BigQuery普通表,不包含视图。

表类型迁移

默认所有表迁移到MaxCompute Append Delta Table

数据类型迁移

源数据类型

MaxCompute数据类型

BOOL

BOOLEAN

INT64

BIGINT

FLOAT64

DOUBLE

NUMERIC(p, s)

DECIMAL(p, s)

NUMERIC源端未指定精度

DECIMAL(38, 9)

NUMERIC(p)

DECIMAL(p, 0)

BIGNUMERIC(p, s) p <= 38 && s <= 30

DECIMAL(p, s)

BIGNUMERIC(p, s) p > 38 or s > 30

不支持

BIGNUMERIC(p) p <= 38

DECIMAL(p, 0)

BIGNUMERIC(p) p > 38

不支持

BIGNUMERIC源端未指定精度

DECIMAL(38, 18)

STRING

STRING

BYTES

BINARY

TIMESTAMP

TIMESTAMP_NTZ

DATE

DATE

TIME

LONG

  • BIGNUMERIC 类型的精度和小数位数 (x, y) 可由用户配置,默认推荐设为 DECIMAL(38, 18)。

  • BigQuery 的 TIME 类型以午夜零点以来的微秒数存储,迁移到MaxCompute后,数据类型为 BIGINT。

  • MaxCompute 不支持嵌套类型 STRUCT/ARRAY 中包含 JSON 类型

    • 仅支持 BigQuery ARRAY<JSON> 迁移到 MC ARRAY<STRING> 类型

    • 不支持其他的嵌套 JSON 情况,比如 ARRAY<ARRAY<JSON>>、STRUCT<a: JSON> 都不支持

分区表迁移规则

Time-unit column partitioning table

BigQuery 表结构示例:

CREATE TABLE IF NOT EXISTS pt_datetime
(
    i  INT,
    dt DATETIME
) PARTITION BY DATE (dt);
  • 迁移方案(默认方案)

    迁移到MaxCompute基于时间计算函数的自动分区表

    CREATE TABLE IF NOT EXISTS pt_datetime(
      i BIGINT, 
      dt TIMESTAMP_NTZ)
    AUTO PARTITIONED BY (TRUNC_TIME(dt, 'DAY') AS `_partition_value`) 
    TBLPROPERTIES ('table.format.version'='2', 'transactional'='true');
    • MaxCompute不支持使用DATE/DATETIME/TIMESTAMP进行分区,迁移到分区表时这些类型会转换为STRING类型。

    • 早于1960-01-01或晚于2159-12-31的值在BigQuery中会被插入到__UNPARTITIONED__分区,MaxCompute同样如此。

Ingestion time partitioning table

  • 创建表时不指定分区列,BigQuery自动生成一个伪列(_PARTITIONVALUE DATETIME)记录数据插入时间,并以此作为分区依据。

  • 该伪列不包含在SELECT 的返回结果中,需在查询中显式指定列名才能获取。

BigQuery 表结构示例:

CREATE TABLE IF NOT EXISTS pt_pseudo_date
(
    i INT
) PARTITION BY _PARTITIONDATE;

SELECT *, _PARTITIONTIME AS pt FROM pt_pseudo_date;

CREATE TABLE IF NOT EXISTS pt_pseudo_hour
(
    i INT
) PARTITION BY timestamp_trunc(_PARTITIONTIME, hour);
  • 迁移方案(默认方案,推荐)

    迁移到 MaxCompute基于数据写入时间的自动分区表

    CREATE TABLE IF NOT EXISTS pt_pseudo_date(
      i BIGINT,
      `_partitiontime` TIMESTAMP COMMENT 'bigquery _PARTITIONTIME') 
    AUTO PARTITIONED BY (TRUNC_TIME(`_PARTITIONTIME`, 'DAY') AS `_partition_value`) 
    STORED AS ALIORC TBLPROPERTIES ('table.format.version'='2', 'transactional'='true');
    • MaxCompute不支持使用DATE/DATETIME/TIMESTAMP进行分区,迁移到分区表时这些类型会转换为STRING类型。

    • 早于1960-01-01或晚于2159-12-31的值在BigQuery中会被插入到__UNPARTITIONED__分区,MaxCompute同样如此。

Range partitioning table

BigQuery 表结构示例:

CREATE TABLE IF NOT EXISTS pt_range_cluster
(
    i INT,
    j INT
) PARTITION BY range_bucket(i, GENERATE_ARRAY(0, 11, 3)) cluster by (j);
  • 迁移方案

    迁移到 MaxCompute 表结构:

    CREATE TABLE IF NOT EXISTS pt_range_cluster(i BIGINT, j BIGINT)
    PARTITIONED BY
        (`_partition_value` STRING COMMENT 'bigquery range value')
    RANGE CLUSTERED BY (j)
    TBLPROPERTIES ('table.format.version' = '2', 'transactional' = 'true');

使用限制

限制项

BigQuery

MaxCompute

表名

<= 1024,允许常规Unicode字符

<= 128,仅允许大小写字母、数字、下划线

列名

<= 300

<= 128,仅允许大小写字母、数字、下划线、中文

表列上限

10,000

1,200

Hive和湖仓数据迁移

以下为Hive数据类型到MaxCompute数据类型的迁移能力介绍。

支持的云产品

云产品

元数据服务

数据存储

自建Hive集群

HMS

HDFS

阿里云EMR

HMS

HDFS、OSS

AWS

HMS、GLUE

S3、HDFS

华为云MRS

HMS

HDFS、OBS

迁移对象

标准内表、外表(不支持VIEW)。

表类型迁移

  • Hive普通表迁移到MaxCompute普通表。

  • 使用Hive作为元数据管理的数据湖表格式(Iceberg/Hudi/Paimon)同样适用。

列数据类型迁移

源数据类型

MaxCompute数据类型

BOOLEAN

BOOLEAN

TINYINT

TINYINT

SMALLINT

SMALLINT

INT

INT

BIGINT

BIGINT

FLOAT

FLOAT

DOUBLE

DOUBLE

DECIMAL

DECIMAL

STRING

STRING

VARCHAR

VARCHAR

CHAR

STRING

BINARY

BINARY

TIMESTAMP

TIMESTAMP

DATE

DATE

ARRAY

ARRAY

MAP

MAP

STRUCT

STRUCT

UNION

UNION

分区列迁移规则

对于 Hive 表的分区列,迁移规则如下:

  • STRING、VARCHAR、CHAR、TINYINT、SMALLINT、INT、BIGINT 类型的分区列保留原始类型;

  • 其他类型的分区列统一转换为 STRING 类型。

说明

当前不支持Hive 3TIMESTAMP_NTZ类型。如果源表中包含该类型的列,同步时将跳过该列或报错,请在同步前确认源表的列类型。

Databricks

以下为DatabricksMaxCompute的迁移能力介绍。

迁移对象

Delta Table、Non-Delta Table,不包含视图。

表类型迁移

DatabricksDelta Table 根据是否包含主键,分别对应不同的 MaxCompute 表类型。

源表类型

MaxCompute表类型

Delta Table(含主键)

PK Delta Table

Delta Table(不含主键)

Append Delta Table

Non-Delta Table

Append Delta Table

数据类型迁移

源数据类型

MaxCompute数据类型

TINYINT

TINYINT

SMALLINT

SMALLINT

INT

INT

BIGINT

BIGINT

FLOAT

FLOAT

DOUBLE

DOUBLE

BOOLEAN

BOOLEAN

STRING

STRING

BINARY

BINARY

DATE

DATE

TIMESTAMP

TIMESTAMP

TIMESTAMP_NTZ

TIMESTAMP_NTZ

ARRAY<elementType>

ARRAY<elementType>

MAP<keyType, valueType>

MAP<keyType, valueType>

STRUCT<...>

STRUCT<...>

INTERVAL

不支持

VOID

不支持

VARIANT

不支持

OBJECT

不支持

说明

INTERVAL、VOID、VARIANT、OBJECT类型当前不支持迁移MaxCompute。如果源表包含这些类型的列,同步时将跳过该列。

分区列迁移规则

对于 Databricks表的分区列,迁移规则如下:

  • STRING、VARCHAR、CHAR、TINYINT、SMALLINT、INT、BIGINT 类型的分区列保留原始类型;

  • 其他类型的分区列统一转换为 STRING 类型。

Snowflake

以下为 Snowflake 数据类型到 MaxCompute 数据类型的迁移能力介绍。Snowflake 的数值类型(NUMBER)根据小数位数 (Scale) 的不同,迁移后对应于不同的 MaxCompute 类型。

迁移对象

普通内表。

表类型迁移

迁移到普通表。

数据类型迁移

源数据类型

MaxCompute数据类型

NUMBER(P,S),S > 30

STRING

NUMBER(P,S),30 >= S > 0

DECIMAL(P, S)

NUMBER(P,S),S = 0

BIGINT(默认)或 DECIMAL(P, 0)

DOUBLE

DOUBLE

DECFLOAT

STRING

STRING

STRING

BINARY

BINARY

BOOLEAN

BOOLEAN

DATE

DATE

TIME

STRING(HH:MM:SS.SSSSSSSSS 格式)

TIMESTAMP_LTZ

TIMESTAMP

TIMESTAMP_NTZ

TIMESTAMP_NTZ

TIMESTAMP_TZ

TIMESTAMP_NTZ

VARIANT

JSON

ARRAY

JSON

OBJECT

JSON

ARRAY(elementType)

ARRAY<elementType>

OBJECT(fieldName fieldType, ...)

STRUCT<fieldName: fieldType, ...>

MAP(keyType, valueType)

MAP<keyType, valueType>

GEOGRAPHY

STRING

GEOMETRY

STRING

FILE

不支持

VECTOR

不支持

说明
  • Snowflake的复杂类型(ARRAY、OBJECT、MAP)内嵌半结构化类型时,半结构化类型将转换为STRING。

  • Snowflake的非结构化ARRAYOBJECT类型对应为JSON,而结构化的ARRAY(elementType)、OBJECT(fieldName fieldType, ...)和MAP(keyType, valueType)分别对应于MaxCompute复杂类型。

  • FILEVECTOR类型当前不支持。

Redshift

以下为RedshiftMaxCompute的迁移能力介绍。

迁移对象

Redshift内表数据全量迁移,不包括视图。

表类型迁移

Redshift表迁移到MaxCompute的非分区表,具体表类型迁移能力介绍如下。

DistStyle

SortKey类型

MaxCompute表类型

Cluster

有主键

任意

PK Delta Table

主键 Hash Cluster

KEY/AUTO(KEY)

Compound

Append Delta Table

RANGE BY (SortKey)

KEY/AUTO(KEY)

Interleaved

Append Delta Table

RANGE BY (SortKey)

KEY/AUTO(KEY)

None

Append Delta Table

RANGE BY (DistKey)

EVEN/AUTO(EVEN)

Compound

Append Delta Table

RANGE BY (SortKey)

EVEN/AUTO(EVEN)

Interleaved

Append Delta Table

RANGE BY (SortKey)

EVEN/AUTO(EVEN)

None

Append Delta Table

无合适列

ALL/AUTO(ALL)

Compound

Append Delta Table

RANGE BY (SortKey)

ALL/AUTO(ALL)

Interleaved

Append Delta Table

RANGE BY (SortKey)

ALL/AUTO(ALL)

None

Append Delta Table

默认Cluster Key

数据类型迁移

Redshift数据类型

MaxCompute数据类型

SMALLINT (INT2)

SMALLINT

INTEGER (INT、INT4)

INT

BIGINT (INT8)

BIGINT

DECIMAL(precision,scale)

(NUMERIC)

DECIMAL(precision,scale)

REAL(FLOAT4)

FLOAT

DOUBLE PRECISION (FLOAT8、FLOAT)

DOUBLE

CHAR(n) (CHARACTER/NCHAR/BPCHAR)

STRING

VARCHAR(n) (CHARACTER VARYING/NVARCHAR/TEXT)

STRING

DATE

DATE

TIME

STRING

TIMETZ

STRING

TIMESTAMP

TIMESTAMP_NTZ

TIMESTAMPTZ

TIMESTAMP

BOOLEAN (BOOL)

BOOLEAN

HLLSKETCH

不支持

SUPER

STRING

VARBYTE(n) (VARBINARY)

BINARY

GEOMETRY

STRING

GEOGRAPHY

STRING

使用限制

限制项

Redshift

MaxCompute

影响

HLLSKETCH 类型

支持

不支持

包含此类型列的表无法迁移,需移除该列或使用其他近似去重方案

VARBYTE 长度

最大 16MB

最大 8MB

超 8MB 需处理

列数量

1,600

1,200

超过 1,200 列需拆分表

自增列

支持 IDENTITY

不支持

迁移时丢失自增属性

MaxCompute

MaxComputeMaxCompute的迁移会保持源MaxCompute的表类型和列类型,目前支持的迁移对象包括:表、视图、物化视图、Resource、UDF、项目的Flag。