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

概览

统一类型是指 Avro 或 JSON 事件中显示的数据类型。它们是 Datastream 专有的统一表示法,用于表示多个数据源和目标(例如源 Oracle 数据库、MySQL 数据库或 PostgreSQL 数据库,以及 BigQuery 或 Cloud Storage 目标)中的数据类型。

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

下表列出了:

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

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

Datastream 统一类型

类型名称 信息 Avro 定义 JSON 定义
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 位整数 整数 数字
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 不断变化的数据类型 联合 数组
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) SIGNED LONG
BIGINT(size) UNSIGNED 如果目标位置是 BigQuery,则为 DECIMAL;如果是 Cloud Storage,则为 NUMBER
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) 如果目标位置是 BigQuery,则 DATETIME;如果目标位置是 Cloud Storage,则 TIMESTAMP
DECIMAL(size, d) DECIMAL(size, d)
DOUBLE(size, d) DOUBLE
ENUM(val1, val2, val3, ...) STRING
FLOAT(p) FLOAT
FLOAT(size, d) FLOAT
GEOMETRY UNSUPPORTED
INTEGER(size) SIGNED INTEGER
INTEGER(size) UNSIGNED LONG
JSON 如果目标位置是 BigQuery,则为 JSON;如果是 Cloud Storage,则为 STRING
LONGBLOB STRING (hex encoded)
LONGTEXT STRING
MEDIUMBLOB STRING (hex encoded)
MEDIUMINT(size) INTEGER
MEDIUMTEXT STRING
SET(val1, val2, val3, ...) STRING
SMALLINT(size) INTEGER
TEXT(size) STRING
TIME(fsp) 如果目标位置是 BigQuery,则为 INTERVAL;如果是 Cloud Storage,则为 TIME_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 且 scale = -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

后续步骤