SnowConvert AI - Oracle - Tipos de dados¶
Esta seção mostra os equivalentes entre os tipos de dados no Oracle e no Snowflake, bem como algumas observações sobre diferenças aritméticas.
Oracle |
Snowflake |
|---|---|
*Acesse o link para obter mais informações |
|
VARCHAR |
|
FLOAT |
|
FLOAT |
|
BINARY |
|
CHAR (N) |
|
VARCHAR |
|
TIMESTAMP |
|
FLOAT |
|
VARCHAR(20) |
|
VARCHAR(20) |
|
VARIANT |
|
VARCHAR |
|
BINARY |
|
NCHAR (N) |
|
VARCHAR |
|
NUMBER(p, s) |
|
VARCHAR (N) |
|
BINARY |
|
VARCHAR(18) |
|
VARCHAR (N) |
|
Atualmente incompatível |
|
*a ser definido |
|
*a ser definido |
|
VARIANT |
|
*a ser definido |
|
*a ser definido |
|
TIMESTAMP |
|
TIMESTAMP_TZ |
|
TIMESTAMP_LTZ |
|
*a ser definido |
|
VARCHAR(18) |
|
VARCHAR |
|
VARCHAR |
|
VARIANT |
Notas sobre operações aritméticas¶
Lembre-se de que toda operação realizada em tipos de dados numéricos é armazenada internamente como um número. Além disso, dependendo da operação realizada, é possível incorrer em um erro relacionado à forma como os valores intermediários são armazenados no Snowflake. Para obter mais informações, consulte esta postagem sobre números intermediários no Snowflake.
Tipos de dados de ANSI¶
Descrição¶
Instruções SQL que criam tabelas e clusters também podem usar os tipos de dados ANSI e os tipos de dados dos produtos IBM SQL/DS e DB2. A Oracle reconhece o nome do tipo de dados ANSI ou IBM que é diferente do nome do tipo de dados do Oracle Database. Ele converte o tipo de dados para o tipo de dados Oracle equivalente, registra o tipo de dados Oracle como o nome do tipo de dados da coluna e armazena os dados da coluna no tipo de dados Oracle com base nas conversões mostradas nas tabelas a seguir. (Tipos de dados ANSI, DB2 e SQL/DS da referência de linguagem Oracle).
Ao criar uma nova tabela, o Oracle e o Snowflake tratam alguns tipos de dados como sinônimos e aliases e os transformam no tipo de dados padrão. Conforme mostrado na tabela a seguir:
ANSI |
ORACLE |
SNOWFLAKE |
|---|---|---|
CHARACTER (n) |
CHAR (n) |
VARCHAR |
CHAR (n) |
CHAR (n) |
VARCHAR |
CHARACTER VARYING (n) |
VARCHAR2 (n) |
VARCHAR |
CHAR VARYING (n) |
VARCHAR2 (n) |
VARCHAR |
NATIONAL CHARACTER (n) |
NCHAR (n) |
VARCHAR* |
NATIONAL CHAR (n) |
NCHAR (n) |
VARCHAR* |
NCHAR (n) |
NCHAR (n) |
VARCHAR |
NATIONAL CHARACTER VARYING (n) |
NVARCHAR2 (n) |
VARCHAR* |
NATIONAL CHAR VARYING (n) |
NVARCHAR2 (n) |
VARCHAR* |
NCHAR VARYING (n) |
NVARCHAR2 (n) |
NUMBER (p, s) |
NUMERIC [(p, s)] |
NUMBER (p, s) |
NUMBER (p, s) |
DECIMAL [(p, s)] |
NUMBER (p, s) |
NUMBER (38) |
INTEGER |
NUMBER (38) |
NUMBER (38) |
INT |
NUMBER (38) |
NUMBER (38) |
SMALLINT |
NUMBER (38) |
NUMBER (38) |
FLOAT |
FLOAT (126) |
DOUBLE |
DOUBLE PRECISION |
FLOAT (126) |
DOUBLE |
REAL |
FLOAT (63) |
DOUBLE |
Para obter mais informações sobre a especificação de tradução dos tipos de dados Oracle, acesse Tipos de dados internos Oracle.
Nota
VARCHAR*: Quase todos os tipos de dados ANSI são compilados no Snowflake, mas aqueles marcados com um asterisco são convertidos manualmente para VARCHAR.
Problemas conhecidos¶
Não foram encontrados problemas.
Personalização do tipo de dados¶
A conversão do tipo de dados durante um processo de migração de banco de dados é algo que muitos usuários precisam para personalizar e definir valores de precisão com mais precisão. Por esse motivo, o SnowConvert AI permite a personalização do tipo de dados para especificar regras de transformação de tipo de dados considerando a origem do tipo de dados e o nome da coluna.
Tipos de dados suportados¶
Os seguintes tipos de dados são compatíveis
NUMBER
Estrutura de JSON¶
O SnowConvert AI recebe um arquivo JSON com a seguinte estrutura.
{
"types" : {
},
"columns": [
{
"nameExpression" : "",
"targetType" : ""
}
]
}
O objeto types define o tipo de dados de origem e o tipo de dados que o destino deve ser. Além disso, você pode definir uma regra geral que converte o tipo de dados de origem com ou sem precisão. Por exemplo:
"types" : {
"NUMBER" : "NUMBER(11, 2)",
"NUMBER(10, 0)" : "NUMBER(3, 0)"
}
O objeto columns é uma matriz, e cada objeto da matriz define o nome ou a expressão regex das colunas para alterar o tipo.
"columns": [
{
"nameExpression" : "MONTH",
"targetType" : "NUMBER(2,0)"
}
]
Nota
Ao usar a personalização de expressões regulares, a migração pode ser afetada se a regex não estiver correta.
Prioridade de personalização¶
Pode haver regras de personalização que se aplicam ao mesmo objeto; entretanto, apenas um será escolhido. O SnowConvert AI considerará as seguintes condições para priorizar qual regra seguir.
A primeira regra em colunas está localizada de cima para baixo.
A regra definida no tipo considerando a precisão.
A regra geral é definida para o tipo de dados.
A regra é definida no SnowConvert.
Exemplo¶
Digamos que temos o seguinte código de entrada.
Código de entrada
CREATE TABLE employees (
employee_ID NUMBER,
manager_YEAR NUMBER(10, 0),
manager_MONTH NUMBER(10, 0)
);
E as seguintes informações de renomeação
Arquivo de personalização (.JSON)
{
"types" : {
"NUMBER" : "NUMBER(11, 2)",
"NUMBER(10, 0)" : "NUMBER(3, 0)"
},
"columns": [
{
"nameExpression" : "MONTH",
"targetType" : "NUMBER(2,0)"
}
]
}
Esse seria o código de saída com e sem tipos de dados de personalização.
Código de saída do Snowflake¶
Sem renomeação¶
CREATE OR REPLACE TABLE employees (
employee_ID NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
manager_YEAR NUMBER(10) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
manager_MONTH NUMBER(10) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/
)
;
Com renomeação¶
CREATE OR REPLACE TABLE employees (
employee_ID NUMBER(11, 2),
manager_YEAR NUMBER(3, 0),
manager_MONTH NUMBER(2, 0)
)
;
Observe como todos os tipos de NUMBER são migrados para os tipos especificados no arquivo json.