Partilhar via


CREATE TABLE

Aplica-se a: do Azure Synapse AnalyticsAnalytics Platform System (PDW)

CREATE TABLE (Azure Synapse Analytics)

Cria uma nova tabela no Azure Synapse Analytics ou no Analytics Platform System (PDW).

Para entender as tabelas e como usá-las, consulte Tabelas no Azure Synapse Analytics.

As discussões sobre o Azure Synapse Analytics neste artigo aplicam-se ao Azure Synapse Analytics e ao Analytics Platform System (PDW), salvo indicação em contrário.

Note

Para as plataformas SQL Server e Azure SQL, visite CREATE TABLE e selecione a versão do produto desejada. Para base de dados SQL no Microsoft Fabric, veja CRIAR TABELA. Para fazer referência ao Warehouse no Microsoft Fabric, visite CREATE TABLE (Fabric).

Note

O pool SQL sem servidor no Azure Synapse Analytics dá suporte apenas a externos e tabelas de temporárias.

Transact-SQL convenções de sintaxe

Syntax

-- 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  

Arguments

database_name

O nome do banco de dados que conterá a nova tabela. O padrão é o banco de dados atual.

schema_name

O esquema para a tabela. A especificação do esquema é opcional. Se estiver em branco, o esquema padrão será usado.

table_name

O nome da nova tabela. Para criar uma tabela temporária local, preceda o nome da tabela com #. Para obter explicações e orientações sobre tabelas temporárias, consulte Tabelas temporárias no pool SQL dedicado no Azure Synapse Analytics.

column_name

O nome de uma coluna de tabela.

Opções da coluna

COLLATE Windows_collation_name

Especifica o agrupamento para a expressão. O agrupamento deve ser um dos agrupamentos do Windows suportados pelo SQL Server. Para obter uma lista de agrupamentos do Windows com suporte no SQL Server, consulte Nome de agrupamento do Windows (Transact-SQL)).

NULL | NOT NULL

Especifica se NULL os valores são permitidos na coluna. A predefinição é NULL.

CONSTRAINT[ constraint_name ] DEFAULTconstant_expression

Especifica o valor da coluna padrão.

Argument Explanation
constraint_name O nome opcional para a restrição. O nome da restrição é exclusivo dentro do banco de dados. O nome pode ser reutilizado em outros bancos de dados.
constant_expression O valor padrão para a coluna. A expressão deve ser um valor literal ou uma constante. Por exemplo, estas expressões constantes são permitidas: 'CA', 4. Estas expressões constantes não são permitidas: 2+3, CURRENT_TIMESTAMP.

Opções de estrutura da tabela

Para obter orientação sobre como escolher o tipo de tabela, consulte Indexação de tabelas no Azure Synapse Analytics.

CLUSTERED COLUMNSTORE INDEX

Armazena a tabela como um índice columnstore clusterizado. O índice columnstore clusterizado aplica-se a todos os dados da tabela. Esse comportamento é o padrão para o Azure Synapse Analytics.

HEAP Armazena a tabela como uma pilha. Esse comportamento é o padrão para o Analytics Platform System (PDW).

CLUSTERED INDEX ( index_column_name [ ,... n ] )
Armazena a tabela como um índice clusterizado com uma ou mais colunas de chave. Esse comportamento armazena os dados por linha. Use index_column_name para especificar o nome de uma ou mais colunas de chave no índice. Para obter mais informações, consulte Tabelas de armazenamento de linha.

LOCATION = USER_DB Esta opção foi preterida. É sintaxe válida, mas não é mais necessária e não afeta mais o comportamento.

Opções de distribuição de tabela

Para entender como escolher o melhor método de distribuição e usar tabelas distribuídas, consulte Projetando tabelas distribuídas usando pool SQL dedicado no Azure Synapse Analytics.

Para obter recomendações sobre a melhor estratégia de distribuição a ser usada com base em suas cargas de trabalho, consulte o Synapse SQL Distribution Advisor (Preview).

DISTRIBUTION = HASH ( distribution_column_name ) Atribui cada linha a uma distribuição por hash do valor armazenado em distribution_column_name. O algoritmo é determinístico, o que significa que ele sempre hashes o mesmo valor para a mesma distribuição. A coluna de distribuição deve ser definida como NOT NULL porque todas as linhas que têm NULL são atribuídas à mesma distribuição.

