CREATE TABLE
Van toepassing op:Azure Synapse AnalyticsAnalytics Platform System (PDW)
Hiermee maakt u een nieuwe tabel in Azure Synapse Analytics of Analytics Platform System (PDW).
Zie Tabellen in Azure Synapse Analytics voor meer informatie over tabellen en het gebruik ervan.
Discussies over Azure Synapse Analytics in dit artikel zijn van toepassing op zowel Azure Synapse Analytics als Analytics Platform System (PDW), tenzij anders vermeld.
Notitie
Ga voor SQL Server- en Azure SQL-platforms naar CREATE TABLE en selecteer de gewenste productversie. Ga naar CREATE TABLE (Fabric) voor informatie over Magazijn in Microsoft Fabric.
Notitie
Serverloze SQL-pool in Azure Synapse Analytics ondersteunt alleen externe en tijdelijke tabellen.
Transact-SQL-syntaxisconventies
Syntaxis
-- Create a new table.
CREATE TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
(
{ column_name <data_type> [ <column_options> ] } [ ,...n ]
)
[ WITH ( <table_option> [ ,...n ] ) ]
[;]
<column_options> ::=
[ COLLATE Windows_collation_name ]
[ NULL | NOT NULL ] -- default is NULL
[ IDENTITY [ ( seed, increment ) ]
[ <column_constraint> ]
<column_constraint>::=
{
DEFAULT constant_expression
| PRIMARY KEY NONCLUSTERED NOT ENFORCED -- Applies to Azure Synapse Analytics only
| UNIQUE NOT ENFORCED -- Applies to Azure Synapse Analytics only
}
<table_option> ::=
{
CLUSTERED COLUMNSTORE INDEX -- default for Azure Synapse Analytics
| CLUSTERED COLUMNSTORE INDEX ORDER (column [,...n])
| HEAP --default for Parallel Data Warehouse
| CLUSTERED INDEX ( { index_column_name [ ASC | DESC ] } [ ,...n ] ) -- default is ASC
}
{
DISTRIBUTION = HASH ( distribution_column_name )
| DISTRIBUTION = HASH ( [distribution_column_name [, ...n]] )
| DISTRIBUTION = ROUND_ROBIN -- default for Azure Synapse Analytics
| DISTRIBUTION = REPLICATE -- default for Parallel Data Warehouse
}
| PARTITION ( partition_column_name RANGE [ LEFT | RIGHT ] -- default is LEFT
FOR VALUES ( [ boundary_value [,...n] ] ) )
<data type> ::=
datetimeoffset [ ( n ) ]
| datetime2 [ ( n ) ]
| datetime
| smalldatetime
| date
| time [ ( n ) ]
| float [ ( n ) ]
| real [ ( n ) ]
| decimal [ ( precision [ , scale ] ) ]
| numeric [ ( precision [ , scale ] ) ]
| money
| smallmoney
| bigint
| int
| smallint
| tinyint
| bit
| nvarchar [ ( n | max ) ] -- max applies only to Azure Synapse Analytics
| nchar [ ( n ) ]
| varchar [ ( n | max ) ] -- max applies only to Azure Synapse Analytics
| char [ ( n ) ]
| varbinary [ ( n | max ) ] -- max applies only to Azure Synapse Analytics
| binary [ ( n ) ]
| uniqueidentifier
Argumenten
Database_name
De naam van de database die de nieuwe tabel bevat. De standaardwaarde is de huidige database.
schema_name
Het schema voor de tabel. Het opgeven van een schema is optioneel. Als dit leeg is, wordt het standaardschema gebruikt.
Table_name
De naam van de nieuwe tabel. Als u een lokale tijdelijke tabel wilt maken, laat u de tabelnaam voorafgaan door #
. Zie Tijdelijke tabellen in toegewezen SQL-pool in Azure Synapse Analytics voor uitleg en richtlijnen over tijdelijke tabellen.
column_name
De naam van een tabelkolom.
Kolomopties
COLLATE
Windows_collation_name
Hiermee geeft u de sortering voor de expressie. De sortering moet een van de Windows-sorteringen zijn die worden ondersteund door SQL Server. Zie Naam van Windows-sortering (Transact-SQL)/) voor een lijst met Windows-sorteringen die door SQL Server worden ondersteund.
NULL
| NOT NULL
Hiermee geeft u op of NULL
waarden zijn toegestaan in de kolom. De standaardwaarde is NULL
.
[ CONSTRAINT
constraint_name ] DEFAULT
constant_expression
Hiermee geeft u de standaardkolomwaarde op.
Argument | Uitleg |
---|---|
constraint_name | De optionele naam voor de beperking. De naam van de beperking is uniek binnen de database. De naam kan opnieuw worden gebruikt in andere databases. |
constant_expression | De standaardwaarde voor de kolom. De expressie moet een letterlijke waarde of een constante zijn. Deze constante expressies zijn bijvoorbeeld toegestaan: 'CA' , 4 . Deze constante expressies zijn niet toegestaan: 2+3 , CURRENT_TIMESTAMP . |
Opties voor tabelstructuur
Zie Tabellen indexeren in Azure Synapse Analytics voor hulp bij het kiezen van het type tabel.
CLUSTERED COLUMNSTORE INDEX
Slaat de tabel op als een geclusterde columnstore-index. De geclusterde columnstore-index is van toepassing op alle tabelgegevens. Dit gedrag is de standaardinstelling voor Azure Synapse Analytics.
HEAP
Slaat de tabel op als een heap. Dit gedrag is de standaardinstelling voor Analytics Platform System (PDW).
CLUSTERED INDEX
( index_column_name [ ,... n ] )
Slaat de tabel op als een geclusterde index met een of meer sleutelkolommen. Met dit gedrag worden de gegevens per rij opgeslagen. Gebruik index_column_name om de naam van een of meer sleutelkolommen in de index op te geven. Zie Rijopslagtabellen in de Algemene opmerkingen voor meer informatie.
LOCATION = USER_DB
Deze optie is afgeschaft. Het is syntactisch geaccepteerd, maar niet meer vereist en heeft geen invloed meer op het gedrag.
Opties voor tabeldistributie
Zie Gedistribueerde tabellen ontwerpen met behulp van een toegewezen SQL-pool in Azure Synapse Analytics voor meer informatie over het kiezen van de beste distributiemethode en het gebruik van gedistribueerde tabellen.
Zie Synapse SQL Distribution Advisor (preview) voor aanbevelingen over de beste distributiestrategie die u kunt gebruiken op basis van uw workloads.
DISTRIBUTION = HASH
( distribution_column_name ) Wijst elke rij toe aan één distributie door de waarde te hashen die is opgeslagen in distribution_column_name. Het algoritme is deterministisch, wat betekent dat altijd dezelfde waarde als hash wordt gebruikt voor dezelfde distributie. De distributiekolom moet worden gedefinieerd als NOT NULL, omdat alle rijen met NULL zijn toegewezen aan dezelfde distributie.
DISTRIBUTION = HASH ( [distribution_column_name [, ...n]] )
Hiermee worden de rijen verdeeld op basis van de hashwaarden van maximaal acht kolommen, waardoor de basistabelgegevens gelijkmatiger kunnen worden verdeeld, waardoor de gegevensscheefheid in de loop van de tijd wordt verminderd en de queryprestaties worden verbeterd.
Notitie
- Als u de mcd-functie (Multi-Column Distribution) wilt inschakelen, wijzigt u het compatibiliteitsniveau van de database in 50 met deze opdracht. Zie ALTER DATABASE SCOPED CONFIGURATION (ALTER DATABASE SCOPED CONFIGURATION) voor meer informatie over het instellen van het databasecompatibiliteitsniveau. Bijvoorbeeld:
ALTER DATABASE SCOPED CONFIGURATION SET DW_COMPATIBILITY_LEVEL = 50;
- Als u de mcd-functie (Multi-Column Distribution) wilt uitschakelen, voert u deze opdracht uit om het compatibiliteitsniveau van de database te wijzigen in AUTO. Bijvoorbeeld:
ALTER DATABASE SCOPED CONFIGURATION SET DW_COMPATIBILITY_LEVEL = AUTO;
bestaande MCD-tabellen blijven behouden, maar worden onleesbaar. Query's via MCD-tabellen retourneren deze fout:Related table/view is not readable because it distributes data on multiple columns and multi-column distribution is not supported by this product version or this feature is disabled.
- Als u weer toegang wilt krijgen tot MCD-tabellen, schakelt u de functie opnieuw in.
- Als u gegevens in een MCD-tabel wilt laden, gebruikt u de CTAS-instructie. De gegevensbron moet Synapse SQL-tabellen zijn.
- Het gebruik van SSMS voor het genereren van een script voor het maken van MCD-tabellen wordt momenteel ondersteund buiten SSMS versie 19.
DISTRIBUTION = ROUND_ROBIN
Hiermee worden de rijen gelijkmatig verdeeld over alle distributies op een round robin-manier. Dit gedrag is de standaardinstelling voor Azure Synapse Analytics.
DISTRIBUTION = REPLICATE
Slaat één kopie van de tabel op elk rekenknooppunt op. Voor Azure Synapse Analytics wordt de tabel opgeslagen in een distributiedatabase op elk rekenknooppunt. Voor Analytics Platform System (PDW) wordt de tabel opgeslagen in een SQL Server bestandsgroep die het rekenknooppunt omspant. Dit gedrag is de standaardinstelling voor Analytics Platform System (PDW).
Opties voor tabelpartitie
Zie Partitionering van tabellen in toegewezen SQL-pool voor hulp bij het gebruik van tabelpartities.
PARTITION
( partition_column_nameRANGE
[ LEFT
| RIGHT
] FOR VALUES
( [ boundary_value [,... n] ] ))
Hiermee maakt u een of meer tabelpartities. Deze partities zijn horizontale tabelsegmenten waarmee u bewerkingen kunt toepassen op subsets van rijen, ongeacht of de tabel is opgeslagen als een heap-, geclusterde index of geclusterde columnstore-index. In tegenstelling tot de distributiekolom bepalen tabelpartities niet de distributie waarin elke rij wordt opgeslagen. In plaats daarvan bepalen tabelpartities hoe de rijen worden gegroepeerd en opgeslagen binnen elke distributie.
Argument | Uitleg |
---|---|
partition_column_name | Hiermee geeft u de kolom op die Azure Synapse Analytics gebruikt om de rijen te partitioneren. Deze kolom kan elk gegevenstype zijn. Azure Synapse Analytics sorteert de waarden van de partitiekolom in oplopende volgorde. De volgorde van laag naar hoog gaat van LEFT naar RIGHT in de RANGE specificatie. |
RANGE LEFT |
Hiermee geeft u de grenswaarde op die deel uitmaakt van de partitie aan de linkerkant (lagere waarden). De standaardwaarde is LINKS. |
RANGE RIGHT |
Hiermee geeft u de grenswaarde bij de partitie aan de rechterkant (hogere waarden). |
FOR VALUES ( boundary_value [,... n] ) |
Hiermee geeft u de grenswaarden voor de partitie.
boundary_value is een constante expressie. Het kan niet NULL zijn. Deze moet overeenkomen of impliciet worden omgezet in het gegevenstype van partition_column_name. Deze kan niet worden afgekapt tijdens impliciete conversie, zodat de grootte en schaal van de waarde niet overeenkomen met het gegevenstype van partition_column_name Als u de PARTITION component opgeeft, maar geen grenswaarde opgeeft, maakt Azure Synapse Analytics een gepartitioneerde tabel met één partitie. Indien van toepassing kunt u de tabel op een later tijdstip splitsen in twee partities.Als u één grenswaarde opgeeft, heeft de resulterende tabel twee partities; één voor de waarden lager dan de grenswaarde en één voor de waarden hoger dan de grenswaarde. Als u een partitie naar een niet-gepartitioneerde tabel verplaatst, ontvangt de niet-gepartitioneerde tabel de gegevens, maar bevat deze geen partitiegrenzen in de metagegevens. |
Zie Een gepartitioneerde tabel maken in de sectie Voorbeelden.
Optie geordende geclusterde columnstore-index
Geclusterde columnstore-index (CCI) is de standaardinstelling voor het maken van tabellen in Azure Synapse Analytics. Gegevens in een CCI worden niet gesorteerd voordat ze worden gecomprimeerd in columnstore-segmenten. Bij het maken van een CCI met ORDER worden gegevens gesorteerd voordat ze worden toegevoegd aan indexsegmenten en kunnen de queryprestaties worden verbeterd. Zie Prestaties afstemmen met geordende geclusterde columnstore-index voor meer informatie.
Een geordende CCI kan worden gemaakt voor kolommen van alle gegevenstypen die worden ondersteund in Azure Synapse Analytics, met uitzondering van tekenreekskolommen.
Gebruikers kunnen een query uitvoeren op column_store_order_ordinal kolom in sys.index_columns voor de kolom(en) waarop een tabel is geordend en de volgorde in de volgorde.
Raadpleeg Prestaties afstemmen met geordende geclusterde columnstore-index voor meer informatie.
Gegevenstype
Azure Synapse Analytics ondersteunt de meest gebruikte gegevenstypen. Zie Gegevenstypen voor tabellen in Azure Synapse Analytics voor meer informatie over gegevenstypen en hoe u deze kunt gebruiken.
Notitie
Net als bij SQL Server geldt een limiet van 8060 bytes per rij. Dit kan een blokkeringsprobleem worden voor tabellen met veel kolommen of kolommen met grote gegevenstypen, zoals nvarchar(max)
of varbinary(max)
. Invoegen of updates die de limiet van 8060 bytes schenden, resulteren in foutcodes 511 of 611. Zie Architectuurhandleiding pagina's en gebieden voor meer informatie.
Zie de sectie Impliciete conversies van CAST en CONVERT (Transact-SQL) voor een tabel met gegevenstypeconversies. Zie Datum- en tijdgegevenstypen en -functies (Transact-SQL) voor meer informatie.
De volgende lijst met ondersteunde gegevenstypen bevat hun details en opslagbytes:
datetimeoffset
[ ( n ) ]
De standaardwaarde voor n is 7.
datetime2
[ ( n ) ]
Hetzelfde als datetime
, behalve dat u het aantal fractionele seconden kunt opgeven. De standaardwaarde voor n is 7
.
n waarde | Precisie | Schalen |
---|---|---|
0 |
19 | 0 |
1 |
21 | 1 |
2 |
22 | 2 |
3 |
23 | 3 |
4 |
24 | 4 |
5 |
25 | 5 |
6 |
26 | 6 |
7 |
27 | 7 |
datetime
Slaat de datum en tijd van de dag op met 19 tot 23 tekens volgens de Gregoriaanse kalender. De datum kan het jaar, de maand en de dag bevatten. De tijd bevat uren, minuten, seconden. Als optie kunt u drie cijfers weergeven voor fractionele seconden. De opslaggrootte is 8 bytes.
smalldatetime
Hiermee worden een datum en een tijd opgeslagen. De opslaggrootte is 4 bytes.
date
Slaat een datum op met een maximum van 10 tekens voor jaar, maand en dag volgens de Gregoriaanse kalender. De opslaggrootte is 3 bytes. Datum wordt opgeslagen als een geheel getal.
time
[ ( n ) ]
De standaardwaarde voor n is 7
.
float
[ ( n ) ]
Gegevenstype bij benadering voor gebruik met numerieke gegevens met drijvende komma. Drijvendekommagegevens zijn bij benadering, wat betekent dat niet alle waarden in het gegevenstypebereik exact kunnen worden weergegeven.
n geeft het aantal bits op dat wordt gebruikt om de mantissa van de float
in de wetenschappelijke notatie op te slaan.
n bepaalt de precisie en opslaggrootte. Als n is opgegeven, moet dit een waarde zijn tussen 1
en 53
. De standaardwaarde van n is 53
.
n waarde | Precisie | Opslaggrootte |
---|---|---|
1-24 | 7 cijfers | 4 bytes |
25-53 | 15 cijfers | 8 bytes |
Azure Synapse Analytics behandelt n als een van de twee mogelijke waarden. Als 1
<= n<= 24
, wordt n behandeld als 24
. Als 25
<= n<= 53
, wordt n behandeld als 53
.
Het gegevenstype Azure Synapse Analytics float
voldoet aan de ISO-norm voor alle waarden van n van 1
tot 53
en met . Het synoniem voor dubbele precisie is float(53)
.
real
[ ( n ) ]
De definitie van echt is hetzelfde als float. Het ISO-synoniem voor real
is float(24)
.
decimal
[ ( precisie [ , schaal ] ) ] | numeric
[ ( precisie [ , schaal ] ) ]
Hiermee worden vaste precisie- en schaalnummers opgeslagen.
Precisie
Het maximum aantal decimale cijfers dat kan worden opgeslagen, zowel links als rechts van het decimaalteken. De precisie moet een waarde zijn van 1
tot en met de maximale precisie van 38
. De standaardprecisie is 18
.
scale
Het maximum aantal decimale cijfers dat rechts van de decimale komma kan worden opgeslagen.
Schaal moet een waarde zijn vanaf 0
precisie. U kunt alleen schaal opgeven als precisie is opgegeven. De standaardschaal is 0
en dus 0
<= schaal< = precisie. De maximale opslaggrootten variëren, afhankelijk van de precisie.
Precisie | Opslagbytes |
---|---|
1-9 | 5 |
10-19 | 9 |
20-28 | 13 |
29-38 | 17 |
money
| smallmoney
Gegevenstypen die valutawaarden vertegenwoordigen.
Gegevenstype | Opslagbytes |
---|---|
money |
8 |
smallmoney |
4 |
bigint
| int
| smallint
| tinyint
Gegevenstypen met exacte getallen die gegevens met gehele getallen gebruiken. De opslag wordt weergegeven in de volgende tabel.
Gegevenstype | Opslagbytes |
---|---|
bigint |
8 |
int |
4 |
smallint |
2 |
tinyint |
1 |
bit
Een gegevenstype met een geheel getal dat de waarde , 1
0
of 'NULL' kan aannemen. Azure Synapse Analytics optimaliseert de opslag van bitkolommen. Als een tabel 8 of minder bitkolommen bevat, worden de kolommen opgeslagen als 1 byte. Als er 9-16-bits kolommen zijn, worden de kolommen opgeslagen als 2 bytes, enzovoort.
nvarchar
[ ( n | max
) ] -- max
is alleen van toepassing op Azure Synapse Analytics.
Unicode-tekengegevens met variabele lengte.
n kan een waarde van 1 tot en met 4000 zijn.
max
geeft aan dat de maximale opslaggrootte 2^31-1 bytes (2 GB) is. De opslaggrootte in bytes is twee keer het aantal ingevoerde tekens + 2 bytes. De ingevoerde gegevens mogen nul tekens lang zijn.
nchar
[ ( n ) ]
Unicode-tekengegevens met vaste lengte met een lengte van n tekens.
n moet een waarde zijn van tot 4000
en met 1
. De opslaggrootte is twee keer n bytes.
varchar
[ ( n | max
) ] -- max
is alleen van toepassing op Azure Synapse Analytics.
Variabele lengte, niet-Unicode-tekengegevens met een lengte van n bytes.
n moet een waarde van 1
tot zijn 8000
.
max
geeft aan dat de maximale opslaggrootte 2^31-1 bytes (2 GB) is. De opslaggrootte is de werkelijke lengte van de ingevoerde gegevens + 2 bytes.
char
[ ( n ) ]
Niet-Unicode-tekengegevens met een vaste lengte met een lengte van n bytes.
n moet een waarde van 1
tot zijn 8000
. De opslaggrootte is n bytes. De standaardwaarde voor n is 1
.
varbinary
[ ( n | max
) ] -- max
is alleen van toepassing op Azure Synapse Analytics.
Binaire gegevens met variabele lengte.
n kan een waarde van 1
tot zijn 8000
.
max
geeft aan dat de maximale opslaggrootte 2^31-1 bytes (2 GB) is. De opslaggrootte is de werkelijke lengte van de ingevoerde gegevens + 2 bytes. De standaardwaarde voor n is 7.
binary
[ ( n ) ]
Binaire gegevens met vaste lengte met een lengte van n bytes.
n kan een waarde van 1
tot zijn 8000
. De opslaggrootte is n bytes. De standaardwaarde voor n is 7
.
uniqueidentifier
Is een GUID van 16 bytes.
Machtigingen
Voor het maken van een tabel is een machtiging vereist in de db_ddladmin
vaste databaserol, of:
-
CREATE TABLE
machtiging voor de database -
ALTER SCHEMA
machtiging voor het schema dat de tabel bevat
Voor het maken van een gepartitioneerde tabel is machtiging vereist in de db_ddladmin
vaste databaserol, of
-
ALTER ANY DATASPACE
Toestemming
De aanmelding waarmee een lokale tijdelijke tabel wordt gemaakt, ontvangt CONTROL
de machtigingen , INSERT
SELECT
, en UPDATE
voor de tabel.
Opmerkingen
Zie Azure Synapse Analytics-capaciteitslimieten voor minimum- en maximumlimieten.
Het aantal tabelpartities bepalen
Elke door de gebruiker gedefinieerde tabel is onderverdeeld in meerdere kleinere tabellen die zijn opgeslagen op afzonderlijke locaties, distributies genoemd. Azure Synapse Analytics maakt gebruik van 60 distributies. In Analytics Platform System (PDW) is het aantal distributies afhankelijk van het aantal rekenknooppunten.
Elke distributie bevat alle tabelpartities. Als er bijvoorbeeld 60 distributies en vier tabelpartities plus één lege partitie zijn, zijn er 300 partities (5 x 60 = 300). Als de tabel een geclusterde columnstore-index is, is er één columnstore-index per partitie, wat betekent dat u 300 columnstore-indexen hebt.
U wordt aangeraden minder tabelpartities te gebruiken om ervoor te zorgen dat elke columnstore-index voldoende rijen heeft om te profiteren van de voordelen van columnstore-indexen. Zie Partitionering van tabellen in toegewezen SQL-pool en Indexen op toegewezen SQL-pooltabellen in Azure Synapse Analytics voor meer informatie.
Rowstore-tabel (heap of geclusterde index)
Een rowstore-tabel is een tabel die is opgeslagen in rijvolgorde per rij. Het is een heap of geclusterde index. Azure Synapse Analytics maakt alle rowstore-tabellen met paginacompressie. Dit gedrag kan niet door de gebruiker worden geconfigureerd.
Columnstore-tabel (columnstore-index)
Een columnstore-tabel is een tabel die is opgeslagen in kolomvolgorde per kolom. De columnstore-index is de technologie waarmee gegevens worden beheerd die zijn opgeslagen in een columnstore-tabel. De geclusterde columnstore-index heeft geen invloed op de verdeling van gegevens. In plaats daarvan is dit van invloed op de wijze waarop de gegevens binnen elke distributie worden opgeslagen.
Als u een rowstore-tabel wilt wijzigen in een columnstore-tabel, zet u alle bestaande indexen in de tabel neer en maakt u een geclusterde columnstore-index. Zie CREATE COLUMNSTORE INDEX (Transact-SQL) voor een voorbeeld.
Raadpleeg deze artikelen voor meer informatie:
- Functieoverzicht van columnstore-indexenversie
- Tabellen indexeren in Azure Synapse Analytics
- Gids columnstore-indexen
Beperkingen en beperkingen
- U kunt geen STANDAARDbeperking definiëren voor een distributiekolom.
- Tabelnaam mag niet langer zijn dan 100 tekens.
Partities
De partitiekolom kan geen alleen Unicode-sortering hebben. De volgende instructie mislukt bijvoorbeeld:
CREATE TABLE t1 ( c1 varchar(20) COLLATE Divehi_90_CI_AS_KS_WS) WITH (PARTITION (c1 RANGE FOR VALUES (N'')))
Als boundary_value een letterlijke waarde is die impliciet moet worden geconverteerd naar het gegevenstype in partition_column_name, treedt er een discrepantie op. De letterlijke waarde wordt weergegeven in de systeemweergaven Azure Synapse Analytics, maar de geconverteerde waarde wordt gebruikt voor Transact-SQL-bewerkingen.
Tijdelijke tabellen
Globale tijdelijke tabellen die beginnen met ##
worden niet ondersteund.
Lokale tijdelijke tabellen hebben de volgende beperkingen en beperkingen:
- Ze zijn alleen zichtbaar voor de huidige sessie. Azure Synapse Analytics verwijdert ze automatisch aan het einde van de sessie. Als u ze expliciet wilt verwijderen, gebruikt u de instructie DROP TABLE.
- De naam van deze kan niet worden gewijzigd.
- Ze kunnen geen partities of weergaven hebben.
- Hun machtigingen kunnen niet worden gewijzigd.
GRANT
Instructies ,DENY
enREVOKE
kunnen niet worden gebruikt met lokale tijdelijke tabellen. - Databaseconsoleopdrachten worden geblokkeerd voor tijdelijke tabellen.
- Als er meer dan één lokale tijdelijke tabel in een batch wordt gebruikt, moet elke tabel een unieke naam hebben. Als meerdere sessies dezelfde batch uitvoeren en dezelfde lokale tijdelijke tabel maken, voegt Azure Synapse Analytics intern een numeriek achtervoegsel toe aan de naam van de lokale tijdelijke tabel om een unieke naam te behouden voor elke lokale tijdelijke tabel.
Vergrendelingsgedrag
Neemt een exclusief slot op de tafel. Hiermee wordt een gedeelde vergrendeling uitgevoerd op de objecten DATABASE, SCHEMA en SCHEMARESOLUTION.
Voorbeelden voor kolommen
A. Een kolomsortering opgeven
In het volgende voorbeeld wordt de tabel MyTable
gemaakt met twee verschillende kolomsorteringen. Standaard heeft de kolom , mycolumn1
de standaardsortering Latin1_General_100_CI_AS_KS_WS. De kolom bevat mycolumn2
de sortering Frisian_100_CS_AS.
CREATE TABLE MyTable
(
mycolumnnn1 nvarchar,
mycolumn2 nvarchar COLLATE Frisian_100_CS_AS )
WITH ( CLUSTERED COLUMNSTORE INDEX )
;
B. Een STANDAARDbeperking opgeven voor een kolom
In het volgende voorbeeld ziet u de syntaxis voor het opgeven van een standaardwaarde voor een kolom. De kolom colA heeft een standaardbeperking met de naam constraint_colA en een standaardwaarde van 0.
CREATE TABLE MyTable
(
colA int CONSTRAINT constraint_colA DEFAULT 0,
colB nvarchar COLLATE Frisian_100_CS_AS
)
WITH ( CLUSTERED COLUMNSTORE INDEX )
;
Voorbeelden voor tijdelijke tabellen
C. Een lokale tijdelijke tabel maken
In het volgende voorbeeld wordt een lokale tijdelijke tabel met de naam #myTable gemaakt. De tabel wordt opgegeven met een driedelige naam, die begint met een #.
CREATE TABLE AdventureWorks.dbo.#myTable
(
id int NOT NULL,
lastName varchar(20),
zipCode varchar(6)
)
WITH
(
DISTRIBUTION = HASH (id),
CLUSTERED COLUMNSTORE INDEX
)
;
Voorbeelden voor tabelstructuur
D. Een tabel maken met een geclusterde columnstore-index
In het volgende voorbeeld wordt een gedistribueerde tabel gemaakt met een geclusterde columnstore-index. Elke distributie wordt opgeslagen als een columnstore.
De geclusterde columnstore-index heeft geen invloed op hoe de gegevens worden gedistribueerd; gegevens worden altijd verdeeld per rij. De geclusterde columnstore-index is van invloed op de wijze waarop de gegevens binnen elke distributie worden opgeslagen.
CREATE TABLE MyTable
(
colA int CONSTRAINT constraint_colA DEFAULT 0,
colB nvarchar COLLATE Frisian_100_CS_AS
)
WITH
(
DISTRIBUTION = HASH ( colB ),
CLUSTERED COLUMNSTORE INDEX
)
;
E. Een geordende geclusterde columnstore-index maken
In het volgende voorbeeld ziet u hoe u een geordende geclusterde columnstore-index maakt. De index is geordend op SHIPDATE.
CREATE TABLE Lineitem
WITH (DISTRIBUTION = ROUND_ROBIN, CLUSTERED COLUMNSTORE INDEX ORDER(SHIPDATE))
AS
SELECT * FROM ext_Lineitem
Voorbeelden voor tabeldistributie
F. Een ROUND_ROBIN tabel maken
In het volgende voorbeeld wordt een ROUND_ROBIN tabel gemaakt met drie kolommen en zonder partities. De gegevens worden verspreid over alle distributies. De tabel wordt gemaakt met een GECLUSTERDE COLUMNSTORE-INDEX, wat betere prestaties en gegevenscompressie biedt dan een geclusterde heap- of rowstore-index.
CREATE TABLE myTable
(
id int NOT NULL,
lastName varchar(20),
zipCode varchar(6)
)
WITH ( CLUSTERED COLUMNSTORE INDEX );
G. Een tabel maken die hash-gedistribueerd is over meerdere kolommen (preview)
In het volgende voorbeeld wordt dezelfde tabel gemaakt als in het vorige voorbeeld. Voor deze tabel worden rijen echter verdeeld (op id
en-kolommen zipCode
). De tabel wordt gemaakt met een geclusterde columnstore-index, die betere prestaties en gegevenscompressie biedt dan een geclusterde heap- of rowstore-index.
CREATE TABLE myTable
(
id int NOT NULL,
lastName varchar(20),
zipCode varchar(6)
)
WITH
(
DISTRIBUTION = HASH (id, zipCode),
CLUSTERED COLUMNSTORE INDEX
);
H. Een gerepliceerde tabel maken
In het volgende voorbeeld wordt een gerepliceerde tabel gemaakt die vergelijkbaar is met de vorige voorbeelden. Gerepliceerde tabellen worden volledig naar elk rekenknooppunt gekopieerd. Met deze kopie op elk rekenknooppunt wordt de gegevensverplaatsing voor query's verminderd. Dit voorbeeld is gemaakt met een CLUSTERED INDEX, wat een betere gegevenscompressie biedt dan een heap. Een heap bevat mogelijk niet voldoende rijen om een goede CLUSTERED COLUMNSTORE INDEX-compressie te bereiken.
CREATE TABLE myTable
(
id int NOT NULL,
lastName varchar(20),
zipCode varchar(6)
)
WITH
(
DISTRIBUTION = REPLICATE,
CLUSTERED INDEX (lastName)
);
Voorbeelden voor tabelpartities
I. Een gepartitioneerde tabel maken
In het volgende voorbeeld wordt dezelfde tabel gemaakt als in voorbeeld A, met de toevoeging van RANGE LEFT partitioning in de id
kolom. Hiermee worden vier partitiegrenswaarden opgegeven, wat resulteert in vijf partities.
CREATE TABLE myTable
(
id int NOT NULL,
lastName varchar(20),
zipCode int)
WITH
(
PARTITION ( id RANGE LEFT FOR VALUES (10, 20, 30, 40 )),
CLUSTERED COLUMNSTORE INDEX
);
In dit voorbeeld worden gegevens gesorteerd in de volgende partities:
- Partitie 1: col <= 10
- Partitie 2: 10 < kolom <= 20
- Partitie 3: 20 < kolom <= 30
- Partitie 4: 30 < kolom <= 40
- Partitie 5: 40 < col
Als dezelfde tabel is gepartitioneerd met BEREIK RECHTS in plaats van BEREIK LINKS (standaard), worden de gegevens gesorteerd in de volgende partities:
- Partitie 1: col < 10
- Partitie 2: 10 <= kolom < 20
- Partitie 3: 20 <= kolom < 30
- Partitie 4: 30 <= kolom < 40
- Partitie 5: 40 <= kolom
J. Een gepartitioneerde tabel met één partitie maken
In het volgende voorbeeld wordt een gepartitioneerde tabel met één partitie gemaakt. Er wordt geen grenswaarde opgegeven, wat resulteert in één partitie.
CREATE TABLE myTable (
id int NOT NULL,
lastName varchar(20),
zipCode int)
WITH
(
PARTITION ( id RANGE LEFT FOR VALUES ( )),
CLUSTERED COLUMNSTORE INDEX
)
;
K. Een tabel maken met datumpartitionering
In het volgende voorbeeld wordt een nieuwe tabel gemaakt met de naam myTable
, met partitionering op een date
kolom. Door BEREIK RECHTS en datums voor de grenswaarden te gebruiken, worden er een maand aan gegevens in elke partitie geplaatst.
CREATE TABLE myTable (
l_orderkey bigint,
l_partkey bigint,
l_suppkey bigint,
l_linenumber bigint,
l_quantity decimal(15,2),
l_extendedprice decimal(15,2),
l_discount decimal(15,2),
l_tax decimal(15,2),
l_returnflag char(1),
l_linestatus char(1),
l_shipdate date,
l_commitdate date,
l_receiptdate date,
l_shipinstruct char(25),
l_shipmode char(10),
l_comment varchar(44))
WITH
(
DISTRIBUTION = HASH (l_orderkey),
CLUSTERED COLUMNSTORE INDEX,
PARTITION ( l_shipdate RANGE RIGHT FOR VALUES
(
'1992-01-01','1992-02-01','1992-03-01','1992-04-01','1992-05-01',
'1992-06-01','1992-07-01','1992-08-01','1992-09-01','1992-10-01',
'1992-11-01','1992-12-01','1993-01-01','1993-02-01','1993-03-01',
'1993-04-01','1993-05-01','1993-06-01','1993-07-01','1993-08-01',
'1993-09-01','1993-10-01','1993-11-01','1993-12-01','1994-01-01',
'1994-02-01','1994-03-01','1994-04-01','1994-05-01','1994-06-01',
'1994-07-01','1994-08-01','1994-09-01','1994-10-01','1994-11-01',
'1994-12-01'
))
);
Volgende stappen
Van toepassing op:Magazijn in Microsoft Fabric
Hiermee maakt u een nieuwe tabel in een magazijn in Microsoft Fabric.
Zie Tabellen maken in Magazijn in Microsoft Fabric voor meer informatie.
Notitie
Ga naar CREATE TABLE (Azure Synapse Analytics) voor informatie over Azure Synapse Analytics and Analytics Platform System (PDW). Ga voor SQL Server- en Azure SQL-platformen naar CREATE TABLE en selecteer de gewenste productversie in de vervolgkeuzelijst versie.
Transact-SQL-syntaxisconventies
Syntaxis
-- Create a new table.
CREATE TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
(
{ column_name <data_type> [ <column_options> ] } [ ,...n ]
)
[;]
<column_options> ::=
[ NULL | NOT NULL ] -- default is NULL
[ <column_constraint> ]
<data type> ::=
datetime2 [ ( n ) ]
| date
| time [ ( n ) ]
| float [ ( n ) ]
| real [ ( n ) ]
| decimal [ ( precision [ , scale ] ) ]
| numeric [ ( precision [ , scale ] ) ]
| bigint
| int
| smallint
| bit
| varchar [ ( n ) ]
| char [ ( n ) ]
| varbinary [ ( n ) ]
| binary [ ( n ) ]
| uniqueidentifier
Argumenten
Database_name
De naam van de database die de nieuwe tabel bevat. De standaardwaarde is de huidige database.
schema_name
Het schema voor de tabel. Het opgeven van een schema is optioneel. Als dit leeg is, wordt het standaardschema gebruikt.
Table_name
De naam van de nieuwe tabel. Als u een lokale tijdelijke tabel wilt maken, gaat u voor de tabelnaam #
door .
column_name
De naam van een tabelkolom.
Kolomopties
NULL
| NOT NULL
Hiermee geeft u op of NULL
waarden zijn toegestaan in de kolom. De standaardwaarde is NULL
.
[ CONSTRAINT
constraint_name ] DEFAULT
constant_expression
Hiermee geeft u de standaardkolomwaarde op.
Argument | Uitleg |
---|---|
constraint_name | De optionele naam voor de beperking. De naam van de beperking is uniek binnen de database. De naam kan opnieuw worden gebruikt in andere databases. |
constant_expression | De standaardwaarde voor de kolom. De expressie moet een letterlijke waarde of een constante zijn. Deze constante expressies zijn bijvoorbeeld toegestaan: 'CA' , 4 . Deze constante expressies zijn niet toegestaan: 2+3 , CURRENT_TIMESTAMP . |
Gegevenstype
Microsoft Fabric ondersteunt de meest gebruikte gegevenstypen.
Notitie
Net als bij SQL Server geldt een limiet van 8060 bytes per rij. Dit kan een blokkeringsprobleem worden voor tabellen met veel kolommen of kolommen met grote gegevenstypen, zoals varchar(8000)
of varbinary(8000)
. Invoegingen of updates die de limiet van 8060 bytes schenden, resulteren in foutcodes 511 of 611. Zie Architectuurhandleiding pagina's en gebieden voor meer informatie.
Zie de sectie Impliciete conversies van CAST en CONVERT (Transact-SQL) voor een tabel met gegevenstypeconversies. Zie Datum- en tijdgegevenstypen en -functies (Transact-SQL) voor meer informatie.
De volgende lijst met ondersteunde gegevenstypen bevat hun details en opslagbytes.
datetime2
( n )
Slaat de datum en tijd van de dag op met 19 tot 26 tekens volgens de Gregoriaanse kalender. De datum kan het jaar, de maand en de dag bevatten. De tijd bevat uren, minuten, seconden. Als optie kunt u nul tot zes cijfers opslaan en weergeven voor fractionele seconden op basis van de parameter n . De opslaggrootte is 8 bytes.
n moet een waarde van 0
tot zijn 6
.
Notitie
Er is geen standaardprecisie zoals andere SQL-platforms. U moet de waarde opgeven voor precisie van 0
tot 6
.
n-waarde | Precisie | Schalen |
---|---|---|
0 |
19 | 0 |
1 |
21 | 1 |
2 |
22 | 2 |
3 |
23 | 3 |
4 |
24 | 4 |
5 |
25 | 5 |
6 |
26 | 6 |
date
Slaat een datum op met een maximum van 10 tekens voor jaar, maand en dag volgens de Gregoriaanse kalender. De opslaggrootte is 3 bytes. Datum wordt opgeslagen als een geheel getal.
time
( n )
n moet een waarde van 0
tot zijn 6
.
float
[ ( n ) ]
Gegevenstype getal bij benadering voor gebruik met numerieke gegevens met drijvende komma. Drijvendekommagegevens zijn bij benadering, wat betekent dat niet alle waarden in het gegevenstypebereik exact kunnen worden weergegeven.
n geeft het aantal bits op dat wordt gebruikt om de mantissa van de float
in de wetenschappelijke notatie op te slaan.
n bepaalt de precisie en opslaggrootte. Als n is opgegeven, moet dit een waarde zijn tussen 1
en 53
. De standaardwaarde van n is 53
.
Notitie
Er is geen standaardprecisie zoals andere SQL-platforms. U moet de waarde opgeven voor precisie van 0
tot 6
.
n-waarde | Precisie | Opslaggrootte |
---|---|---|
1-24 | 7 cijfers | 4 bytes |
25-53 | 15 cijfers | 8 bytes |
Azure Synapse Analytics behandelt n als een van de twee mogelijke waarden. Als 1
<= n<= 24
, wordt n behandeld als 24
. Als 25
<= n<= 53
, wordt n behandeld als 53
.
Het gegevenstype Azure Synapse Analytics float
voldoet aan de ISO-norm voor alle waarden van n van 1
tot 53
en met . Het synoniem voor dubbele precisie is float(53)
.
real
[ ( n ) ]
De definitie van echt is hetzelfde als float. Het ISO-synoniem voor real
is float(24)
.
decimal
[ ( precisie [ , schaal ] ) ] | numeric
[ ( precisie [ , schaal ] ) ]
Hiermee worden vaste precisie- en schaalnummers opgeslagen.
Precisie
Het maximale totale aantal decimale cijfers dat kan worden opgeslagen, zowel links als rechts van het decimaalteken. De precisie moet een waarde zijn vanaf 1
de maximale precisie van 38
. De standaardprecisie is 18
.
Schaal
Het maximum aantal decimalen dat rechts van de decimale komma kan worden opgeslagen.
Schaal moet een waarde zijn vanaf 0
precisie. U kunt alleen schaal opgeven als precisie is opgegeven. De standaardschaal is 0
en dus 0
<= schaal< = precisie. De maximale opslaggrootten variëren, afhankelijk van de precisie.
Precisie | Opslagbytes |
---|---|
1-9 | 5 |
10-19 | 9 |
20-28 | 13 |
29-38 | 17 |
bigint
| int
| smallint
Gegevenstypen met exacte getallen die gegevens met gehele getallen gebruiken. De opslag wordt weergegeven in de volgende tabel.
Gegevenstype | Opslagbytes |
---|---|
bigint |
8 |
int |
4 |
smallint |
2 |
bit
Een gegevenstype met een geheel getal dat de waarde van 1
, 0
of 'NULL' kan aannemen. Azure Synapse Analytics optimaliseert de opslag van bitkolommen. Als een tabel 8 of minder bitkolommen bevat, worden de kolommen opgeslagen als 1 byte. Als er 9-16-bits kolommen zijn, worden de kolommen opgeslagen als 2 bytes, enzovoort.
varchar
[ ( n ) ] Gegevens met variabele lengte, Unicode-tekens met een lengte van n bytes.
n moet een waarde van 1
tot zijn 8000
. De opslaggrootte is de werkelijke lengte van de ingevoerde gegevens + 2 bytes. De standaardwaarde voor n is 1
.
char
[ ( n ) ]
Unicode-tekengegevens met vaste lengte met een lengte van n bytes.
n moet een waarde van 1
tot zijn 8000
. De opslaggrootte is n bytes. De standaardwaarde voor n is 1
.
varbinary
[ ( n ) ] Binaire gegevens met variabele lengte.
n kan een waarde van 1
tot 8000
zijn. De opslaggrootte is de werkelijke lengte van de ingevoerde gegevens + 2 bytes. De standaardwaarde voor n is 7.
uniqueidentifier
Is een GUID van 16 bytes.
Machtigingen
Machtigingen in Microsoft Fabric verschillen van machtigingen Azure Synapse Analytics.
Beperkingen en limieten
- Tabelnaam mag niet langer zijn dan 100 tekens.
- Tabelnamen in Warehouse in Microsoft Fabric mogen de tekens
/
of\
niet bevatten. - De standaard- en alleen ondersteunde sortering in Warehouse is Latin1_General_100_BIN2_UTF8.
Opmerkingen
Er is beperkte TSQL-functionaliteit in Warehouse. Zie TSQL Surface Area in Microsoft Fabric voor meer informatie.
Vergrendelingsgedrag
Hiermee wordt een Schema-Modification vergrendeling van de tabel, een gedeelde vergrendeling voor de DATABASE en een Schema-Stability vergrendeling voor het SCHEMA.