CREATE TABLE

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

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

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

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

Observação

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

Observação

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

Convenções de sintaxe de Transact-SQL

Sintaxe

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

Argumentos

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 da tabela. A especificação de esquema é opcional. Se ele estiver vazio, 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, confira Tabelas temporárias no pool SQL dedicado no Azure Synapse Analytics.

column_name

O nome de uma coluna da tabela.

Opções de Coluna

COLLATEWindows_collation_name
Especifica a ordenação da expressão. A ordenação precisa ser uma das ordenações do Windows compatíveis com o SQL Server. Para obter uma lista de ordenações do Windows compatíveis com o SQL Server, confira Nome de ordenação do Windows (Transact-SQL)/).

NULL | NOT NULL
Especifica se os valores NULL são permitidos na coluna. O padrão é NULL.

[ CONSTRAINTconstraint_name ] DEFAULTconstant_expression
Especifica o valor padrão da coluna.

Argumento Explicação
constraint_name O nome opcional da restrição. O nome da restrição é exclusivo no banco de dados. O nome pode ser reutilizado em outros bancos de dados.
constant_expression O valor padrão da coluna. A expressão precisa ser um valor literal ou uma constante. Por exemplo, estas expressões de constante são permitidas: 'CA', 4. Essas expressões constantes não são permitidas: 2+3, CURRENT_TIMESTAMP.

Opções de estrutura da tabela

Para obter diretrizes de como escolher o tipo de tabela, confira 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 Azure Synapse Analytics.

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

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, confira Tabelas rowstore nos Comentários gerais.

LOCATION = USER_DB Essa opção foi preterida. Ela é aceita sintaticamente, mas não é mais necessária e não afeta mais o comportamento.

Opções de distribuição da tabela

Para entender como escolher o melhor método de distribuição e usar tabelas distribuídas, confira Projetar tabelas distribuídas usando o 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, confira o Assistente de Distribuição do SQL do Synapse (versão prévia).

DISTRIBUTION = HASH ( distribution_column_name ) Atribui cada linha a uma distribuição, efetuando hash no valor armazenado em distribution_column_name. O algoritmo é determinístico, ou seja, ele sempre efetua hash no mesmo valor para a mesma distribuição. A coluna de distribuição deve ser definida como NOT NULL porque todas as linhas que tiverem 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, o que permite uma distribuição mais uniforme dos dados da tabela base, reduz a distorção de dados ao longo do tempo e melhora o desempenho da consulta.

Observação

  • Para habilitar o recurso de distribuição de várias colunas (MDC), altere o nível de compatibilidade do banco de dados para 50 com esse comando. Para obter mais informações sobre como definir o nível de compatibilidade do banco de dados, confira ALTERAR A CONFIGURAÇÃO DO ESCOPO DO BANCO DE DADOS. Por exemplo: ALTER DATABASE SCOPED CONFIGURATION SET DW_COMPATIBILITY_LEVEL = 50;
  • Para desabilitar o recurso MCD (Distribuição de Várias Colunas), execute este comando para alterar o nível de compatibilidade do banco de dados para AUTO. Por exemplo: ALTER DATABASE SCOPED CONFIGURATION SET DW_COMPATIBILITY_LEVEL = AUTO; As tabelas de MCD existentes serão mantidas, mas ficarão ilegíveis. As consultas em tabelas de 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 de MCD, deve-se usar a instrução CTAS e a fonte de dados precisa consistir em tabelas de SQL do Synapse.
  • Atualmente, há suporte para a geração de um script para criar tabelas MCD na versão 19 e versões posteriores do SSMS.

DISTRIBUTION = ROUND_ROBIN Distribui as linhas uniformemente entre todas as distribuições de modo round robin. Esse comportamento é o padrão para 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 PDW (Analytics Platform System), a tabela é armazenada em um grupo de arquivos do SQL Server que abrange o nó de computação. Esse comportamento é o padrão para PDW (Analytics Platform System).

Opções de partição da tabela

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

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

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



Se você especificar a cláusula PARTITION, mas não especificar um valor de limite, o Azure Synapse Analytics criará uma tabela particionada com uma partição. Caso seja necessário, você pode dividir a tabela em duas partições posteriormente.