DISTRIBUTION = HASH ( [distribution_column_name [, ...n]] ) Distribui as linhas com base nos valores de hash de até oito colunas, permitindo uma distribuição mais uniforme dos dados da tabela base, reduzindo a distorção dos dados ao longo do tempo e melhorando o desempenho da consulta.

Note

  • Para habilitar o recurso de distribuição de várias colunas (MCD), altere o nível de compatibilidade do banco de dados para 50 com este comando. Para obter mais informações sobre como definir o nível de compatibilidade do banco de dados, consulte ALTER DATABASE SCOPED CONFIGURATION. Por exemplo: ALTER DATABASE SCOPED CONFIGURATION SET DW_COMPATIBILITY_LEVEL = 50;
  • Para desativar o recurso de distribuição de várias colunas (MCD), execute este comando para alterar o nível de compatibilidade do banco de dados para AUTO. Por exemplo: As tabelas MCD existentes permanecerão, ALTER DATABASE SCOPED CONFIGURATION SET DW_COMPATIBILITY_LEVEL = AUTO; mas ficarão ilegíveis. As consultas sobre tabelas MCD retornarão este erro: 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.
    • Para recuperar o acesso às tabelas MCD, habilite o recurso novamente.
    • Para carregar dados em uma tabela MCD, use CREATE TABLE AS SELECT a instrução (CTAS) e a fonte de dados precisa ser tabelas Synapse SQL.
  • Atualmente, há suporte para gerar scripts para criar tabelas MCD SQL Server Management Studio (SSMS) versão 19 e versões posteriores.

DISTRIBUTION = ROUND_ROBIN Distribui as linhas uniformemente em todas as distribuições de forma round-robin. Esse comportamento é o padrão para o Azure Synapse Analytics.

DISTRIBUTION = REPLICATE Armazena uma cópia da tabela em cada nó de computação. Para o Azure Synapse Analytics, a tabela é armazenada em um banco de dados de distribuição em cada nó de computação. Para o Analytics Platform System (PDW), a tabela é armazenada em um grupo de arquivos do SQL Server que abrange o nó Computação. Esse comportamento é o padrão para o Analytics Platform System (PDW).

Opções de partição de tabela

Para obter orientação sobre como usar partições de tabela, consulte Particionando tabelas no pool SQL dedicado.

PARTITION ( partition_column_nameRANGELEFT | RIGHT [ ] FOR VALUES ( [ boundary_value [,... n] ] ))
Cria uma ou mais partições de tabela. Essas partições são fatias de tabela horizontais que permitem aplicar operações a subconjuntos de linhas, independentemente de a tabela ser armazenada como um heap, índice clusterizado ou índice columnstore clusterizado. Ao contrário da coluna de distribuição, as partições de tabela não determinam a distribuição onde cada linha está armazenada. Em vez disso, as partições de tabela determinam como as linhas são agrupadas e armazenadas em cada distribuição.

Argument Explanation
partition_column_name Especifica a coluna que o Azure Synapse Analytics usa para particionar as linhas. Esta coluna pode ser qualquer tipo de dados. O Azure Synapse Analytics classifica os valores da coluna de partição em ordem crescente. A ordem de baixo para alto vai de LEFT para na RIGHTRANGE especificação.
RANGE LEFT Especifica que o valor do limite pertence à partição à esquerda (valores mais baixos). O padrão é LEFT.
RANGE RIGHT Especifica que o valor do limite pertence à partição à direita (valores mais altos).
FOR VALUES ( boundary_value [,... n] ) Especifica os valores de limite para a partição. boundary_value é uma expressão constante. Não pode ser NULL. Ele deve corresponder ou ser implicitamente conversível para o tipo de dados de partition_column_name. Ele não pode ser truncado durante a conversão implícita para que o tamanho e a escala do valor não correspondam ao tipo de dados de partition_column_name



Se você especificar um valor de limite, a tabela resultante terá duas partições; um para os valores inferiores ao valor limite e um para os valores superiores ao valor limite. Se você mover uma partição para uma tabela não particionada, a tabela não particionada receberá os dados, mas não terá os limites da partição em seus metadados.

Para obter um exemplo, consulte Criar uma tabela particionada.

Opção de índice columnstore clusterizado ordenado

