SnowConvert AI - Oracle - Types de données

Cette section montre les équivalents entre les types de données dans Oracle et Snowflake, ainsi que quelques remarques sur les différences arithmétiques.

Oracle

Snowflake

Types de données ANSI

*Accédez au lien pour obtenir plus d’informations

BFILE

VARCHAR

BINARY_DOUBLE

FLOAT

BINARY_FLOAT

FLOAT

BLOB

BINARY

CHAR (N)

CHAR [N]

CLOB

VARCHAR

DATE

TIMESTAMP

FLOAT

FLOAT

INTERVAL YEAR TO MONTH

VARCHAR(20)

INTERVAL DAY TO SECOND

VARCHAR(20)

JSON

VARIANT

LONG

VARCHAR

LONG RAW

BINARY

NCHAR (N)

NCHAR [N]

NCLOB

VARCHAR

NUMBER(p, s)

NUMBER(p, s)

NVARCHAR2 (N)

VARCHAR [N]

RAW

BINARY

ROWID

VARCHAR(18)

VARCHAR2 (N)

VARCHAR [N]

SDO_GOMETRY

Actuellement non pris en charge

SDO_TOPO___GEOMETRY

*à définir

SDO_GEORASTER

*à définir

SYS.ANYDATA

VARIANT

SYS.ANYDATASET

*à définir

SYS.ANYTYPE

*à définir

TIMESTAMP

TIMESTAMP

TIMESTAMP WITH TIME ZONE

TIMESTAMP_TZ

TIMESTAMP WITH LOCAL TIME ZONE

TIMESTAMP

URITYPE

*à définir

UROWID

VARCHAR(18)

VARCHAR

VARCHAR

VARCHAR2

VARCHAR

XMLType

VARIANT

Notes sur les opérations arithmétiques

Notez que toute opération effectuée sur des types de données numériques est stockée en interne sous la forme d’un nombre. De plus, en fonction de l’opération effectuée, il est possible d’encourir une erreur liée à la manière dont les valeurs intermédiaires sont stockées dans Snowflake, pour plus d’informations veuillez consulter ce post Snowflake sur les nombres intermédiaires dans Snowflake.

Types de données ANSI

Description

Les instructions SQL qui créent des tables et des clusters peuvent également utiliser les types de données ANSI et les types de données des produits IBM SQL/DS et DB2. Oracle reconnaît le nom du type de données ANSI ou IBM qui diffère du nom du type de données de la base de données Oracle. Il convertit le type de données en type de données Oracle équivalent, enregistre le type de données Oracle comme nom du type de données de la colonne et stocke les données de la colonne dans le type de données Oracle en fonction des conversions indiquées dans les tables suivantes. (Référence linguistique Oracle types de données ANSI, DB2, et SQL/DS).

Lors de la création d’une nouvelle table, Oracle et Snowflake traitent certains types de données comme des synonymes et des alias et les transforment en type de données par défaut. Comme le montre la table suivante :

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

Pour obtenir plus d’informations sur la spécification de traduction des types de données Oracle, accédez à Types de données intégrés Oracle.

Note

VARCHAR* : Presque tous les types de données ANSI se compilent dans Snowflake, mais ceux qui sont marqués d’un astérisque sont convertis manuellement en VARCHAR.

Problèmes connus

Aucun problème n’a été constaté.

Personnalisation du type de données

La conversion de type de données au cours d’un processus de migration de base de données implique que de nombreux utilisateurs doivent personnaliser et configurer les valeurs de précision avec plus d’exactitude. C’est pourquoi SnowConvert AI permet à la personnalisation du type de données de spécifier des règles de transformation de type de données en tenant compte de l’origine du type de données et du nom de la colonne.

Types de données pris en charge

Les types de données suivants sont pris en charge.

  • NUMBER

Structure JSON

SnowConvert AI reçoit un fichier JSON avec la structure suivante.

{
  "types" : {
  },
  "columns": [
      {
          "nameExpression" : "",
          "targetType" : ""
      }
  ]
}
Copy

L’objet Types définit le type de données d’origine et le type de données que la cible doit être. De plus, vous pouvez définir une règle générale qui convertit le type de données d’origine avec ou sans précision. Par exemple :

"types" : {
    "NUMBER" : "NUMBER(11, 2)",
    "NUMBER(10, 0)" : "NUMBER(3, 0)"
}
Copy

L’objet colonnes est un tableau, et chaque objet du tableau définit le nom ou l’expression regex des colonnes pour changer le type.

"columns": [
    {
        "nameExpression" : "MONTH",
        "targetType" : "NUMBER(2,0)"
    }
]
Copy

Note

Lorsque vous utilisez la personnalisation des expressions régulières, la migration peut être affectée si l’expression régulière n’est pas correcte.

Priorité de la personnalisation

Il peut y avoir des règles de personnalisation qui s’appliquent au même objet ; cependant, une seule sera choisie. SnowConvert AI prendra en compte les considérations suivantes pour donner la priorité à la règle à suivre.

  1. La première règle en colonne est située de haut en bas.

  2. La règle définie dans le type en tenant compte de la précision.

  3. La règle générale est définie pour le type de données.

  4. La règle est définie à l’adresse SnowConvert.

Exemple

Supposons que nous ayons le code d’entrée suivant.

Code d’entrée

CREATE TABLE employees (
	employee_ID NUMBER,
	manager_YEAR NUMBER(10, 0),
	manager_MONTH NUMBER(10, 0)
);
Copy

Et les informations de renommage suivantes

Fichier de personnalisation (.JSON)

{
    "types" : {
        "NUMBER" : "NUMBER(11, 2)",
        "NUMBER(10, 0)" : "NUMBER(3, 0)"    
    },
    "columns": [
        {
            "nameExpression" : "MONTH",
            "targetType" : "NUMBER(2,0)"
        }
    ]
}
Copy

Il s’agirait du code de sortie avec et sans les types de données de personnalisation.

Code de sortie Snowflake
Sans renommage
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. ***/
)
;
Copy
Avec renommage
CREATE OR REPLACE TABLE employees (
	employee_ID NUMBER(11, 2),
	manager_YEAR NUMBER(3, 0),
	manager_MONTH NUMBER(2, 0)
)
;
Copy

Remarquez que tous les types de NUMBER sont migrés vers les types spécifiés dans le fichier JSON.