统一类型与源数据类型和目标数据类型的映射

概览

统一类型是 Avro 或 JSON 事件中显示的数据类型。它们是跨多个数据源和目标位置(例如 Oracle 源数据库、MySQL 数据库或 PostgreSQL 数据库,以及 BigQuery 或 Cloud Storage 目标位置)的数据类型的统一表示形式。

统一类型是所有受支持来源类型中的所有类型表示形式的超集,它们以通用但无损的方式表示原始来源类型。

下表列出了:

  • 与 Datastream 关联的统一类型
  • Oracle 数据库、MySQL 数据库或 PostgreSQL 数据库的数据类型与 DataStream 统一类型之间的映射

请参阅 BigQuery 目标位置文档,了解不同来源和 BigQuery 的数据类型之间的映射关系。

Datastream 统一类型

类型名称 信息 Avro 定义 JSON 定义
BOOLEAN boolean boolean boolean
BYTES 无符号字节序列 字节 字符串
DATE 自纪元以来的天数 日期逻辑类型 字符串 [ISO-8601]
DATETIME 日期(自纪元以来的天数)和时间(自午夜以来的微秒数)

自定义类型


{
  "type": "record",
  "name": "datetime",
  "fields": [
    {"name": "date",
     "type": "int",
     "logicalType": "date"},
    {"name": "time",
     "type": "long",
     "logicalType": "time-micros"}
  ]
}
    
字符串 [ISO-8601]
DECIMAL (p,s) 任意精度的带符号十进制数 十进制逻辑类型 数字
DOUBLE 64 位浮点数 double 数字
FLOAT 32 位浮点数 float 数字
INTEGER 32 位整数 int 数字
INTERVAL 两个事件之间的间隔时长(以月、小时和微秒为单位)

自定义类型


{
  "type": "record",
  "name": "interval",
  "fields": [
    {"name": "months",
     "type": "int"}
    {"name": "hours",
     "type": "int"},
    {"name": "micros",
     "type": "long"}
  ]
}
    
字符串 [ISO-8601]
JSON JSON 对象

自定义逻辑类型


{
  "type": "string",
  "logicalType": "json"
}
嵌套 JSON
LONG 64 位整数 长整型 数字
NUMBER 数值数据类型

自定义逻辑类型


{
  "type": "string",
  "logicalType": "number"
}
字符串
STRING 字符串长度不受限制 字符串 字符串
TIME 自午夜以来经过的微秒数(不考虑时区)。 “time-micros”逻辑类型 字符串 [ISO-8601]
TIME_INTERVAL 两个事件之间经过了多少微秒

自定义逻辑类型


{
  "type": "long",
  "logicalType": "time-interval-micros"
}
长整型
TIMESTAMP 自纪元以来经过了多少微秒(不考虑时区) 时间戳逻辑类型 字符串 [ISO-8601]
TIMESTAMP WITH TIME ZONE 自纪元以来经过了多少微秒(以毫秒为单位的特定时区偏移量)

自定义类型


{
  "type": "record",
  "name": "timestampTz",
  "fields": [
    {"name": "timestamp",
     "type": "long"
     "logicalType": "timestamp-micros"},
    {"name": "offset",
     "type": "int"
     "logicalType": "time-millis"}
  ]
}
    
字符串 [ISO-8601]
TIME WITH TIME ZONE 自午夜以来经过了多少微秒(采用特定时区偏移量)

自定义类型


{
  "type": "record",
  "name": "timeTz",
  "fields": [
    {"name": "time",
     "type": "long"
     "logicalType": "time-micros"},
    {"name": "offset",
     "type": "int",
     "logicalType": "time-millis"}
  ]
}
    
字符串 [ISO-8601]
UNION 不同的数据类型 Union 数组
UNSUPPORTED 不受支持的数据类型

自定义逻辑类型


{
  "type": "null",
  "logicalType": "unsupported"
}
null
VARCHAR 最大长度为 n 个字符的字符串

自定义逻辑类型


{
  "type": "string",
  "logicalType": "varchar"
  "length": N
}
字符串

将 Oracle 数据类型映射到 Datastream 统一类型

Oracle 数据类型 Datastream 统一类型
ANYDATA UNSUPPORTED
BFILE STRING
BINARY DOUBLE DOUBLE
BINARY FLOAT FLOAT
BLOB BYTES
CHAR VARCHAR
CLOB STRING
DATE DATETIME
DOUBLE PRECISION DOUBLE
FLOAT(p) DOUBLE
INTERVAL DAY TO SECOND UNSUPPORTED
INTERVAL YEAR TO MONTH UNSUPPORTED
LONG/LONG RAW UNSUPPORTED
NCHAR STRING
NCLOB STRING
NUMBER NUMBER
NUMBER(p,s<=0)

如果 p<=18,则 LONG。如果 p>18 或 p=*,则 NUMBER

NUMBER(p,s>0)