O índice columnstore clusterizado (CCI) é o padrão para criar tabelas no Azure Synapse Analytics. Os dados em uma CCI não são classificados antes de serem compactados em segmentos columnstore. Ao criar uma CCI com ORDER, os dados são classificados antes de serem adicionados aos segmentos de índice e o desempenho da consulta pode ser melhorado. Para obter mais informações sobre índices columnstore clusterizados ordenados no Azure Synapse Analytics, consulte Ajuste de desempenho com índice de columnstore clusterizado ordenado.

Uma CCI ordenada pode ser criada em colunas de quaisquer tipos de dados suportados no Azure Synapse Analytics, exceto para colunas de cadeia de caracteres.

Os usuários podem consultar column_store_order_ordinal a coluna ou sys.index_columns colunas em que uma tabela está ordenada e a sequência na ordenação.

Verifique o ajuste de desempenho com o índice columnstore clusterizado ordenado para obter detalhes.

Tipo de dados

O Azure Synapse Analytics dá suporte aos tipos de dados mais usados. Para entender melhor os tipos de dados e como usá-los, consulte Tipos de dados para tabelas no Azure Synapse Analytics.

Note

Semelhante ao SQL Server, há um limite de 8.060 bytes por linha. Isso pode se tornar um problema de bloqueio para tabelas que têm muitas colunas ou colunas com tipos de dados grandes, como nvarchar(max) ou varbinary(max). Inserções ou atualizações que violam o limite de 8.060 bytes resultarão em códigos de erro 511 ou 611. Para obter mais informações, consulte Guia de arquitetura de páginas e extensões.

Para obter uma tabela de conversões de tipo de dados, consulte a seção Conversões implícitas de CAST e CONVERT (Transact-SQL). Para obter mais informações, consulte Tipos de dados de data e hora e funções (Transact-SQL).

A seguinte lista de tipos de dados suportados inclui seus detalhes e bytes de armazenamento:

datetimeoffset [ ( n ) ]
O valor padrão para n é 7.

datetime2 [ ( n ) ]
O mesmo datetimeque , exceto que você pode especificar o número de segundos fracionários. O valor padrão para n é 7.

valor n Precision Scale
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
Armazena data e hora do dia com 19 a 23 caracteres de acordo com o calendário gregoriano. A data pode conter ano, mês e dia. O tempo contém horas, minutos, segundos. Como opção, você pode exibir três dígitos por segundos fracionários. O tamanho do armazenamento é de 8 bytes.

smalldatetime
Armazena uma data e uma hora. O tamanho do armazenamento é de 4 bytes.

date
Armazena uma data usando um máximo de 10 caracteres para ano, mês e dia de acordo com o calendário gregoriano. O tamanho do armazenamento é de 3 bytes. A data é armazenada como um inteiro.

time [ ( n ) ]
O valor padrão para n é 7.

float [ ( n ) ]
Tipo de dados numéricos aproximados para uso com dados numéricos de ponto flutuante. Os dados de ponto flutuante são aproximados, o que significa que nem todos os valores no intervalo de tipos de dados podem ser representados exatamente. n especifica o número de bits usados para armazenar a mantissa float da notação científica. n dita a precisão e o tamanho do armazenamento. Se n for especificado, deve ser um valor entre 1 e 53. O valor padrão de n é 53.

valor n Precision Tamanho de armazenamento
1-24 7 dígitos 4 bytes
25-53 15 dígitos 8 bytes

O Azure Synapse Analytics trata n como um dos dois valores possíveis. Se 1<= n<= 24, n é tratado como 24. Se 25<= n<= 53, n é tratado como 53.

O tipo de dados float do Azure Synapse Analytics está em conformidade com o padrão ISO para todos os valores de 1 a 53. O sinónimo de dupla precisão é float(53).

real [ ( n ) ]
A definição de real é a mesma que float. O sinónimo ISO de real é float(24).

decimal [ ( precisão [ , escala ] ) ] | numeric [ ( precisão [ , escala ] ) ]
Armazena precisão fixa e números de escala.

precision
O número total máximo de dígitos decimais que podem ser armazenados, em ambos os lados da vírgula decimal. A precisão deve ser um valor a partir da 1 precisão máxima de 38. A precisão padrão é 18.

scale
O número máximo de dígitos decimais que podem ser armazenados à direita da vírgula decimal. A escala deve ser um valor de através da 0precisão. Só é possível especificar a escala se a precisão for especificada. A escala padrão é 0 e assim 0<= escala< = precisão. Os tamanhos máximos de armazenamento variam, com base na precisão.

