Mapping dei tipi con PolyBase

Si applica a: SQL Server (solo Windows)Not supported. Database SQL di Azure Not supported. Azure Synapse Analytics Not supported. 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
time TimeSpan timestamp TimestampWritable
decimal Decimale decimal 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 (NANOS) Non supportato
INT64 TIMESTAMP (normalizzato in utc) (MILLIS / MICROS) datetime2
INT64 TIMESTAMP (non normalizzato in utc) (MILLIS / MICROS) 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 (NANOS) 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 Ora
TIME WITH TIME ZONE Ora
TIMESTAMP WITH TIME ZONE Ora

Passaggi successivi

Per altre informazioni su come usare questa funzionalità, vedere l'articolo di riferimento per Transact-SQL per CREATE EXTERNAL TABLE.