Mapeamentos de tipos unificados para tipos de dados de origem e destino

Visão geral

Os tipos unificados são os tipos de dados que aparecem nos eventos Avro ou JSON. Elas são uma representação unificada e específica do Datastream de um tipo de dados em várias origens e destinos de dados, como um banco de dados Oracle de origem, um banco de dados MySQL ou PostgreSQL e um destino do BigQuery ou do Cloud Storage.

Os tipos unificados são o superconjunto de todas as representações de tipos compatíveis, que representam o tipo de origem original de maneira genérica, mas sem perdas.

A tabela a seguir lista:

  • Os tipos unificados associados ao Datastream
  • Os mapeamentos entre os tipos de dados de um banco de dados Oracle, MySQL ou PostgreSQL e os tipos unificados do Datastream

Consulte a documentação de destino do BigQuery para saber mais sobre os mapeamentos entre os tipos de dados das diferentes origens e o BigQuery.

Tipos unificados de fluxo de dados

Nome do tipo Informações Definição do Avro Definição de JSON
BOOLEAN boolean boolean boolean
BYTES Uma sequência de bytes não assinados bytes string
DATE Dias desde a época Um tipo lógico de data String (ISO 8601)
DATETIME A data (em dias desde a época) e a hora (em microssegundos a partir da meia-noite)

Um tipo personalizado


{
  "type": "record",
  "name": "datetime",
  "fields": [
    {"name": "date",
     "type": "int",
     "logicalType": "date"},
    {"name": "time",
     "type": "long",
     "logicalType": "time-micros"}
  ]
}
    
String (ISO 8601)
DECIMAL (p,s) Um número decimal com precisão arbitrária Um tipo lógico decimal número
DOUBLE números de ponto flutuante de 64 bits duplo number
FLOAT números de ponto flutuante de 32 bits float número
INTEGER Um número inteiro de 64 bits int number
INTERVAL Duração entre dois eventos (em meses, horas e microssegundos)

Um tipo personalizado


{
  "type": "record",
  "name": "interval",
  "fields": [
    {"name": "months",
     "type": "int"}
    {"name": "hours",
     "type": "int"},
    {"name": "micros",
     "type": "long"}
  ]
}
    
String (ISO 8601)
JSON Um objeto JSON

Um tipo lógico personalizado


{
  "type": "string",
  "logicalType": "json"
}
JSON aninhado
LONG Um número inteiro de 64 bits long número
NUMBER Um tipo de dados numéricos

Um tipo lógico personalizado


{
  "type": "string",
  "logicalType": "number"
}
string
STRING Um comprimento de string ilimitado string string
TIME Quantos microssegundos se passaram desde a meia-noite, independentemente do fuso horário. Um tipo lógico time-micros String (ISO 8601)
TIME_INTERVAL Quantos microssegundos se passaram entre dois eventos

Um tipo lógico personalizado


{
  "type": "long",
  "logicalType": "time-interval-micros"
}
long
TIMESTAMP Quantos microssegundos se passaram desde a época, independentemente do fuso horário Um tipo lógico de carimbo de data/hora String (ISO 8601)
TIMESTAMP WITH TIME ZONE Quantos microssegundos se passaram desde o início da época com uma diferença de fuso horário específica em milissegundos.

Um tipo personalizado


{
  "type": "record",
  "name": "timestampTz",
  "fields": [
    {"name": "timestamp",
     "type": "long"
     "logicalType": "timestamp-micros"},
    {"name": "offset",
     "type": "int"
     "logicalType": "time-millis"}
  ]
}
    
String (ISO 8601)
TIME WITH TIME ZONE Quantos microssegundos se passaram desde a meia-noite com uma diferença específica de fuso horário

Um tipo personalizado


{
  "type": "record",
  "name": "timeTz",
  "fields": [
    {"name": "time",
     "type": "long"
     "logicalType": "time-micros"},
    {"name": "offset",
     "type": "int",
     "logicalType": "time-millis"}
  ]
}
    
String (ISO 8601)
UNION Um tipo de dados variável. Union matriz
UNSUPPORTED Um tipo de dados não compatível

Um tipo lógico personalizado


{
  "type": "null",
  "logicalType": "unsupported"
}
null
VARCHAR Uma string com comprimento máximo de n caracteres.

Um tipo lógico personalizado


{
  "type": "string",
  "logicalType": "varchar"
  "length": N
}
string

Mapear tipos de dados Oracle para tipos unificados do Datastream

Tipo de dados Oracle Tipo unificado do 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)

Se p<=18, então LONG. Se p>18 ou p=*, então NUMBER.

NUMBER(p,s>0)

Se p=*, em seguida, DECIMAL(38,s), caso contrário 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 (tipo definido pelo usuário) UNSUPPORTED
UROWID UNSUPPORTED
VARCHAR VARCHAR
VARCHAR2 VARCHAR
XMLTYPE UNSUPPORTED

Mapear tipos de dados MySQL para tipos unificados do Datastream

Tipo de dados do MySQL Tipo unificado do Datastream
BIGINT(size) Se estiver assinado, então LONG. Se não estiver assinado, então DECIMAL
BINARY(size) STRING (hex encoded)
BIT(size) LONG
BLOB(size) STRING (hex encoded)
BOOL INTEGER
CHAR(size) STRING
DATE Se o destino for BigQuery, então DATE, se for Cloud Storage, então 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

Mapear tipos de dados do PostgreSQL para tipos unificados do Datastream

Tipo de dados do PostgreSQL Tipo unificado do Datastream
ARRAY JSON
BIGINT LONG
BIT BYTES
BIT_VARYING BYTES
BOOLEAN BOOLEAN
BOX UNSUPPORTED
BYTEA BYTES
CHARACTER
  • Se houver um limite de comprimento, mapeie para VARCHAR
  • Caso contrário, mapeie para STRING
CHARACTER_VARYING
  • Se houver um limite de comprimento, mapeie para VARCHAR
  • Caso contrário, mapeie para 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
  • Se a precisão = -1 e a escala = -1, mapeie para NUMBER
  • Caso contrário, mapeie para 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

Mapear tipos de dados do SQL Server para tipos unificados do Datastream

Tipo de dados do SQL Server Tipo unificado do 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