Precision Bytes de armazenamento
1-9 5
10-19 9
20-28 13
29-38 17

money | smallmoney
Tipos de dados que representam valores de moeda.

Tipo de dados Bytes de armazenamento
money 8
smallmoney 4

bigint | int | smallint | tinyint
Tipos de dados de número exato que usam dados inteiros. O armazenamento é mostrado na tabela a seguir.

Tipo de dados Bytes de armazenamento
bigint 8
int 4
smallint 2
tinyint 1

bit
Um tipo de dados inteiro que pode ter o valor de 1, 0ou 'NULL. O Azure Synapse Analytics otimiza o armazenamento de colunas de bits. Se houver 8 ou menos colunas de bits em uma tabela, as colunas serão armazenadas como 1 byte. Se houver de colunas de 9 a 16 bits, as colunas são armazenadas como 2 bytes e assim por diante.

nvarchar [ ( n | max ) ] Dados de caracteres Unicode de comprimento variável. n pode ser um valor de 1 a 4000. max indica que o tamanho máximo de armazenamento é 2^31-1 bytes (2 GB). O tamanho do armazenamento em bytes é duas vezes o número de caracteres inseridos + 2 bytes. Os dados inseridos podem ter zero caracteres. O max comprimento aplica-se apenas ao Azure Synapse Analytics.

nchar [ ( n ) ]
Dados de caracteres Unicode de comprimento fixo com um comprimento de n caracteres. n deve ser um valor de através 1de 4000 . O tamanho do armazenamento é duas vezes n bytes.

varchar [ ( n | max ) ] Dados de caracteres não-Unicode de comprimento variável com um comprimento de n bytes. n deve ser um valor de 1 até 8000. max indica que o tamanho máximo de armazenamento é 2^31-1 bytes (2 GB). O tamanho do armazenamento é o comprimento real dos dados inseridos + 2 bytes. O max comprimento aplica-se apenas ao Azure Synapse Analytics.

char [ ( n ) ]
Dados de caracteres não-Unicode de comprimento fixo com um comprimento de n bytes. n deve ser um valor de 1 até 8000. O tamanho do armazenamento é de n bytes. O padrão para n é 1.

varbinary [ ( n | max ) ] Dados binários de comprimento variável. n pode ser um valor de 1 até 8000. max indica que o tamanho máximo de armazenamento é 2^31-1 bytes (2 GB). O tamanho do armazenamento é o comprimento real dos dados inseridos + 2 bytes. O valor padrão para n é 7. O max comprimento aplica-se apenas ao Azure Synapse Analytics.

binary [ ( n ) ]
Dados binários de comprimento fixo com um comprimento de n bytes. n pode ser um valor de 1 até 8000. O tamanho do armazenamento é de n bytes. O valor padrão para n é 7.

uniqueidentifier
É um GUID de 16 bytes.

Permissions

Criar uma tabela requer permissão na db_ddladmin função de banco de dados fixa ou:

  • CREATE TABLE permissão no banco de dados
  • ALTER SCHEMA permissão no esquema da tabela

Criar uma tabela particionada requer permissão na db_ddladmin função de banco de dados fixa ou

  • ALTER ANY DATASPACE permissão

O logon que cria uma tabela temporária local recebe CONTROL, INSERT, SELECTe UPDATE permissões na tabela.

Remarks

Para obter os limites mínimo e máximo no Azure Synapse Analytics, consulte Limites de capacidade do Azure Synapse Analytics.

Determinar o número de partições de tabela

Cada tabela definida pelo usuário é dividida em várias tabelas menores que são armazenadas em locais separados chamados distribuições. O Azure Synapse Analytics usa 60 distribuições. No Analytics Platform System (PDW), o número de distribuições depende do número de nós de computação.

Cada distribuição contém todas as partições de tabela. Por exemplo, se houver 60 distribuições e quatro partições de tabela mais uma partição vazia, haverá 300 partições (5 x 60= 300). Se a tabela for um índice columnstore clusterizado, haverá um índice columnstore por partição, o que significa que você terá 300 índices columnstore.

