CREATE TABLE
van toepassing op:Azure Synapse Analytics
Analytics Platform System (PDW)
CREATE TABLE (Azure Synapse Analytics)
Hiermee maakt u een nieuwe tabel in Azure Synapse Analytics of Analytics Platform System (PDW).
Zie Tabellen in Azure Synapse Analyticsvoor meer informatie over tabellen en hoe u deze kunt gebruiken.
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
Voor SQL Server- en Azure SQL-platforms gaat u naar CREATE TABLE en selecteert u de gewenste productversie. Zie CREATE TABLE-voor SQL-database in Microsoft Fabric. Ga naar CREATE TABLE (Fabric)voor naslaginformatie over Warehouse 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 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 vooraf aan de tabelnaam met #
. Zie Tijdelijke tabellen in een toegewezen SQL-pool in Azure Synapse Analyticsvoor 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 Windows-sorteringsnaam (Transact-SQL)) voor een lijst met Windows-sorteringen die worden ondersteund door SQL Server.
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 in 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 Indexeringstabellen in Azure Synapse Analyticsvoor 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 op rij opgeslagen. Gebruik index_column_name om de naam van een of meer sleutelkolommen in de index op te geven. Zie Rowstore Tablesvoor meer informatie.
LOCATION = USER_DB
Deze optie is afgeschaft. Het is een geldige syntaxis, maar is niet meer vereist en heeft geen invloed meer op gedrag.
Opties voor tabeldistributie
Zie gedistribueerde tabellen ontwerpen met behulp van een toegewezen SQL-pool in Azure Synapse Analyticsvoor meer informatie over het kiezen van de beste distributiemethode en het gebruik van gedistribueerde tabellen.
Zie de 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 het altijd dezelfde waarde aan dezelfde verdeling heeft. De distributiekolom moet worden gedefinieerd als NOT NULL, omdat alle rijen met NULL zijn toegewezen aan dezelfde distributie.
DISTRIBUTION = HASH ( [distribution_column_name [, ...n]] )
Distribueert de rijen op basis van de hashwaarden van maximaal acht kolommen, waardoor de gegevens gelijkmatiger kunnen worden verdeeld, waardoor de gegevens scheeftrekken na verloop van tijd worden verminderd en de queryprestaties worden verbeterd.
Notitie
- Als u de functie voor distributie met meerdere kolommen (MCD) wilt inschakelen, wijzigt u het compatibiliteitsniveau van de database in 50 met deze opdracht. Zie ALTER DATABASE SCOPED CONFIGURATIONvoor meer informatie over het instellen van het databasecompatibiliteitsniveau. Bijvoorbeeld:
ALTER DATABASE SCOPED CONFIGURATION SET DW_COMPATIBILITY_LEVEL = 50;
- Als u de functie voor distributie met meerdere kolommen (MCD) 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 wilt laden in een MCD-tabel, gebruikt u de instructie
CREATE TABLE AS SELECT
(CTAS) en moet de gegevensbron Synapse SQL-tabellen zijn.
- Scripts genereren om MCD-tabellen te maken, wordt momenteel SSMS-versie 19 en latere versies (SQL Server Management Studio) ondersteund.
DISTRIBUTION = ROUND_ROBIN
distribueert de rijen gelijkmatig 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 omvat. Dit gedrag is de standaardinstelling voor Analytics Platform System (PDW).
Opties voor tabelpartitie
Zie Partitioneringstabellen in toegewezen SQL-poolvoor 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 wordt opgeslagen als een heap-, geclusterde index of geclusterde columnstore-index. In tegenstelling tot de distributiekolom bepalen tabelpartities niet de distributie waar 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 lage tot hoge volgorde gaat van LEFT naar RIGHT in de specificatie van de RANGE . |
RANGE LEFT |
Hiermee geeft u de grenswaarde behoort tot de partitie aan de linkerkant (lagere waarden). De standaardwaarde is LEFT. |
RANGE RIGHT |
Hiermee geeft u de grenswaarde behoort tot 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. Het moet overeenkomen of impliciet worden omgezet in het gegevenstype van partition_column_name. Het 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 één grenswaarde opgeeft, heeft de resulterende tabel twee partities; één voor de waarden lager dan de grenswaarde en één voor de waarden die hoger zijn dan de grenswaarde. Als u een partitie naar een niet-gepartitioneerde tabel verplaatst, ontvangt de niet-gepartitioneerde tabel de gegevens, maar heeft de partitiegrenzen niet in de metagegevens. |
Zie bijvoorbeeld Een gepartitioneerde tabel maken.
Geordende columnstore-indexoptie geclusterd
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 queryprestaties kunnen worden verbeterd. Zie Performance Tuning with Ordered Clustered Columnstore Indexvoor meer informatie over geordende geclusterde columnstore-indexen in Azure Synapse Analytics.
Een geordende CCI kan worden gemaakt op 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 of kolommen waarop een tabel is gerangschikt en de volgorde in de volgorde.
Controleer 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 Analyticsvoor meer informatie over gegevenstypen en hoe u deze kunt gebruiken.
Notitie
Net als bij SQL Server is er een limiet van 8.060 byte 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 8.060 byte schenden, resulteren in foutcodes 511 of 611. Zie Pagina's en gebieden architectuurhandleidingvoor 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 de 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 | Schub |
---|---|---|
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 jaar, maand en dag bevatten. De tijd bevat uur, minuten, seconden. Als optie kunt u drie cijfers weergeven voor fractionele seconden. De opslaggrootte is 8 bytes.
smalldatetime
Slaat een datum en een tijd op. 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. De datum wordt opgeslagen als een geheel getal.
time
[ ( n ) ]
De standaardwaarde voor n is 7
.
float
[ ( n ) ]
Gegevenstype voor getal bij benadering voor gebruik met numerieke drijvende-kommagegevens. 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 voor het opslaan van de mantissa van de float
in wetenschappelijke notatie.
n bepaalt de precisie en de opslaggrootte. Als n is opgegeven, moet deze 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
.
De Azure Synapse Analytics-float gegevenstype voldoet aan de ISO-norm voor alle waarden van n van 1
tot en met 53
. Het synoniem voor dubbele precisie is float(53).
real
[ ( n ) ]
De definitie van echt is hetzelfde als float. Het ISO-synoniem voor echte is float(24).
decimal
[ ( precisie [ , schaal ] ) ] | numeric
[ ( precisie [ , schaal ] ) ]
Hiermee worden vaste precisie- en schaalnummers opgeslagen.
precisie
Het maximumaantal decimale cijfers dat aan beide zijden van het decimaalteken kan worden opgeslagen. De precisie moet een waarde zijn van 1
door de maximale precisie van 38
. De standaardprecisie is 18
.
schalen
Het maximum aantal decimalen dat rechts van het decimaalteken kan worden opgeslagen.
moet een waarde van 0
tot precisiezijn. U kunt alleen 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 gebruikmaken van gehele getallen. De opslag wordt weergegeven in de volgende tabel.
Gegevenstype | Opslagbytes |
---|---|
bigint |
8 |
int |
4 |
smallint |
2 |
tinyint |
1 |
bit
Een gegevenstype geheel getal dat de waarde van 1
, 0
of NULL kan aannemen. Azure Synapse Analytics optimaliseert de opslag van bitkolommen. Als er 8 of minder bitskolommen in een tabel staan, 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
) ] Unicode-tekengegevens met variabele lengte.
n kan een waarde zijn tussen 1 en 4000.
max
geeft aan dat de maximale opslagruimte 2^31-1 bytes (2 GB) is. De opslaggrootte in bytes is twee keer het aantal tekens dat is ingevoerd + 2 bytes. De ingevoerde gegevens kunnen nul tekens lang zijn. De max
lengte is alleen van toepassing op Azure Synapse Analytics.
nchar
[ ( n ) ]
Unicode-tekengegevens met een vaste lengte met een lengte van n tekens.
n moet een waarde van 1
tot 4000
zijn. De opslaggrootte is twee keer n bytes.
varchar
[ ( n | max
) ] Variabele lengte, niet-Unicode-tekengegevens met een lengte van n bytes.
n moet een waarde van 1
tot 8000
zijn.
max
geeft aan dat de maximale opslagruimte 2^31-1 bytes (2 GB) is. De opslaggrootte is de werkelijke lengte van de ingevoerde gegevens + 2 bytes. De max
lengte is alleen van toepassing op Azure Synapse Analytics.
char
[ ( n ) ]
Vaste lengte, niet-Unicode-tekengegevens met een lengte van n bytes.
n moet een waarde van 1
tot 8000
zijn. De opslaggrootte is n bytes. De standaardwaarde voor n is 1
.
varbinary
[ ( n | max
) ] Binaire gegevens met variabele lengte.
n kan een waarde zijn van 1
tot 8000
.
max
geeft aan dat de maximale opslagruimte 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. De max
lengte is alleen van toepassing op Azure Synapse Analytics.
binary
[ ( n ) ]
Binaire gegevens met een vaste lengte met een lengte van n bytes.
n kan een waarde zijn van 1
tot 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 van de tabel
Voor het maken van een gepartitioneerde tabel is een machtiging vereist in de db_ddladmin
vaste databaserol, of
-
ALTER ANY DATASPACE
machtiging
De aanmelding waarmee een lokale tijdelijke tabel wordt gemaakt, ontvangt CONTROL
, INSERT
, SELECT
en UPDATE
machtigingen voor de tabel.
Opmerkingen
Zie Azure Synapse Analytics-capaciteitslimietenvoor minimale en maximale limieten in Azure Synapse Analytics.
Het aantal tabelpartities bepalen
Elke door de gebruiker gedefinieerde tabel is onderverdeeld in meerdere kleinere tabellen die worden 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.
We raden u aan 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 Partitioning tables in dedicated SQL pool and Indexes on dedicated SQL pool tables in Azure Synapse Analyticsvoor meer informatie in Azure Synapse Analytics.
Rowstore-tabel (heap of geclusterde index)
Een rowstore-tabel is een tabel die is opgeslagen in rij-op-rijvolgorde. Het is een heap- of geclusterde index. Azure Synapse Analytics maakt alle rijopslagtabellen 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 kolom-per-kolomvolgorde. 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 hoe gegevens worden gedistribueerd. 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 voor een voorbeeld CREATE COLUMNSTORE INDEX (Transact-SQL).
Zie de volgende artikelen voor meer informatie:
- Wat is er nieuw in columnstore-indexen
- tabellen indexeren in Azure Synapse Analytics-
- Columnstore-indexen: Overzicht
Beperkingen
- U kunt geen
DEFAULT
beperking definiëren voor een distributiekolom. - Tabelnaam mag niet langer zijn dan 128 tekens.
- Kolomnaam mag niet langer zijn dan 128 tekens.
Partities
De partitiekolom kan geen 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 via de systeemweergaven van 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
. - Ze kunnen niet worden gewijzigd.
- Ze kunnen geen partities of weergaven hebben.
- Hun machtigingen kunnen niet worden gewijzigd.
GRANT
,DENY
enREVOKE
instructies 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 elk 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 lokale tijdelijke tabelnaam om een unieke naam te behouden voor elke lokale tijdelijke tabel.
Vergrendelingsgedrag
Neemt een exclusieve vergrendeling op de tafel. Neemt een gedeelde vergrendeling op de objecten DATABASE, SCHEMA en SCHEMARESOLUTION.
Voorbeelden voor kolommen
Een. 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 mycolumn2
heeft 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 voor een kolom opgeven
In het volgende voorbeeld ziet u de syntaxis om een standaardwaarde voor een kolom op te geven. 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 gedistribueerd 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 wordt gerangschikt 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, die betere prestaties en gegevenscompressie biedt dan een geclusterde heap- of rijopslagindex.
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 op meerdere kolommen (preview)
In het volgende voorbeeld wordt dezelfde tabel gemaakt als in het vorige voorbeeld. Voor deze tabel worden rijen echter gedistribueerd (op id
en zipCode
kolommen). De tabel wordt gemaakt met een geclusterde columnstore-index, die betere prestaties en gegevenscompressie biedt dan een heap- of rowstore-geclusterde 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 gekopieerd naar elk rekenknooppunt. Met deze kopie op elk rekenknooppunt wordt de gegevensverplaatsing voor query's verminderd. Dit voorbeeld wordt gemaakt met een GECLUSTERDE INDEX, wat betere gegevenscompressie biedt dan een heap. Een heap bevat mogelijk niet voldoende rijen om 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
Ik. Een gepartitioneerde tabel maken
In het volgende voorbeeld wordt dezelfde tabel gemaakt als in voorbeeld A, met toevoeging van RANGE LEFT
partitionering in de kolom id
. 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: kolom <= 10
- Partitie 2: 10 < kolom <= 20
- Partitie 3: 20 < kolom <= 30
- Partitie 4: 30 < kolom <= 40
- Partitie 5: 40 < kolom
Als dezelfde tabel is gepartitioneerd in plaats van BEREIK LINKS (standaard), worden de gegevens gesorteerd in de volgende partities:
- Partitie 1: kolom < 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 met de naam myTable
gemaakt, met partitionering op een date
kolom. Door gebruik te maken van RANGE RIGHT
en datums voor de grenswaarden, wordt 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'
))
);
Verwante inhoud
van toepassing op:Warehouse in Microsoft Fabric
CREATE TABLE (Fabric Data Warehouse)
Hiermee maakt u een nieuwe tabel in een magazijn in Microsoft Fabric.
Zie Tabellen maken in Warehouse in Microsoft Fabricvoor meer informatie.
Notitie
Zie CREATE TABLE-voor SQL-database in Microsoft Fabric. Voor SQL Server- en Azure SQL-platformen gaat u naar CREATE TABLE en selecteert u de gewenste productversie in de vervolgkeuzelijst versie. Als u wilt verwijzen naar Azure Synapse Analytics and Analytics Platform System (PDW), gaat u naar CREATE TABLE (Azure Synapse Analytics).
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
[ COLLATE Windows_collation_name ]
<data type> ::=
datetime2 ( n )
| date
| time ( n )
| float [ ( n ) ]
| real [ ( n ) ]
| decimal [ ( precision [ , scale ] ) ]
| numeric [ ( precision [ , scale ] ) ]
| bigint
| int
| smallint
| bit
| varchar [ ( n | MAX ) ]
| char [ ( n ) ]
| varbinary [ ( n | MAX ) ]
| 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 schema is optioneel. Als dit leeg is, wordt het standaardschema gebruikt.
table_name
De naam van de nieuwe tabel.
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
.
COLLATE
Windows_collation_name
Hiermee geeft u de sortering voor de expressie.
Zie COLLATEvoor meer informatie over ondersteunde sorteringen.
Gegevenstype
Microsoft Fabric ondersteunt de meest gebruikte gegevenstypen. Zie Gegevenstypen in Microsoft Fabricvoor meer informatie.
Notitie
Net als bij SQL Server is er een limiet van 8.060 byte per rij. Dit kan een blokkeringsprobleem worden voor tabellen met veel kolommen of kolommen met grote gegevenstypen, zoals varchar(8000)
of varbinary(8000)
. Invoegen of updates die de limiet van 8.060 byte schenden, resulteren in foutcodes 511 of 611. Zie Pagina's en gebieden architectuurhandleidingvoor 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 de 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 jaar, maand en dag bevatten. De tijd bevat uur, 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 6
zijn.
Notitie
Er is geen standaardprecisie zoals andere SQL-platforms. U moet de waarde voor precisie opgeven van 0
tot 6
.
n waarde | Precisie | Schub |
---|---|---|
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. De datum wordt opgeslagen als een geheel getal.
time
( n )
n moet een waarde van 0
tot 6
zijn.
float
[ ( n ) ]
Gegevenstype voor getal bij benadering voor gebruik met numerieke drijvende-kommagegevens. 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 voor het opslaan van de mantissa van de float in wetenschappelijke notatie.
n bepaalt de precisie en de opslaggrootte. Als n is opgegeven, moet deze 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 voor precisie opgeven 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
.
De Azure Synapse Analytics-float gegevenstype voldoet aan de ISO-norm voor alle waarden van n van 1
tot en met 53
. Het synoniem voor dubbele precisie is float(53).
real
[ ( n ) ]
De definitie van echt is hetzelfde als float. Het ISO-synoniem voor echte is float(24).
decimal
[ ( precisie [ , schaal ] ) ] | numeric
[ ( precisie [ , schaal ] ) ]
Hiermee worden vaste precisie- en schaalnummers opgeslagen.
precisie
Het maximumaantal decimale cijfers dat aan beide zijden van het decimaalteken kan worden opgeslagen. De precisie moet een waarde zijn van 1
door de maximale precisie van 38
. De standaardprecisie is 18
.
schalen
Het maximum aantal decimalen dat rechts van het decimaalteken kan worden opgeslagen.
moet een waarde van 0
tot precisiezijn. U kunt alleen 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 gebruikmaken van gehele getallen. De opslag wordt weergegeven in de volgende tabel.
Gegevenstype | Opslagbytes |
---|---|
bigint |
8 |
int |
4 |
smallint |
2 |
bit
Een gegevenstype geheel getal dat de waarde van 1
, 0
of NULL kan aannemen. Azure Synapse Analytics optimaliseert de opslag van bitkolommen. Als er 8 of minder bitskolommen in een tabel staan, worden de kolommen opgeslagen als 1 byte. Als er 9-16-bits kolommen zijn, worden de kolommen opgeslagen als 2 bytes, enzovoort.
varchar
[ ( n | MAX
) ] Variabele lengte, Unicode-tekengegevens met een lengte van n bytes.
n moet een waarde van 1
tot 8000
zijn. De opslaggrootte is de werkelijke lengte van de ingevoerde gegevens + 2 bytes. De standaardwaarde voor n is 1
. De kolom varchar(MAX)
kan maximaal 1 MB tekst opslaan in Warehouse.
Notitie
varchar(MAX)
is in preview in Warehouse. Zie Gegevenstypen in Microsoft Fabricvoor meer informatie.
char
[ ( n ) ]
Vaste lengte, Unicode-tekengegevens met een lengte van n bytes.
n moet een waarde van 1
tot 8000
zijn. De opslaggrootte is n bytes. De standaardwaarde voor n is 1
.
varbinary
[ ( n | MAX
) ] Binaire gegevens met variabele lengte.
n kan een waarde zijn van 1
tot 8000
. De opslaggrootte is de werkelijke lengte van de ingevoerde gegevens + 2 bytes. De standaardwaarde voor n is 7.
De kolom varbinary(MAX)
kan maximaal 1 MB aan gegevens opslaan in Warehouse.
Notitie
varbinary(MAX)
is in preview in Warehouse. Zie Gegevenstypen in Microsoft Fabricvoor meer informatie.
uniqueidentifier
Is een GUID van 16 bytes.
Machtigingen
Machtigingen in Microsoft Fabric verschillen van machtigingen in Azure Synapse Analytics.
De gebruiker moet lid zijn van de rollen Beheerder, Lid of Inzender in de werkruimte Fabric.
Beperkingen
- Tabelnamen mogen niet langer zijn dan 128 tekens.
- Tabelnamen in Warehouse in Microsoft Fabric mogen de tekens
/
of\
of eindigen met een.
niet bevatten. - Kolomnamen mogen niet langer zijn dan 128 tekens.
- Tabellen hebben maximaal 1024 kolommen per tabel.
- De standaardsortering die wordt ondersteund in Warehouse, is
Latin1_General_100_BIN2_UTF8
. U kunt ook magazijnen maken met hoofdlettergevoelige (CI)-sortering - Latin1_General_100_CI_AS_KS_WS_SC_UTF8.
Opmerkingen
Er is beperkte Transact-SQL functionaliteit in Warehouse. Zie T-SQL Surface Area in Microsoft Fabricvoor meer informatie.
Vergrendelingsgedrag
Neemt een Schema-Modification vergrendeling op de tabel, een gedeelde vergrendeling op de DATABASE en een Schema-Stability vergrendeling op het SCHEMA.