Delen via


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.

[ CONSTRAINTconstraint_name ] DEFAULTconstant_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 53en 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 0precisie. 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 , 10of '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 4000en 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 CONTROLde machtigingen , INSERTSELECT, 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:

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. GRANTInstructies , DENYen REVOKE 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 , mycolumn1de 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.

[ CONSTRAINTconstraint_name ] DEFAULTconstant_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 53en 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 0precisie. 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, 0of '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 8000zijn. 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.

Volgende stappen