Synapse SQL でのテーブルのデータ型

この記事では、Synapse SQL 専用プールでテーブルのデータ型を定義するための推奨事項を紹介します。

データの種類

Synapse SQL 専用 SQL プールでは、一般的に使用されるほとんどのデータ型がサポートされます。 サポートされるデータ型の一覧については、CREATE TABLE ステートメントのデータ型を参照してください。 Synapse SQL サーバーレスの場合は、「Azure Synapse Analytics のサーバーレス SQL プールを使用してストレージ ファイルにクエリを実行する」と「Azure Synapse Analytics でサーバーレス SQL プールを使う際の OPENROWSET の使用方法」の記事を参照してください。

行の長さを最小化する

データ型のサイズを最小化すると、行の長さが短くなり、クエリのパフォーマンスの向上につながります。 データに適した最小のデータ型を使用します。

  • 既定の長さで文字列を定義しないようにしてください。 たとえば、最長値が 25 文字の場合は、列を VARCHAR(25) として定義します。
  • VARCHAR のみが必要な場合は、NVARCHAR を使用しないようにしてください。
  • 可能であれば、NVARCHAR(MAX) または VARCHAR(MAX) の代わりに、NVARCHAR(4000) または VARCHAR(8000) を使用します。
  • 0 (ゼロ) スケールの浮動小数点および小数の使用は避けてください。 これらは TINYINT、SMALLINT、INT、または BIGINT にしてください。

注意

Synapse SQL テーブルの読み込みに PolyBase 外部テーブルを使用している場合、テーブル行の定義された長さが 1 MB を超えることはできません。 可変長データを含む行が 1 MB を超える場合、BCP で行を読み込めますが、PolyBase では読み込めません。

サポートされていないデータ型を識別する

データベースを別の SQL データベースから移行する場合は、データ型が Synapse 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')
 OR  y.[is_user_defined] = 1;

サポートされていないデータ型の対処法

以下のリストには、Synapse SQL でサポートされていないデータ型と、サポートされていないデータ型の代わりに使用できるデータ型が示されています。

サポートされていないデータ型 回避策
geometry varbinary
geography varbinary
hierarchyid nvarchar(4000)
image varbinary
text varchar
ntext nvarchar
sql_variant 列を厳密に型指定された複数の列に分割します。
テーブル 一時テーブルに変換するか、CETAS を使用してデータをストレージに格納することを検討してください。
timestamp datetime2 および CURRENT_TIMESTAMP 関数を使用するように、コードを再作成します。 定数のみが既定値としてサポートされているため、current_timestamp を既定の制約として定義できません。 timestamp で型指定された列から行バージョンの値を移行する必要がある場合は、行バージョンの値 NOT NULL または NULL に BINARY(8) または VARBINARY(8) を使用します。
xml varchar
ユーザー定義型 可能な場合は、ネイティブ データ型に戻します。
既定値 既定値では、リテラルと定数のみがサポートされます。

次のステップ

テーブルの開発に関する詳細については、テーブルの概要に関するページを参照してください。