Se você especificar um valor de limite, a tabela resultante terá duas partições: uma para os valores menores do que o valor de limite e outra para os valores maiores que o valor de 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 de partição em seus metadados.

Confira Criar uma tabela particionada na seção de exemplos.

Opção de índice columnstore clusterizado ordenado

O CCI (índice columnstore clusterizado) é o padrão para a criação de tabelas no Azure Synapse Analytics. Os dados em um CCI não são classificados antes de serem compactados em segmentos columnstore. Ao criar um CCI com ORDER, os dados são classificados antes de serem adicionados a segmentos de índice e o desempenho da consulta pode ser melhorado. Veja Ajuste de desempenho com índice columnstore clusterizado ordenado para obter detalhes.

Um CCI pode ser criado em colunas de qualquer tipo de dados compatível com o Azure Synapse Analytics, exceto por colunas de cadeia de caracteres.

Os usuários podem consultar a coluna column_store_order_ordinal em sys.index_columns para obter as colunas nas quais uma tabela é ordenada e qual é a sequência na ordenação.

Confira Ajuste de desempenho com índice columnstore clusterizado ordenado para obter detalhes.

Tipo de dados

O Azure Synapse Analytics é compatível com os tipos de dados mais usados. Para entender melhor os tipos de dados e como usá-los, confira Tipos de dados para tabelas no Azure Synapse Analytics.

Observação

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 nos códigos de erro 511 ou 611. Para obter mais informações, confira o Guia de arquitetura de páginas e extensões.

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

A seguinte lista de tipos de dados com suporte inclui os detalhes e bytes de armazenamento:

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

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

Valor de n Precisão Escala
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 a data e a 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 horário contém hora, minutos, segundos. Como opção, você pode exibir três dígitos para segundos fracionários. O tamanho de armazenamento é de 8 bytes.

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

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

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

float [ ( n ) ]
Tipo de dados do número aproximado para ser usado com os 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 tipo de dados podem ser representados exatamente. n especifica o número de bits usados para armazenar a mantissa do float em notação científica. n determina o tamanho do armazenamento e a precisão. Se n for especificado, ele precisará ser um valor entre 1 e 53. O valor padrão de n é 53.

Valor de n Precisão Tamanho de armazenamento
1-24 7 dígitos 4 bytes
25-53 15 dígitos 8 bytes

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 Azure Synapse Analytics float está em conformidade com o padrão ISO para todos os valores de n de 1 a 53. O sinônimo de precisão dupla é float(53).

real [ ( n ) ]
A definição de real é igual à de float. O sinônimo de ISO para real é float(24).

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

precisão
O número máximo total de dígitos decimais que podem ser armazenados, à esquerda e à direita do ponto decimal. A precisão precisa ser um valor de 1 até a 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 do ponto decimal. Scale precisa ser um valor de 0 até precision. Você só poderá especificar scale se precision for especificado. A escala padrão é 0, assim, 0<= scale<= precision. Os tamanhos máximos de armazenamento variam, com base na precisão.

Precisão 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 numéricos exatos 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 Integer que pode ter o valor 1, 0 ou NULL. O Azure Synapse Analytics otimiza o armazenamento de colunas de bit. Se houver 8 ou menos colunas de bit em uma tabela, as colunas serão armazenadas como 1 byte. Se houver colunas de 9 a 16 bits, as colunas serão armazenadas como 2 bytes e assim por diante.

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

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

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

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

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

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

uniqueidentifier
É um GUID de 16 bytes.

Permissões

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

  • Permissão CREATE TABLE no banco de dados
  • Permissão ALTER SCHEMA no esquema que conterá a tabela

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

  • Permissão ALTER ANY DATASPACE

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

Comentários

Para saber os limites mínimo e máximo, confira Limites de capacidade do Azure Synapse Analytics.

Determinar o número de partições da 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 PDW (Analytics Platform System), 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 da 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, ou seja, haverá 300 índices columnstore.

É recomendável usar 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, confira Tabelas de particionamento no pool SQL dedicado e Índices em tabelas de pool SQL dedicadas no Azure Synapse Analytics.

Tabela rowstore (índice de heap ou clusterizado)

