この記事では、専用 SQL プールでテーブル データ型を定義するための推奨事項について説明します。
サポートされているデータの種類
専用 SQL プール (以前の SQL DW) では、最も一般的に使用されるデータ型がサポートされています。 サポートされているデータ型の一覧については、CREATE TABLE ステートメントの データ型 を参照してください。
行の長さを最小限に抑える
データ型のサイズを最小限に抑えることで行の長さが短縮され、クエリのパフォーマンスが向上します。 データに対して機能する最小のデータ型を使用します。
- 既定の長さが大きい文字列は定義しないでください。 たとえば、最長の値が 25 文字の場合は、列を VARCHAR(25) として定義します。
- VARCHAR のみが必要な場合は 、NVARCHAR を使用しないでください。
- 可能であれば、NVARCHAR(MAX) または VARCHAR(MAX) の代わりに NVARCHAR(4000) または VARCHAR(8000) を使用します。
PolyBase 外部テーブルを使用してテーブルを読み込む場合、テーブル行の定義済みの長さは 1 MB を超えることはできません。 可変長データを含む行が 1 MB を超える場合は、行を BCP で読み込むことができますが、PolyBase では読み込まれません。
サポートされていないデータ型を識別する
別の SQL データベースからデータベースを移行する場合は、専用 SQL プールでサポートされていないデータ型が見つかる場合があります。 既存の SQL スキーマでサポートされていないデータ型を検出するには、次のクエリを使用します。
SELECT t.[name], c.[name], c.[system_type_id], c.[user_type_id], y.[is_user_defined], y.[name]
FROM sys.tables t
JOIN sys.columns c on t.[object_id] = c.[object_id]
JOIN sys.types y on c.[user_type_id] = y.[user_type_id]
WHERE y.[name] IN ('geography','geometry','hierarchyid','image','text','ntext','sql_variant','xml')
AND y.[is_user_defined] = 1;
サポートされていないデータ型の回避策
次の一覧は、専用 SQL プール (旧称 SQL DW) がサポートしていないデータ型を示し、サポートされていないデータ型の代替手段として役立ちます。
| サポートされていないデータ型 | 対処法 |
|---|---|
| geometry | varbinary |
| geography | varbinary |
| hierarchyid | nvarchar(4000) |
| image | varbinary |
| text | varchar |
| エヌテキスト | nvarchar |
| sql_variant | 列を複数の厳密に型指定された列に分割します。 |
| table | 一時テーブルに変換します。 |
| タイムスタンプ | datetime2 と CURRENT_TIMESTAMP 関数を使用するようにコードを修正します。 定数のみが既定値としてサポートされているため、current_timestampは既定の制約として定義できません。 タイムスタンプ型の列から行バージョンの値を移行する必要がある場合は、NOT NULL または NULL 行バージョンの値に BINARY(8) または VARBINARY(8) を使用します。 |
| xml | varchar |
| ユーザー定義型 | 可能な場合は、ネイティブ データ型に戻します。 |
| 既定値 | 既定値では、リテラルと定数のみがサポートされます。 |
次のステップ
テーブルの開発の詳細については、「 テーブルの概要」を参照してください。