PolyBase を使用した型マッピング
適用対象: SQL Server (Windows のみ) Azure SQL データベース Azure Synapse Analytics Analytics Platform System (PDW)
この記事では、PolyBase 外部データ ソースと SQL Server 間のマッピングについて説明します。 この情報を使用して、CREATE EXTERNAL TABLE Transact-SQL コマンドで外部テーブルを正しく定義できます。
概要
PolyBase を使用して外部テーブルを作成する場合、データ型や列の数などの列の定義は、外部ファイル内のデータと一致している必要があります。 不一致がある場合、実際のデータに対してクエリを実行するときに、ファイルの行が拒否されます。
外部データ ソース内のファイルを参照する外部のテーブルでは、列と型の定義は、外部ファイルの正確なスキーマにマップする必要があります。 Hadoop/Hive に格納されているデータを参照するデータの種類を定義する場合は、SQL、および Hive のデータ型の間では、次のマッピングを使用し、そこから選択するときに、SQL のデータ型に型をキャストします。 型には、特にそれ以外の場合に記されていない、Hive のすべてのバージョンが含まれます。
Note
SQL Server では、いずれの変換でも Hive の infinityのデータ値をサポートしていません。 PolyBase はデータ型変換エラーで失敗します。
Hadoop 型マッピング リファレンス
SQL データ型 | .NET データ型 | Hive データ型 | Hadoop と Java のデータ型1 | Comments |
---|---|---|---|---|
tinyint | Byte | tinyint | ByteWritable | 符号なし数値の場合のみです。 |
smallint | Int16 | smallint | ShortWritable | |
INT | Int32 | int | IntWritable | |
bigint | Int64 | bigint | LongWritable | |
bit | Boolean | boolean | BooleanWritable | |
float | Double | 倍精度浮動小数点 | DoubleWritable | |
real | Single | float | FloatWritable | |
money | Decimal | 倍精度浮動小数点 | DoubleWritable | |
smallmoney | Decimal (10 進数型) | 倍精度浮動小数点 | DoubleWritable | |
nchar | String Char[] |
string | Varchar | |
nvarchar | String Char[] |
string | Varchar | |
char | String Char[] |
string | Varchar | |
varchar | String Char[] |
string | Varchar | |
[バイナリ] | Byte[] | binary | BytesWritable | Hive 0.8 以降に適用されます。 |
varbinary | Byte[] | binary | BytesWritable | Hive 0.8 以降に適用されます。 |
日付 | DateTime | timestamp | TimestampWritable | |
smalldatetime | DateTime | timestamp | TimestampWritable | |
datetime2 | DateTime | timestamp | TimestampWritable | |
datetime | DateTime | timestamp | TimestampWritable | |
time | TimeSpan | timestamp | TimestampWritable | |
decimal | Decimal (10 進数型) | 小数 | BigDecimalWritable | Hive0.11 以降が適用されます。 |
1 SQL Server 2022 (16.x) 以降、Hadoop はサポートされなくなります。
Parquet と Delta 型のマッピング リファレンス
SQL Server データ型への Parquet および Delta 外部テーブル型のマッピングを次に示します。
Parquet および Delta Lake ファイルには、すべての列の型の説明が含まれています。 次の表では、Parquet 型を SQL ネイティブ型にマップする方法について説明します。
Parquet 型 | Parquet 論理型 (注釈) | 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 *(UTF8 照合順序) |
BINARY | STRING | varchar *(UTF8 照合順序) |
BINARY | ENUM | varchar *(UTF8 照合順序) |
FIXED_LEN_BYTE_ARRAY | UUID | UNIQUEIDENTIFIER |
BINARY | DECIMAL | decimal |
BINARY | JSON | varchar(8000) *(UTF8 照合順序) |
BINARY | BSON | サポートされていません |
FIXED_LEN_BYTE_ARRAY | DECIMAL | decimal |
BYTE_ARRAY | INTERVAL | サポートされていません |
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) | time |
INT64 | INT(64, true) | bigint |
INT64 | INT(64, false) | decimal (20,0) |
INT64 | DECIMAL | decimal |
INT64 | TIME (MICROS) | time |
INT64 | TIME (NANOS) | サポートされていません |
INT64 | TIMESTAMP (UTC に正規化) (MILLIS/MICROS) | datetime2 |
INT64 | TIMESTAMP (UTC に非正規化) (MILLIS/MICROS) | bigint - datetime 値に変換する前に、bigint 値がタイムゾーン オフセットで明示的に調整されていることを確認します。 |
INT64 | TIMESTAMP (NANOS) | サポートされていません |
複合型 | リスト | varchar(8000)、JSON にシリアル化 |
複合型 | MAP | varchar(8000)、JSON にシリアル化 |
Oracle 型マッピング リファレンス
Oracle データ型 | SQL Server の型 |
---|---|
Float | Float |
NUMBER | Float |
NUMBER (p,s) | Decimal (p, s) |
LONG | Nvarchar |
BINARY_FLOAT | 実績 |
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 |
型の不一致
Float: Oracle では、浮動小数点精度 126 がサポートされます。これは SQL Server でサポートされる精度 (53) よりも低くなっています。 そのため、Float (1-53) は直接マップできますが、それを超えると切り捨てによるデータ損失が発生します。
Timestamp:
Oracle のタイムスタンプとローカル タイムゾーンのタイムスタンプでは秒の小数部に 9 桁の精度がサポートされますが、SQL Server の DateTime2 では秒の小数部に 7 桁の精度しかサポートされません。
MongoDB 型のマッピング
BSON データ型 | SQL Server の型 |
---|---|
倍精度浮動小数点型 | Float |
String | Nvarchar |
バイナリ データ | Nvarchar |
Object ID | Nvarchar |
Boolean | bit |
日 | Datetime2 |
32-bit integer | int |
タイムスタンプ | Nvarchar |
64 ビット整数 | BigInt |
Decimal 128 | 10 進法 |
DBPointer | Nvarchar |
JavaScript | Nvarchar |
Max Key | Nvarchar |
Min Key | Nvarchar |
記号 | Nvarchar |
正規表現 | Nvarchar |
未定義/NULL | Nvarchar |
MongoDB では、BSON ドキュメントを使用して、データ レコードを格納します。 前のシナリオとは異なり、BSON はスキーマがなく、ドキュメントおよび他のドキュメント内の配列の埋め込みをサポートしています。 これによりユーザーに柔軟性を提供します。
Teradata 型マッピング リファレンス
Teradata データ型 | SQL Server の型 |
---|---|
INTEGER | int |
SMALLINT | SmallInt |
BIGINT | BigInt |
BYTEINT | SmallInt |
DECIMAL | Decimal (10 進数型) |
FLOAT | 10 進法 |
BYTE | バイナリ |
VARBYTE | Varbinary |
BLOB | varbinary |
CHAR | Nchar |
CLOB | Nvarchar |
VARCHAR | Nvarchar |
Graphic | Nchar |
JSON | Nvarchar |
VARGRAPHIC | Nvarchar |
DATE | 日 |
timestamp | Datetime2 |
TIME | 時刻 |
TIME WITH TIME ZONE | 時刻 |
TIMESTAMP WITH TIME ZONE | 時刻 |
次のステップ
これを使用する方法について詳しくは、CREATE EXTERNAL TABLE に関する Transact-SQL 参照記事をご覧ください。