Uma tabela rowstore é uma tabela armazenada em ordem de linha por linha. É um índice de heap ou clusterizado. O Azure Synapse Analytics cria todas as tabelas rowstore 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 de coluna por coluna. O índice columnstore é a tecnologia que gerencia os dados armazenados em uma tabela columnstore. O índice columnstore clusterizado não afeta como os dados são distribuídos. Em vez disso, ele afeta como os dados são armazenados dentro de cada distribuição.

Para converter uma tabela rowstore em uma tabela columnstore, remova todos os índices existentes na tabela e crie um índice columnstore clusterizado. Para obter um exemplo, confira CREATE COLUMNSTORE INDEX (Transact-SQL).

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

Limitações e Restrições

  • Não é possível definir uma restrição DEFAULT 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.

Partições

A coluna de partição não pode ter uma ordenação somente Unicode. Por exemplo, a seguinte instrução falhará:

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 precise ser convertido implicitamente no tipo de dados em 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 do Transact-SQL.

Tabelas temporárias

Não há compatibilidade com 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 descarta-as automaticamente no final da sessão. Para removê-las explicitamente, use a instrução DROP TABLE.
  • Não podem ser renomeados.
  • Não podem ter partições nem exibições.
  • Suas permissões não podem ser alteradas. As instruções GRANT, DENY e REVOKE não podem ser usadas com tabelas temporárias locais.
  • Os comandos do console do 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 precisará 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 de cada tabela temporária local para manter um nome exclusivo para cada uma delas.

Comportamento de bloqueio

Usa um bloqueio exclusivo na tabela. Usa um bloqueio compartilhado nos objetos de banco de dados DATABASE, SCHEMA e SCHEMARESOLUTION.

Exemplos de colunas

a. Especificar uma ordenação de coluna

No exemplo a seguir, a tabela MyTable é criada com duas ordenações de coluna diferentes. Por padrão, a coluna mycolumn1, tem a ordenação padrão Latin1_General_100_CI_AS_KS_WS. A coluna mycolumn2 tem a ordenação 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 coluna colA tem uma restrição padrão chamada constraint_colA e o valor padrão 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 denominada #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 será armazenada como um columnstore.

O índice columnstore clusterizado não afeta como os dados são distribuídos. Os dados sempre são distribuídos por linha. O índice columnstore clusterizado afeta como os dados são armazenados dentro de 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 é ordenado em SHIPDATE.

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

Exemplos de distribuição da tabela

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 são difundidos entre todas as distribuições. A tabela é criada com um ÍNDICE COLUMNSTORE CLUSTERIZADO, que fornece melhor desempenho e melhor compactação de dados do que um índice clusterizado rowstore ou de heap.

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 (versão prévia)

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

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 à dos exemplos anteriores. As tabelas replicadas são copiadas por completo para cada nó de computação. Com essa cópia em cada nó de computação, a movimentação de dados é reduzida para as consultas. Este exemplo é criado com um ÍNDICE CLUSTERIZADO, que fornece melhor compactação de dados que um heap. Um heap pode não conter linhas suficientes para obter uma boa compactação de ÍNDICE COLUMNSTORE CLUSTERIZADO.

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, conforme é mostrado no exemplo A, com a adição do particionamento RANGE LEFT na coluna id. 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 serão classificados nas partições a seguir:

  • 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 essa mesma tabela fosse particionada RANGE RIGHT em vez de RANGE LEFT (padrão), os dados seriam classificados nas partições a seguir:

  • 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 nomeada myTable, com o particionamento em uma coluna date. Usando datas e RANGE RIGHT 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'  
      ))
  );  

Próximas etapas

Aplica-se a:Warehouse no Microsoft Fabric

Cria uma nova tabela no Warehouse no Microsoft Fabric.

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

Observação

Para referência ao Azure Synapse Analytics e ao PDW (Analytics Platform System), visite CREATE TABLE (Azure Synapse Analytics). Para as plataformas SQL Server e SQL do Azure, visite CREATE TABLE e selecione a versão desejada do produto na lista suspensa de versão.

Convenções de sintaxe de Transact-SQL

Sintaxe

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

<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 ) ] 
    | uniqueidentifier  

