Mapeamento de tipo com o PolyBase

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores no Windows

Este artigo descreve o mapeamento entre fontes de dados externas do PolyBase e o SQL Server. Você pode usar essas informações para definir corretamente tabelas externas com o CREATE EXTERNAL TABLE comando Transact-SQL.

Visão geral

Quando você cria uma tabela externa com o PolyBase, as definições de coluna, incluindo os tipos de dados e o número de colunas, devem corresponder aos dados nos arquivos externos. Se houver uma incompatibilidade, as linhas do arquivo serão rejeitadas ao consultar os dados reais.

Para tabelas externas que referenciam arquivos em fontes de dados externas, as definições de coluna e tipo devem ser mapeadas para o esquema exato do arquivo externo. Ao definir tipos de dados que referenciam dados armazenados no Hadoop/Hive, use os mapeamentos a seguir entre tipos de dados SQL e Hive e converta o tipo em um tipo de dados SQL ao selecionar uma opção nele. Os tipos incluem todas as versões do Hive, a menos que indicado de outra forma.

Observação

O SQL Server não dá suporte ao valor de dados infinito do Hive em nenhuma conversão. O PolyBase falha com um erro de conversão de tipo de dados.

Referência de mapeamento de tipos do Hadoop

Tipo de dados SQL Tipo de dados do .NET Tipo de dados do Hive Tipo de dados Hadoop/Java 1 Comentários
tinyint Byte tinyint ByteWritable Apenas para números sem sinal.
smallint Int16 smallint ShortWritable
int Int32 int IntWritable
bigint Int64 bigint LongWritable
bit Boolean boolean BooleanWritable
float Double double DoubleWritable
real Single float FloatWritable
money Decimal double DoubleWritable
smallmoney Decimal double DoubleWritable
nchar String
Char[]
string Varchar
nvarchar String
Char[]
string Varchar
char String
Char[]
string Varchar
varchar String
Char[]
string Varchar
binário Byte[] binary BytesWritable Aplica-se ao Hive 0.8 e versões posteriores.
varbinary Byte[] binary BytesWritable Aplica-se ao Hive 0.8 e versões posteriores.
date DateTime timestamp TimestampWritable
smalldatetime DateTime timestamp TimestampWritable
datetime2 DateTime timestamp TimestampWritable
datetime DateTime timestamp TimestampWritable
Tempo TimeSpan timestamp TimestampWritable
decimal Decimal decimal BigDecimalWritable Aplica-se ao Hive 0.11 e versões posteriores.

1 O Hadoop não tem mais suporte no SQL Server 2022 (16.x) e versões posteriores.

Referência de mapeamento de tipo Parquet e Delta

O mapeamento de tipo de tabela externa Parquet e Delta para tipos de dados do SQL Server está listado nesta seção.

Os arquivos Parquet e Delta Lake contêm descrições de tipo para cada coluna. A tabela a seguir descreve como os tipos Parquet são mapeados para tipos nativos do SQL.

Tipo do Parquet Tipo lógico do Parquet (anotação) Tipo de dados SQL
BOOLEAN bit
BINARY / BYTE_ARRAY varbinary
DOUBLE float
FLOAT real
INT32 int
INT64 bigint
INT96 datetime2
FIXED_LEN_BYTE_ARRAY binário
BINARY UTF8 varchar1
BINARY STRING varchar1
BINARY ENUM varchar1
FIXED_LEN_BYTE_ARRAY UUID identificador exclusivo
BINARY DECIMAL decimal
BINARY JSON varchar(8000)1
BINARY BSON Sem suporte
FIXED_LEN_BYTE_ARRAY DECIMAL decimal
BYTE_ARRAY INTERVAL Sem suporte
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 decimal
INT32 TIME (MILLIS) Tempo
INT64 INT(64, true) bigint
INT64 INT(64, false) decimal(20,0)
INT64 DECIMAL decimal
INT64 TIME (MICROS) Tempo
INT64 TIME (NANOS) Sem suporte
INT64 TIMESTAMP (normalizado para UTC) (MILLIS/MICROS) datetime2
INT64 TIMESTAMP (não normalizado para UTC) (MILLIS/MICROS) bigint - certifique-se de ajustar explicitamente o valor bigint com o deslocamento de fuso horário antes de convertê-lo em um valor de data e hora.
INT64 TIMESTAMP (NANOS) Sem suporte
Tipo complexo LISTA varchar(8000), serializado em JSON
Tipo complexo MAP varchar(8000), serializado em JSON

1 Ordenação UTF-8.

Referência de mapeamento de tipos Oracle

Tipo de dados de Oracle Tipos de dados do 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

Tipos incompatíveis

Float

O Oracle dá suporte à precisão de ponto flutuante de 126, que é inferior ao que o SQL Server dá suporte (53). Portanto, Float (1 a 53) pode ser mapeado diretamente, mas, além disso, ocorre perda de dados devido ao truncamento.

Timestamp

Carimbo de data/hora e carimbo de data/hora com fuso horário local no Oracle são compatíveis com a precisão de 9 segundos fracionários, enquanto o DateTime2 do SQL Server é compatível com uma precisão de apenas 7 segundos fracionários.

Mapeamento de tipo do MongoDB

Tipo de dados BSON Tipos de dados do SQL Server
Double float
String nvarchar
Dados binários nvarchar
ID de objeto nvarchar
booleano bit
Data datetime2
Inteiro de 32 bits int
Timestamp nvarchar
Inteiro de 64 bits bigint
Decimal 128 decimal
DBPointer nvarchar
JavaScript nvarchar
Chave máxima nvarchar
Chave mínima nvarchar
Símbolo nvarchar
Expressão Regular nvarchar
Indefinido/NULO nvarchar

O MongoDB usa documentos BSON para armazenar os registros de dados. Diferentemente de cenários anteriores, o BSON é sem esquema e dá suporte à inserção de documentos e matrizes em outros documentos. Isso proporciona flexibilidade ao usuário.

Referência de mapeamento de tipo da Teradata

Tipo de dados Teradata Tipos de dados do SQL Server
INTEGER int
SMALLINT smallint
BIGINT bigint
BYTEINT smallint
DECIMAL decimal
FLOAT decimal
BYTE binário
VARBYTE varbinary
BLOB varbinary
CHAR nchar
CLOB nvarchar
VARCHAR nvarchar
Graphic nchar
JSON nvarchar
VARGRAPHIC nvarchar
DATE date
TIMESTAMP datetime2
TIME Tempo
TIME WITH TIME ZONE Tempo
TIMESTAMP WITH TIME ZONE Tempo