Freigeben über


Tabellendatentypen in Synapse SQL

In diesem Artikel finden Sie Empfehlungen zum Definieren von Tabellendatentypen in dedizierten Synapse SQL-Pools.

Datentypen

Dedizierte Synapse SQL-Pools unterstützen die am häufigsten verwendeten Datentypen. Eine Liste der unterstützten Datentypen finden Sie in der CREATE TABLE-Anweisung unter Datentypen. Informationen zu Synapse SQL (serverlos) finden Sie im Artikel Abfragen von Speicherdateien mit einem serverlosen SQL-Pool in Azure Synapse Analytics und Verwenden von OPENROWSET mit einem serverlosen SQL-Pool in Azure Synapse Analytics.

Minimieren der Zeilenlänge

Durch das Minimieren der Größe von Datentypen wird die Zeilenlänge verkürzt. Dies führt zu einer besseren Abfrageleistung. Verwenden Sie den kleinsten Datentyp, der für Ihre Daten funktioniert.

  • Vermeiden Sie es, für Zeichenspalten eine hohe Standardlänge zu definieren. Wenn der längste Wert 25 Zeichen umfasst, sollten Sie die Spalte VARCHAR(25) definieren.
  • Vermeiden Sie die Verwendung von NVARCHAR, wenn Sie nur VARCHAR benötigen.
  • Verwenden Sie anstelle von NVARCHAR(MAX) oder VARCHAR(MAX) nach Möglichkeit NVARCHAR(4000) oder VARCHAR(8000).
  • Vermeiden Sie die Verwendung von Gleitkommazahlen und Dezimalzahlen mit 0 (null) Dezimalstellen. Dafür sollten TINYINT, SMALLINT, INT oder BIGINT verwendet werden.

Hinweis

Wenn Sie Ihre Synapse SQL-Tabellen mithilfe externer PolyBase-Tabellen laden, darf die definierte Länge der Tabellenzeile 1 MB nicht überschreiten. Wenn eine Zeile mit Daten variabler Länge 1 MB überschreitet, können Sie die Zeile mit BCP, jedoch nicht mit PolyBase laden.

Identifizieren nicht unterstützter Datentypen

Wenn Sie die Datenbank von einer anderen SQL-Datenbank migrieren, kommen unter Umständen einige Datentypen vor, die in Synapse SQL nicht unterstützt werden. Verwenden Sie diese Abfrage, um nicht unterstützte Datentypen in Ihrem vorhandenen SQL-Schema zu ermitteln.

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;

Problemumgehungen für nicht unterstützte Datentypen

Die folgende Liste zeigt die Datentypen, die nicht von Synapse SQL unterstützt werden, und bietet Alternativen, die Sie anstelle der nicht unterstützten Datentypen verwenden können.

Nicht unterstützte Datentypen Problemumgehung
geometry varbinary
geography varbinary
hierarchyid nvarchar(4000)
image varbinary
text varchar
ntext nvarchar
sql_variant Spalte in mehrere Spalten mit starker Typisierung unterteilen.
Tabelle Führen Sie eine Konvertierung in temporäre Tabellen durch, oder erwägen Sie die Speicherung von Daten im Speicher mit CETAS.
timestamp Überarbeiten Sie Code mit datetime2 und der CURRENT_TIMESTAMP-Funktion. Nur Konstanten werden als Standardwerte unterstützt. Daher kann „current_timestamp“ nicht als Standardeinschränkung definiert werden. Wenn Sie Zeilenversionswerte aus einer Spalte vom Typ „timestamp“ migrieren müssen, sollten Sie BINARY(8) oder VARBINARY(8) für NOT NULL- oder NULL-Zeilenversionswerte verwenden.
xml varchar
Benutzerdefinierter Typ Führen Sie, wenn möglich, eine Rückkonvertierung in den nativen Datentyp durch.
Standardwerte Standardwerte unterstützen nur Literale und Konstanten.

Weitere Informationen zum Entwickeln von Tabellen finden Sie in der Übersicht über die Entwicklung.