Recomendamos o uso de menos partições de tabela para garantir que cada índice columnstore tenha linhas suficientes para aproveitar os benefícios dos índices columnstore. Para obter mais informações no Azure Synapse Analytics, consulte Particionando tabelas no pool SQL dedicado e Índices em tabelas de pool SQL dedicadas no Azure Synapse Analytics.

Tabela de armazenamento de linhas (heap ou índice clusterizado)

Uma tabela rowstore é uma tabela armazenada em ordem linha a linha. É um heap ou índice clusterizado. O Azure Synapse Analytics cria todas as tabelas de armazenamento de linhas com compactação de página; Esse comportamento não é configurável pelo usuário.

Tabela Columnstore (índice columnstore)

Uma tabela columnstore é uma tabela armazenada em ordem coluna por coluna. O índice columnstore é a tecnologia que gerencia dados armazenados em uma tabela columnstore. O índice columnstore clusterizado não afeta a forma como os dados são distribuídos. Em vez disso, afeta a forma como os dados são armazenados em cada distribuição.

Para alterar uma tabela rowstore para uma tabela columnstore, solte todos os índices existentes na tabela e crie um índice columnstore clusterizado. Para obter um exemplo, consulte CREATE COLUMNSTORE INDEX (Transact-SQL).

Para obter mais informações, consulte estes artigos:

Limitations

  • Não é possível definir uma DEFAULT restrição em uma coluna de distribuição.
  • O nome da tabela não pode ter mais de 128 caracteres.
  • O nome da coluna não pode ter mais de 128 caracteres.

Partitions

A coluna de partição não pode ter um agrupamento somente Unicode. Por exemplo, a seguinte instrução falha:

CREATE TABLE t1 ( c1 varchar(20) COLLATE Divehi_90_CI_AS_KS_WS) WITH (PARTITION (c1 RANGE FOR VALUES (N'')))

Se boundary_value for um valor literal que deve ser convertido implicitamente para o tipo de dados no partition_column_name, ocorrerá uma discrepância. O valor literal é exibido por meio das exibições do sistema do Azure Synapse Analytics, mas o valor convertido é usado para operações Transact-SQL.

Tabelas temporárias

Não há suporte para tabelas temporárias globais que começam com ## .

As tabelas temporárias locais têm as seguintes limitações e restrições:

  • Eles são visíveis apenas para a sessão atual. O Azure Synapse Analytics os descarta automaticamente no final da sessão. Para soltá-los explicitamente, use a DROP TABLE instrução.
  • Eles não podem ser renomeados.
  • Eles não podem ter partições ou exibições.
  • Suas permissões não podem ser alteradas. GRANT, DENYe REVOKE as instruções não podem ser usadas com tabelas temporárias locais.
  • Os comandos do console de banco de dados são bloqueados para tabelas temporárias.
  • Se mais de uma tabela temporária local for usada em um lote, cada uma deverá ter um nome exclusivo. Se várias sessões estiverem executando o mesmo lote e criando a mesma tabela temporária local, o Azure Synapse Analytics acrescentará internamente um sufixo numérico ao nome da tabela temporária local para manter um nome exclusivo para cada tabela temporária local.

Comportamento de bloqueio

Leva um cadeado exclusivo na mesa. Usa um bloqueio compartilhado nos objetos DATABASE, SCHEMA e SCHEMARESOLUTION.

Exemplos de colunas

A. Especificar um agrupamento de colunas

No exemplo a seguir, a tabela MyTable é criada com dois agrupamentos de colunas diferentes. Por padrão, a coluna mycolumn1 tem o agrupamento Latin1_General_100_CI_AS_KS_WSpadrão . A coluna, mycolumn2 tem o agrupamento Frisian_100_CS_AS.

CREATE TABLE MyTable   
  (  
    mycolumnnn1 nvarchar,  
    mycolumn2 nvarchar COLLATE Frisian_100_CS_AS )  
WITH ( CLUSTERED COLUMNSTORE INDEX )  
;  

B. Especificar uma restrição DEFAULT para uma coluna

O exemplo a seguir mostra a sintaxe para especificar um valor padrão para uma coluna. A colA coluna tem uma restrição padrão nomeada constraint_colA e um valor padrão de 0.

CREATE TABLE MyTable
  (  
    colA int CONSTRAINT constraint_colA DEFAULT 0,  
    colB nvarchar COLLATE Frisian_100_CS_AS
  )  
WITH ( CLUSTERED COLUMNSTORE INDEX )  
;  

Exemplos de tabelas temporárias

