Mapping dei tipi con PolyBase
Si applica a: SQL Server (solo Windows) Database SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)
Questo articolo descrive il mapping tra le origini dati esterne PolyBase e SQL Server. È possibile usare queste informazioni per definire correttamente le tabelle esterne con il comando Transact-SQL CREATE EXTERNAL TABLE.
Panoramica
Quando si crea una tabella esterna con PolyBase, le definizioni di colonna, inclusi i tipi di dati e il numero di colonne, devono corrispondere ai dati nei file esterni. In caso di mancata corrispondenza, le righe di file vengono rifiutate quando si eseguono query sui dati effettivi.
Per le tabelle esterne che fanno riferimento a file in origini dati esterne, è necessario eseguire il mapping delle definizioni di colonna e di tipo allo schema esatto del file esterno. Quando si definiscono i tipi di dati che fanno riferimento ai dati archiviati in Hadoop/Hive, usare i mapping seguenti tra i tipi di dati SQL e Hive ed eseguire il cast del tipo in un tipo di dati SQL quando si effettua una selezione. Se non specificato diversamente, i tipi includono tutte le versioni di Hive.
Nota
SQL Server non supporta il valore di dati Hive infinity in alcuna conversione. PolyBase avrà esito negativo con un errore di conversione del tipo di dati.
Informazioni di riferimento per i mapping dei tipi Hadoop
Tipo di dati SQL | Tipo di dati .NET | Tipo di dati Hive | Tipo di dati Hadoop/Java1 | Commenti |
---|---|---|---|---|
tinyint | Byte | tinyint | ByteWritable | Solo per numeri non firmati. |
smallint | Int16 | smallint | ShortWritable | |
int | Int32 | int | IntWritable | |
bigint | Int64 | bigint | LongWritable | |
bit | Booleano | boolean | BooleanWritable | |
float | Double | double | DoubleWritable | |
real | Singola | float | FloatWritable | |
money | Decimale | double | DoubleWritable | |
smallmoney | Decimale | 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 | Si applica a Hive 0.8 e versioni successive. |
varbinary | Byte[] | binary | BytesWritable | Si applica a Hive 0.8 e versioni successive. |
data | Data/Ora | timestamp | TimestampWritable | |
smalldatetime | Data/Ora | timestamp | TimestampWritable | |
datetime2 | Data/Ora | timestamp | TimestampWritable | |
datetime | DataOra | timestamp | TimestampWritable | |
Ora | TimeSpan | timestamp | TimestampWritable | |
decimale | Decimale | decimale | BigDecimalWritable | Si applica a Hive 0.11 e versioni successive. |
1 A partire da SQL Server 2022 (16.x) Hadoop non è più supportato.
Informazioni di riferimento sul mapping dei tipi Parquet e Delta
Di seguito viene elencato il mapping dei tipi di tabella esterni Parquet e Delta ai tipi di dati di SQL Server.
I file Parquet e Delta Lake contengono descrizioni dei tipi per ogni colonna. La tabella seguente descrive il mapping dei tipi Parquet ai tipi SQL nativi.
Tipo Parquet | Tipo logico Parquet (annotazione) | Tipo di dati 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 *(regole di confronto UTF8) |
BINARY | STRING | varchar *(regole di confronto UTF8) |
BINARY | ENUM | varchar *(regole di confronto UTF8) |
FIXED_LEN_BYTE_ARRAY | UUID | uniqueidentifier |
BINARY | DECIMAL | decimal |
BINARY | JSON | varchar(8000) * (regole di confronto UTF8) |
BINARY | BSON | Non supportato |
FIXED_LEN_BYTE_ARRAY | DECIMAL | decimal |
BYTE_ARRAY | INTERVAL | Non supportato |
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 | data |
INT32 | DECIMAL | decimal |
INT32 | TIME (MILLIS) | time |
INT64 | INT(64, true) | bigint |
INT64 | INT(64, false) | decimal(20,0) |
INT64 | DECIMAL | decimal |
INT64 | TIME (MICROS) | time |
INT64 | TIME (NANOSECONDI) | Non supportato |
INT64 | TIMESTAMP (normalizzato in UTC) (MILLISECONDI/MICROSECONDI) | datetime2 |
INT64 | TIMESTAMP (non normalizzato in UTC) (MILLISECONDI/MICROSECONDI) | bigint: assicurarsi di modificare in modo esplicito il valore bigint con l'offset del fuso orario prima di convertirlo in un valore datetime. |
INT64 | TIMESTAMP (NANOSECONDI) | Non supportato |
Tipo complesso | INSERZIONE | varchar(8000), serializzato in JSON |
Tipo complesso | MAP | varchar(8000), serializzato in JSON |
Informazioni di riferimento per i mapping dei tipi Oracle
Tipo di dati Oracle | Tipo SQL Server |
---|---|
Float | Float |
NUMBER | Float |
NUMBER (p,s) | Decimal (p, s) |
LONG | Nvarchar |
BINARY_FLOAT | Reale |
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 |
Tipo non corrispondente
Float: Oracle supporta la precisione a virgola mobile 126, inferiore rispetto alla precisione supportata da SQL Server (53). È quindi possibile il mapping diretto di Float (1-53), ma per valori superiori si verifica una perdita di dati a causa di troncamento.
Timestamp:
Timestamp e Timestamp with local timezone in Oracle supportano una precisione frazionaria pari a 9 secondi, mentre DateTime2 in SQL Server supporta una precisione frazionaria pari a 7 secondi.
Mapping dei tipi MongoDB
Tipo di dati BSON | Tipo SQL Server |
---|---|
Double | Float |
String | Nvarchar |
Dati binari | Nvarchar |
ID dell'oggetto. | Nvarchar |
Booleano | Bit |
Data | Datetime2 |
Intero a 32 bit | Int |
Timestamp: | Nvarchar |
Integer a 64 bit | BigInt |
Decimal 128 | Decimale |
DBPointer | Nvarchar |
JavaScript | Nvarchar |
Max Key | Nvarchar |
Min Key | Nvarchar |
Simbolo | Nvarchar |
Espressione regolare | Nvarchar |
Non definito/NULL | Nvarchar |
MongoDB Usa documenti BSON per archiviare i record dei dati. A differenza di allo scenario precedente, BSON è senza schema e supporta l'incorporamento di documenti e matrici all'interno di altri documenti. Questo comportamento offre maggiore flessibilità all'utente.
Informazioni di riferimento per i mapping dei tipi Teradata
Tipo di dati Teradata | Tipo SQL Server |
---|---|
INTEGER | Int |
SMALLINT | SmallInt |
bigint | BigInt |
BYTEINT | SmallInt |
DECIMAL | Decimale |
FLOAT | Decimale |
BYTE | Binario |
VARBYTE | Varbinary |
BLOB | varbinary |
CHAR | Nchar |
CLOB | Nvarchar |
VARCHAR | Nvarchar |
Graphic | Nchar |
JSON | Nvarchar |
VARGRAPHIC | Nvarchar |
DATE | Data |
TIMESTAMP | Datetime2 |
ORA | Time |
TIME WITH TIME ZONE | Time |
TIMESTAMP WITH TIME ZONE | Time |
Passaggi successivi
Per altre informazioni su come usare questa funzionalità, vedere l'articolo di riferimento per Transact-SQL per CREATE EXTERNAL TABLE.