Typy danych tabeli w usłudze Synapse SQL
W tym artykule znajdziesz zalecenia dotyczące definiowania typów danych tabeli w dedykowanej puli SQL usługi Synapse.
Typy danych
Dedykowana pula usługi Synapse SQL obsługuje najczęściej używane typy danych. Aby uzyskać listę obsługiwanych typów danych, zobacz typy danych w instrukcji CREATE TABLE. W przypadku usługi Synapse SQL Serverless zapoznaj się z artykułem Wykonywanie zapytań o pliki magazynu z bezserwerową pulą SQL w usłudze Azure Synapse Analytics i Jak używać zestawu OPENROWSET przy użyciu bezserwerowej puli SQL w usłudze Azure Synapse Analytics
Minimalizuj długość wiersza
Minimalizacja rozmiaru typów danych skraca długość wiersza, co prowadzi do lepszej wydajności zapytań. Użyj najmniejszego typu danych, który działa dla danych.
- Unikaj definiowania kolumn znaków o dużej długości domyślnej. Jeśli na przykład najdłuższa wartość to 25 znaków, zdefiniuj kolumnę jako VARCHAR(25).
- Unikaj używania NVARCHAR, gdy potrzebujesz tylko VARCHAR.
- Jeśli to możliwe, należy użyć NVARCHAR(4000) lub VARCHAR(8000) zamiast NVARCHAR(MAX) lub VARCHAR(MAX).
- Unikaj używania zmiennoprzecinkowych i dziesiętnych ze skalą 0 (zero). Powinny to być TINYINT, SMALLINT, INT lub BIGINT.
Uwaga
Jeśli do ładowania tabel SQL usługi Synapse używasz tabel zewnętrznych programu PolyBase, zdefiniowana długość wiersza tabeli nie może przekroczyć 1 MB. Jeśli wiersz z danymi o zmiennej długości przekracza 1 MB, można załadować wiersz przy użyciu narzędzia BCP, ale nie z technologią PolyBase.
Identyfikowanie nieobsługiwanych typów danych
W przypadku migrowania bazy danych z innej bazy danych SQL mogą wystąpić typy danych, które nie są obsługiwane w usłudze Synapse SQL. Użyj tego zapytania, aby odnaleźć nieobsługiwane typy danych w istniejącym schemacie 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;
Obejścia nieobsługiwanych typów danych
Na poniższej liście przedstawiono typy danych, których usługa Synapse SQL nie obsługuje i udostępnia alternatywy, których można użyć zamiast nieobsługiwanych typów danych.
Nieobsługiwany typ danych | Rozwiązanie |
---|---|
geometria | varbinary |
geografia | varbinary |
hierarchyid | nvarchar(4000) |
obraz | varbinary |
text | varchar |
ntekst | nvarchar |
sql_variant | Podziel kolumnę na kilka silnie typiowanych kolumn. |
table | Przekonwertuj na tabele tymczasowe lub rozważ przechowywanie danych w magazynie przy użyciu instrukcji CETAS. |
Sygnatury czasowej | Przepracuj kod, aby używać funkcji datetime2 i CURRENT_TIMESTAMP. Tylko stałe są obsługiwane jako wartości domyślne, dlatego current_timestamp nie można zdefiniować jako domyślnego ograniczenia. Jeśli musisz przeprowadzić migrację wartości wersji wiersza z kolumny typizowanej sygnatury czasowej, użyj wartości BINARY(8) lub VARBINARY(8) dla wartości wersji NOT NULL lub NULL wiersza. |
xml | varchar |
typ zdefiniowany przez użytkownika | W miarę możliwości przekonwertuj z powrotem na natywny typ danych. |
wartości domyślne | Wartości domyślne obsługują tylko literały i stałe. |
Powiązana zawartość
Aby uzyskać więcej informacji na temat tworzenia tabel, zobacz omówienie programowania.