Argumentos

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 da tabela. A especificação de esquema é opcional. Se ele estiver vazio, o esquema padrão será usado.

table_name

O nome da nova tabela.

column_name

O nome de uma coluna da tabela.

Opções de Coluna

NULL | NOT NULL
Especifica se os valores NULL são permitidos na coluna. O padrão é NULL.

Tipo de dados

O Microsoft Fabric é compatível com os tipos de dados mais usados.

Observação

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 resultarão nos códigos de erro 511 ou 611. Para obter mais informações, confira o Guia de arquitetura de páginas e extensões.

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

A lista de tipos de dados com suporte, a seguir, inclui os detalhes e bytes de armazenamento.

datetime2 ( n )
Armazena a data e a 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 horário contém hora, 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 de armazenamento é de 8 bytes. n precisa ser um valor de 0 a 6.

Observação

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

Valor de n Precisão Escala
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 no máximo 10 caracteres para o ano, mês e dia, de acordo com o calendário gregoriano. O tamanho do armazenamento é 3 bytes. A data é armazenada como um inteiro.

time ( n )
n precisa ser um valor de 0 a 6.

float [ ( n ) ]
Tipo de dados do número aproximado para ser usado com os 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 tipo de dados podem ser representados exatamente. n especifica o número de bits usados para armazenar a mantissa do float em notação científica. n determina o tamanho do armazenamento e a precisão. Se n for especificado, ele precisará ser um valor entre 1 e 53. O valor padrão de n é 53.

Observação

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

Valor de n Precisão Tamanho de armazenamento
1-24 7 dígitos 4 bytes
25-53 15 dígitos 8 bytes

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 Azure Synapse Analytics float está em conformidade com o padrão ISO para todos os valores de n de 1 a 53. O sinônimo de precisão dupla é float(53).

real [ ( n ) ]
A definição de real é igual à de float. O sinônimo de ISO para real é float(24).

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

precisão
O número máximo total de dígitos decimais que podem ser armazenados, à esquerda e à direita do ponto decimal. A precisão precisa ser um valor de 1 até a 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 do ponto decimal. Scale precisa ser um valor de 0 até precision. Você só poderá especificar scale se precision for especificado. A escala padrão é 0, assim, 0<= scale<= precision. Os tamanhos máximos de armazenamento variam, com base na precisão.

Precisão Bytes de armazenamento
1-9 5
10–19 9
20–28 13
29-38 17

bigint | int | smallint
Tipos de dados numéricos exatos 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 Integer que pode ter o valor 1, 0 ou NULL. O Azure Synapse Analytics otimiza o armazenamento de colunas de bit. Se houver 8 ou menos colunas de bit em uma tabela, as colunas serão armazenadas como 1 byte. Se houver colunas de 9 a 16 bits, as colunas serão armazenadas como 2 bytes e assim por diante.

varchar [ ( n ) ] Dados de caractere Unicode de comprimento variável com um tamanho de n bytes. n precisa ser um valor de 1 a 8000. O tamanho de armazenamento é o comprimento real dos dados inseridos + 2 bytes. O padrão para n é 1.

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

varbinary [ ( n ) ] Dados binários de comprimento variável. n pode ser um valor de 1 a 8000. O tamanho de armazenamento é o comprimento real dos dados inseridos + 2 bytes. O valor padrão de n é 7.

uniqueidentifier
É um GUID de 16 bytes.

Permissões

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

Limitações e restrições

  • Os nomes das tabelas não podem ter mais de 128 caracteres.
  • Os nomes de tabela no Warehouse no Microsoft Fabric não podem incluir os caracteres / ou \ terminar com um .arquivo .
  • Os nomes das colunas não podem ter mais de 128 caracteres.
  • As tabelas têm um máximo de 1024 colunas por tabela.
  • A única ordenação padrão com suporte no Warehouse é Latin1_General_100_BIN2_UTF8.

Comentários

A funcionalidade Transact-SQL é limitada no Warehouse. Para obter mais informações, confira Área de Superfície do TSQL no Microsoft Fabric.

Comportamento de bloqueio

Obtém um bloqueio de modificação de esquema na tabela, um bloqueio compartilhado no DATABASE e um bloqueio de estabilidade do esquema no SCHEMA.

Próximas etapas