C. Criar uma tabela temporária local

O exemplo a seguir cria uma tabela temporária local chamada #myTable. A tabela é especificada com um nome de três partes, que começa com um #.

CREATE TABLE AdventureWorks.dbo.#myTable
  (  
   id int NOT NULL,  
   lastName varchar(20),  
   zipCode varchar(6)  
  )  
WITH  
  (   
    DISTRIBUTION = HASH (id),  
    CLUSTERED COLUMNSTORE INDEX
  )  
;  

Exemplos de estrutura de tabela

D. Criar uma tabela com um índice columnstore clusterizado

O exemplo a seguir cria uma tabela distribuída com um índice columnstore clusterizado. Cada distribuição é armazenada como um columnstore.

O índice columnstore clusterizado não afeta a forma como os dados são distribuídos; Os dados são sempre distribuídos por linha. O índice columnstore clusterizado afeta como os dados são armazenados em cada distribuição.

  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. Criar um índice columnstore clusterizado ordenado

O exemplo a seguir mostra como criar um índice columnstore clusterizado ordenado. O índice está ordenado em SHIPDATE.

CREATE TABLE Lineitem  
WITH (DISTRIBUTION = ROUND_ROBIN, CLUSTERED COLUMNSTORE INDEX ORDER(SHIPDATE))  
AS  
SELECT * FROM ext_Lineitem

Exemplos de distribuição de tabelas

F. Criar uma tabela ROUND_ROBIN

O exemplo a seguir cria uma tabela ROUND_ROBIN com três colunas e sem partições. Os dados estão distribuídos por todas as distribuições. A tabela é criada com um CLUSTERED COLUMNSTORE INDEX, que oferece melhor desempenho e compactação de dados do que um índice clusterizado de heap ou rowstore.

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode varchar(6)  
  )  
WITH ( CLUSTERED COLUMNSTORE INDEX );  

G. Criar uma tabela distribuída por hash em várias colunas (visualização)

O exemplo a seguir cria a mesma tabela que o exemplo anterior. No entanto, para esta tabela, as linhas são distribuídas (em id e zipCode colunas). A tabela é criada com um índice columnstore clusterizado, que oferece melhor desempenho e compactação de dados do que um índice clusterizado de heap ou rowstore.

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode varchar(6)  
  )  
WITH  
  (   
    DISTRIBUTION = HASH (id, zipCode), 
    CLUSTERED COLUMNSTORE INDEX  
  );  

H. Criar uma tabela replicada

O exemplo a seguir cria uma tabela replicada semelhante aos exemplos anteriores. As tabelas replicadas são copiadas na íntegra para cada nó de computação. Com essa cópia em cada nó de computação, a movimentação de dados é reduzida para consultas. Este exemplo é criado com um CLUSTERED INDEX, que oferece melhor compactação de dados do que um heap. Uma pilha pode não conter linhas suficientes para obter uma boa compactação CLUSTERED COLUMNSTORE INDEX.

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode varchar(6)  
  )  
WITH  
  (   
    DISTRIBUTION = REPLICATE,
    CLUSTERED INDEX (lastName)  
  );  

Exemplos de partições de tabela

I. Criar uma tabela particionada

O exemplo a seguir cria a mesma tabela mostrada no exemplo A, com a adição de RANGE LEFT particionamento na id coluna. Ele especifica quatro valores de limite de partição, o que resulta em cinco partições.

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
  );  

Neste exemplo, os dados são classificados nas seguintes partições:

  • Partição 1: col <= 10
  • Partição 2: 10 < col <= 20
  • Partição 3: 20 < col <= 30
  • Partição 4: 30 < col <= 40
  • Partição 5: 40 < col

Se esta mesma tabela foi particionada RANGE RIGHT em vez de RANGE LEFT (padrão), os dados são classificados nas seguintes partições:

  • Partição 1: col < 10
  • Partição 2: 10 <= col < 20
  • Partição 3: 20 <= col < 30
  • Partição 4: 30 <= col < 40
  • Partição 5: 40 <= col

J. Criar uma tabela particionada com uma partição

O exemplo a seguir cria uma tabela particionada com uma partição. Ele não especifica nenhum valor de limite, o que resulta em uma partição.

CREATE TABLE myTable (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode int)  
WITH
    (
      PARTITION ( id RANGE LEFT FOR VALUES ( )),  
      CLUSTERED COLUMNSTORE INDEX  
    )  