如果 p=*,则 DECIMAL(38,s),否则为 DECIMAL(p,s)

NVARCHAR2 STRING
RAW STRING
ROWID STRING
SDO_GEOMETRY UNSUPPORTED
SMALLINT INTEGER
TIMESTAMP TIMESTAMP
TIMESTAMP WITH TIME ZONE TIMESTAMP WITH TIME ZONE
UDT(用户定义的类型) UNSUPPORTED
UROWID UNSUPPORTED
VARCHAR VARCHAR
VARCHAR2 VARCHAR
XMLTYPE UNSUPPORTED

将 MySQL 数据类型映射到 Datastream 统一类型

MySQL 数据类型 Datastream 统一类型
BIGINT(size) 如果有符号,则设为 LONG;如果无符号,则设为 DECIMAL
BINARY(size) STRING (hex encoded)
BIT(size) LONG
BLOB(size) STRING (hex encoded)
BOOL INTEGER
CHAR(size) STRING
DATE 如果目标位置是 BigQuery,则是 DATE;如果目标位置是 Cloud Storage,则是 TIMESTAMP
DATETIME(fsp) DATETIME
DECIMAL(size, d) DECIMAL(size, d)
DOUBLE(size, d) DOUBLE
ENUM(val1, val2, val3, ...) STRING
FLOAT(p) FLOAT
FLOAT(size, d) FLOAT
INTEGER(size) INTEGER
JSON JSON
LONGBLOB STRING (hex encoded)
LONGTEXT STRING (hex encoded)
MEDIUMBLOB STRING (hex encoded)
MEDIUMINT(size) INTEGER
MEDIUMTEXT STRING
SET(val1, val2, val3, ...) STRING
SMALLINT(size) INTEGER
TEXT(size) STRING
TIME(fsp) INTERVAL
TIMESTAMP(fsp) TIMESTAMP
TINYBLOB STRING (hex encoded)
TINYINT(size) INTEGER
TINYTEXT STRING
VARBINARY(size) STRING (hex encoded)
VARCHAR STRING
YEAR INTEGER

将 PostgreSQL 数据类型映射到 Datastream 统一类型

PostgreSQL 数据类型 Datastream 统一类型
ARRAY JSON
BIGINT LONG
BIT BYTES
BIT_VARYING BYTES
BOOLEAN BOOLEAN
BOX UNSUPPORTED
BYTEA BYTES
CHARACTER
  • 如果有长度限制,则映射到 VARCHAR
  • 否则,映射到 STRING
CHARACTER_VARYING
  • 如果有长度限制,则映射到 VARCHAR
  • 否则,映射到 STRING
CIDR STRING
CIRCLE UNSUPPORTED
CITEXT STRING
DATE DATE
DOUBLE_PRECISION DOUBLE
ENUM STRING
INET STRING
INTEGER INTEGER
INTERVAL INTERVAL
JSON JSON
JSONB JSON
LINE UNSUPPORTED
LSEG UNSUPPORTED
MACADDR STRING
MONEY DOUBLE
NUMERIC
  • 如果精度 = -1 且比例 = -1,则映射到 NUMBER
  • 否则,映射到 DECIMAL
OID LONG
PATH UNSUPPORTED
POINT UNSUPPORTED
POLYGON UNSUPPORTED
REAL FLOAT
SMALLINT INTEGER
SMALLSERIAL INTEGER
SERIAL INTEGER
TEXT STRING
TIME TIME
TIMESTAMP TIMESTAMP
TIMESTAMP_WITH_TIMEZONE TIMESTAMP_WITH_TIMEZONE
TIME_WITH_TIMEZONE TIME_WITH_TIMEZONE
TSQUERY STRING
TSVECTOR STRING
TXID_SNAPSHOT STRING
UUID STRING
XML STRING

将 SQL Server 数据类型映射到 Datastream 统一类型

SQL Server 数据类型 Datastream 统一类型
BIGINT LONG
BINARY BYTES
BIT BOOLEAN
CHAR STRING
DATE DATE
DATETIME2 DATETIME
DATETIME DATETIME
DATETIMEOFFSET TIMESTAMP WITH TIMEZONE
DECIMAL DECIMAL (p, s)
FLOAT DOUBLE
HIERARCHYID STRING
INT INTEGER
IMAGE BYTES
MONEY DECIMAL
NCHAR STRING
NVARCHAR STRING
NVARCHAR(MAX) STRING
NTEXT STRING
NUMERIC DECIMAL (p, s)
REAL FLOAT
SMALLDATETIME DATETIME
SMALLINT INTEGER
SMALLMONEY DECIMAL
TEXT STRING
TINYINT INTEGER
TIME TIME
TIMESTAMP/ROWVERSION BYTES
UNIQUEIDENTIFIER STRING
VARCHAR STRING
VARCHAR(MAX) STRING
VARBINARY BYTES
VARBINARY(MAX) BYTES
XML STRING