Mappage des types avec PolyBase
S’applique à : SQL Server (Windows uniquement)
base de données Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Cet article décrit le mappage entre des sources de données externes PolyBase et SQL Server. Vous pouvez utiliser ces informations pour définir correctement les tables externes avec la commande Transact-SQL CREATE EXTERNAL TABLE.
Vue d’ensemble
Lors de la création d’une table externe avec PolyBase, les définitions de colonne, notamment les types de données et le nombre de colonnes, doivent correspondre aux données des fichiers externes. En cas de non correspondance, les lignes du fichier sont rejetées lors de l’interrogation des données.
Pour les tables externes qui référencent des fichiers provenant de sources de données externes, les définitions de colonne et de type doivent correspondre exactement au schéma du fichier externe. Lorsque vous définissez des types de données qui référencent des données stockées dans Hadoop/Hive, utilisez les mappages suivants entre les types de données SQL et Hive, et castez le type en un type de données SQL lorsque vous sélectionnez des données. Les types incluent toutes les versions de Hive, sauf indication contraire.
Remarque
SQL Server ne prend pas en charge la valeur de données infinie Hive lors des conversions. Si vous l’utilisez, PolyBase échoue et émet une erreur de conversion de type de données.
Informations de référence sur le mappage des types Hadoop
Type de données SQL | Type de données .NET | Type de données Hive | Type de données Hadoop/Java 1 | Commentaires |
---|---|---|---|---|
TINYINT | Byte | tinyint | ByteWritable | Pour les nombres non signés. |
SMALLINT | Int16 | smallint | ShortWritable | |
int | Int32 | int | IntWritable | |
bigint | Int64 | bigint | LongWritable | |
bit | Boolean | booléen | BooleanWritable | |
virgule flottante | Double | double | DoubleWritable | |
real | Unique | virgule flottante | FloatWritable | |
money | Decimal | double | DoubleWritable | |
SMALLMONEY | Décimal | double | DoubleWritable | |
NCHAR | String Char[] |
string | Varchar | |
NVARCHAR | String Char[] |
string | Varchar | |
char | String Char[] |
string | Varchar | |
varchar | String Char[] |
string | Varchar | |
binary | Byte[] | binary | BytesWritable | S’applique à Hive 0.8 et versions ultérieures |
varbinary | Byte[] | binary | BytesWritable | S’applique à Hive 0.8 et versions ultérieures |
date | DateTime | timestamp | TimestampWritable | |
smalldatetime | Date/Heure | timestamp | TimestampWritable | |
datetime2 | Date/Heure | timestamp | TimestampWritable | |
DATETIME | Date/Heure | timestamp | TimestampWritable | |
time | TimeSpan | timestamp | TimestampWritable | |
Décimal | Decimal | decimal | BigDecimalWritable | S’applique à Hive 0.11 et versions ultérieures |
1 Depuis SQL Server 2022 (16.x), Hadoop n’est plus pris en charge.
Informations de référence sur le mappage de type Parquet et Delta
Le mappage de type de table externe Parquet et Delta aux types de données SQL Server est répertorié ci-dessous.
Les fichiers Parquet et Delta Lake contiennent des descriptions de type pour chaque colonne. Le tableau suivant explique comment les types Parquet sont mappés aux types SQL natifs.
Type Parquet | Type logique Parquet (annotation) | Type de données SQL |
---|---|---|
BOOLEAN | bit | |
BINARY / BYTE_ARRAY | varbinary | |
DOUBLE | float | |
FLOAT | real | |
INT32 | int | |
INT64 | bigint | |
INT96 | datetime2 | |
FIXED_LEN_BYTE_ARRAY | binary | |
BINARY | UTF8 | varchar *(classement UTF8) |
BINARY | STRING | varchar *(classement UTF8) |
BINARY | ENUM | varchar *(classement UTF8) |
FIXED_LEN_BYTE_ARRAY | UUID | UNIQUEIDENTIFIER |
BINARY | DECIMAL | Décimal |
BINARY | JSON | varchar(8000) *(classement UTF8) |
BINARY | BSON | Non pris en charge |
FIXED_LEN_BYTE_ARRAY | DECIMAL | Décimal |
BYTE_ARRAY | INTERVAL | Non pris en charge |
INT32 | INT(8, true) | SMALLINT |
INT32 | INT(16, true) | SMALLINT |
INT32 | INT(32, true) | int |
INT32 | INT(8, false) | TINYINT |
INT32 | INT(16, false) | int |
INT32 | INT(32, false) | bigint |
INT32 | DATE | Date |
INT32 | DECIMAL | Décimal |
INT32 | TIME (MILLIS) | time |
INT64 | INT(64, true) | bigint |
INT64 | INT(64, false) | decimal(20,0) |
INT64 | DECIMAL | Décimal |
INT64 | TIME (MICROS) | time |
INT64 | TIME (NANOS) | Non pris en charge |
INT64 | TIMESTAMP (normalisé en UTC) (MILLIS / MICROS) | datetime2 |
INT64 | TIMESTAMP (non normalisé en UTC) (MILLIS / MICROS) | bigint : veillez à ajuster la valeur bigint explicitement avec le décalage de fuseau horaire avant de la convertir en valeur datetime. |
INT64 | TIMESTAMP (NANOS) | Non pris en charge |
Type complexe | Liste | varchar(8000), sérialisé en JSON |
Type complexe | MAP | varchar(8000), sérialisé en JSON |
Informations de référence sur le mappage des types Oracle
Type de données Oracle | Type SQL Server |
---|---|
Float | Float |
NUMBER | Float |
NUMBER (p,s) | Decimal (p, s) |
LONG | Nvarchar |
BINARY_FLOAT | Real |
BINARY_DOUBLE | Float |
CHAR | Char |
VARCHAR2 | Varchar |
NVARCHAR2 | Nvarchar |
RAW | Varbinary |
LONG RAW | Varbinary |
BLOB | Varbinary |
CLOB | Varchar |
NCLOB | Nvarchar |
ROWID | Varchar |
UROWID | Varchar |
DATE | Datetime2 |
timestamp | Datetime2 |
Incompatibilité des types
Float : Oracle prend en charge une précision en virgule flottante de 126, ce qui est considérablement inférieur à ce que SQL Server prend en charge (53). Ainsi, Float (1-53) peut être mappé directement. Au delà, des données sont perdues en raison de la troncation.
TimeStamp :
Timestamp et Timestamp with local timezone dans Oracle prennent une précision de 9 décimales pour les secondes, tandis que le type SQL Server DateTime2 prend en charge une précision de seulement 7 décimales.
Mappage de type MongoDB
Type de données BSON | Type SQL Server |
---|---|
Double | Float |
Chaîne | Nvarchar |
Données binaires | Nvarchar |
ID de l'objet | Nvarchar |
Boolean | bit |
Date | Datetime2 |
Entier de 32 bits | Int |
Timestamp | Nvarchar |
Entier 64 bits | BigInt |
Decimal 128 | Décimal |
DBPointer | Nvarchar |
JavaScript | Nvarchar |
Clé maximale | Nvarchar |
Clé minimale | Nvarchar |
Symbole | Nvarchar |
Expression régulière | Nvarchar |
Non défini/NULL | Nvarchar |
MongoDB utilise les documents BSON pour stocker les enregistrements de données. Contrairement aux scénarios précédents, BSON est sans schéma et prend en charge l’incorporation de documents et de tableaux dans d’autres documents. Cela apporte plus de souplesse à l’utilisateur.
Informations de référence sur le mappage des types Teradata
Type de données Teradata | Type SQL Server |
---|---|
INTEGER | Int |
SMALLINT | SmallInt |
BIGINT | BigInt |
BYTEINT | SmallInt |
DECIMAL | Decimal |
FLOAT | Décimal |
BYTE | Binary |
VARBYTE | Varbinary |
BLOB | varbinary |
CHAR | Nchar |
CLOB | Nvarchar |
VARCHAR | Nvarchar |
Graphic | Nchar |
JSON | Nvarchar |
VARGRAPHIC | Nvarchar |
DATE | Date |
timestamp | Datetime2 |
TIME | Temps |
TIME WITH TIME ZONE | Temps |
TIMESTAMP WITH TIME ZONE | Temps |
Étapes suivantes
Pour plus d’informations sur l’utilisation de ces paramètres, consultez l’article de référence sur Transact-SQL pour CREATE EXTERNAL TABLE.