;  

K. Criar uma tabela com particionamento de data

O exemplo a seguir cria uma nova tabela chamada myTable, com particionamento em uma date coluna. RANGE RIGHT Usando e datas para os valores de limite, ele coloca um mês de dados em cada partição.

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'  
      ))
  );  

Aplica-se a:Warehouse no Microsoft Fabric

CREATE TABLE (Armazém de dados de malha)

Cria uma nova tabela em um Warehouse no Microsoft Fabric.

Para obter mais informações, consulte Criar tabelas no Warehouse no Microsoft Fabric.

Note

Para base de dados SQL no Microsoft Fabric, veja CRIAR TABELA. Para as plataformas SQL Server e Azure SQL, visite CREATE TABLE e selecione a versão do produto desejada na lista suspensa de versão. Para obter referência ao Azure Synapse Analytics and Analytics Platform System (PDW), visite CREATE TABLE (Azure Synapse Analytics).

Transact-SQL convenções de sintaxe

Syntax

-- 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 (CLUSTER BY [ ,... 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  

Arguments

database_name

O nome do banco de dados que conterá a nova tabela. O padrão é o banco de dados atual.

schema_name

O esquema para a tabela. A especificação do esquema é opcional. Se estiver em branco, o esquema padrão será usado.

table_name

O nome da nova tabela.

column_name

O nome de uma coluna de tabela.

COM (AGRUPAR POR [ ,... n])

A CLUSTER BY cláusula para clustering de dados no Fabric Data Warehouse exige que seja especificada pelo menos uma coluna para clustering de dados, e um máximo de quatro colunas.

Para mais informações, consulte Agrupamento de dados no Fabric Data Warehouse.

Opções da coluna

NULL | NOT NULL

Especifica se NULL os valores são permitidos na coluna. A predefinição é NULL.

COLLATE Windows_collation_name

Especifica o agrupamento para a expressão.

Para obter mais informações sobre agrupamentos suportados, consulte COLLATE.

Tipo de dados

O Microsoft Fabric suporta os tipos de dados mais usados. Para obter mais informações, consulte Tipos de dados no Microsoft Fabric.

Note

Semelhante ao SQL Server, há um limite de 8.060 bytes por linha. Isso pode se tornar um problema de bloqueio para tabelas que têm muitas colunas ou colunas com tipos de dados grandes, como varchar(8000) ou varbinary(8000). Inserções ou atualizações que violam o limite de 8.060 bytes resultam em códigos de erro 511 ou 611. Para obter mais informações, consulte Guia de arquitetura de páginas e extensões.

Para obter uma tabela de conversões de tipo de dados, consulte a seção Conversões implícitas de CAST e CONVERT (Transact-SQL). Para obter mais informações, consulte Tipos de dados de data e hora e funções (Transact-SQL).

A lista a seguir de tipos de dados suportados inclui seus detalhes e bytes de armazenamento.

datetime2 ( n )
Armazena data e hora do dia com 19 a 26 caracteres de acordo com o calendário gregoriano. A data pode conter ano, mês e dia. O tempo contém horas, minutos, segundos. Como opção, você pode armazenar e exibir de zero a seis dígitos por segundos fracionários com base no parâmetro n . O tamanho do armazenamento é de 8 bytes. n deve ser um valor de 0 até 6.

Note

Não há precisão padrão como outras plataformas SQL. Você deve fornecer o valor para precisão de 0 até 6.

valor n Precision Scale
0 19 0
1 21 1
2 22 2
3 23 3
4 24 4
5 25 5
6 26 6

date
Armazena uma data usando um máximo de 10 caracteres para ano, mês e dia de acordo com o calendário gregoriano. O tamanho do armazenamento é de 3 bytes. A data é armazenada como um inteiro.

time ( n )
n deve ser um valor de 0 até 6.

float [ ( n ) ]
Tipo de dados numéricos aproximados para uso com dados numéricos de ponto flutuante. Os dados de ponto flutuante são aproximados, o que significa que nem todos os valores no intervalo de tipos de dados podem ser representados exatamente. n especifica o número de bits usados para armazenar a mantissa do flutuador em notação científica. n dita a precisão e o tamanho do armazenamento. Se n for especificado, deve ser um valor entre 1 e 53. O valor padrão de n é 53.

Note

Não há precisão padrão como outras plataformas SQL. Você deve fornecer o valor para precisão de 0 até 6.

valor n Precision Tamanho de armazenamento
1-24 7 dígitos 4 bytes
25-53 15 dígitos 8 bytes

O Azure Synapse Analytics trata n como um dos dois valores possíveis. Se 1<= n<= 24, n é tratado como 24. Se 25<= n<= 53, n é tratado como 53.

O tipo de dados float do Azure Synapse Analytics está em conformidade com o padrão ISO para todos os valores de 1 a 53. O sinónimo de dupla precisão é float(53).

real [ ( n ) ]
A definição de real é a mesma que float. O sinónimo ISO de real é float(24).

decimal [ ( precisão [ , escala ] ) ] | numeric [ ( precisão [ , escala ] ) ]
Armazena precisão fixa e números de escala.

precision
O número total máximo de dígitos decimais que podem ser armazenados, em ambos os lados da vírgula decimal. A precisão deve ser um valor a partir da 1 precisão máxima de 38. A precisão padrão é 18.

scale
O número máximo de dígitos decimais que podem ser armazenados à direita da vírgula decimal. A escala deve ser um valor de através da 0precisão. Só é possível especificar a escala se a precisão for especificada. A escala padrão é 0 e assim 0<= escala< = precisão. Os tamanhos máximos de armazenamento variam, com base na precisão.

Precision Bytes de armazenamento
1-9 5
10-19 9
20-28 13
29-38 17

bigint | int | smallint
Tipos de dados de número exato que usam dados inteiros. O armazenamento é mostrado na tabela a seguir.

Tipo de dados Bytes de armazenamento
bigint 8
int 4
smallint 2

bit
Um tipo de dados inteiro que pode ter o valor de 1, 0ou 'NULL. O Azure Synapse Analytics otimiza o armazenamento de colunas de bits. Se houver 8 ou menos colunas de bits em uma tabela, as colunas serão armazenadas como 1 byte. Se houver de colunas de 9 a 16 bits, as colunas são armazenadas como 2 bytes e assim por diante.

varchar [ ( n | MAX ) ] Dados de caracteres Unicode de comprimento variável com um comprimento de n bytes. n deve ser um valor de 1 até 8000. O tamanho do armazenamento é o comprimento real dos dados inseridos + 2 bytes. O padrão para n é 1. A varchar(MAX) coluna pode armazenar até 1 MB de texto no Warehouse.

Note

varchar(MAX) está em pré-visualização no Warehouse. Para obter mais informações, consulte Tipos de dados no Microsoft Fabric.

char [ ( n ) ]
Dados de caracteres Unicode de comprimento fixo com um comprimento de n bytes. n deve ser um valor de 1 até 8000. O tamanho do armazenamento é de n bytes. O padrão para n é 1.

varbinary [ ( n | MAX ) ] Dados binários de comprimento variável. n pode ser um valor de 1 até 8000. O tamanho do armazenamento é o comprimento real dos dados inseridos + 2 bytes. O valor padrão para n é 7. A varbinary(MAX) coluna pode armazenar até 1 MB de dados no Warehouse.

Note

varbinary(MAX) está em pré-visualização no Warehouse. Para obter mais informações, consulte Tipos de dados no Microsoft Fabric.

uniqueidentifier
É um GUID de 16 bytes.

Permissions

As permissões no Microsoft Fabric são diferentes das permissões do Azure Synapse Analytics.

O usuário precisa ser membro das funções de Administrador, Membro ou Colaborador no espaço de trabalho Malha.

Limitations

Remarks

Há uma funcionalidade Transact-SQL limitada no Warehouse. Para obter mais informações, consulte Área de superfície T-SQL no Microsoft Fabric.

Comportamento de bloqueio

Usa um bloqueio de Schema-Modification na tabela, um bloqueio compartilhado no BANCO de DADOS e um bloqueio de Schema-Stability no SCHEMA.

Examples

A. Crie uma tabela agrupada para dados de vendas

Este exemplo cria uma tabela simples Sales e utiliza as CustomerID colunas e SaleDate para agrupamento de dados.

CREATE TABLE Sales (
    SaleID INT,
    CustomerID INT,
    SaleDate DATE,
    Amount DECIMAL(10,2)
) WITH (CLUSTER BY (CustomerID, SaleDate))