CREATE TABLE

Aplica-se a:Azure Synapse Analytics AnalyticsPlatform System (PDW)

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

Para compreender as tabelas e como utilizá-las, veja Tabelas no Azure Synapse Analytics.

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

Nota

Para SQL Server e SQL do Azure plataformas, visite CREATE TABLE e selecione a versão de produto pretendida. Para referência ao Armazém no Microsoft Fabric, visite CREATE TABLE (Recursos de Infraestrutura).

Nota

O conjunto de SQL sem servidor no Azure Synapse Analytics suporta apenas tabelas externas e temporárias.

Convenções de sintaxe 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 da base de dados que irá conter a nova tabela. A predefinição é a base de dados atual.

schema_name

O esquema da tabela. Especificar o esquema é opcional. Se estiver em branco, é utilizado o esquema predefinido.

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, veja Tabelas temporárias no conjunto de SQL dedicado no Azure Synapse Analytics.

column_name

O nome de uma coluna de tabela.

Opções de coluna

COLLATEWindows_collation_name
Especifica o agrupamento para a expressão. O agrupamento tem de ser um dos agrupamentos do Windows suportados pelo SQL Server. Para obter uma lista de agrupamentos do Windows suportados pelo SQL Server, consulte Nome do Agrupamento do Windows (Transact-SQL)/).

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

[ CONSTRAINTconstraint_name ] DEFAULTconstant_expression
Especifica o valor de coluna predefinido.

Argumento Explicação
constraint_name O nome opcional para a restrição. O nome da restrição é exclusivo na base de dados. O nome pode ser reutilizado noutras bases de dados.
constant_expression O valor predefinido da coluna. A expressão tem de 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ções sobre como escolher o tipo de tabela, veja Indexação de tabelas no Azure Synapse Analytics.

CLUSTERED COLUMNSTORE INDEX

Armazena a tabela como um índice columnstore em cluster. O índice columnstore em cluster aplica-se a todos os dados da tabela. Este comportamento é a predefinição do Azure Synapse Analytics.

HEAP Armazena a tabela como uma área dinâmica para dados. Este comportamento é a predefinição para o Sistema de Plataforma de Análise (PDW).

CLUSTERED INDEX ( index_column_name [ ,... n ] )
Armazena a tabela como um índice agrupado com uma ou mais colunas-chave. Este comportamento armazena os dados por linha. Utilize index_column_name para especificar o nome de uma ou mais colunas-chave no índice. Para obter mais informações, veja Tabelas Rowstore nas Observações Gerais.

LOCATION = USER_DB Esta opção foi preterida. É aceite de forma sintaticamente aceite, mas já não é necessária e já não afeta o comportamento.

Opções de distribuição de tabelas

Para compreender como escolher o melhor método de distribuição e utilizar tabelas distribuídas, veja Conceber tabelas distribuídas com o conjunto de SQL dedicado no Azure Synapse Analytics.

Para obter recomendações sobre a melhor estratégia de distribuição a utilizar com base nas cargas de trabalho, veja o Assistente de Distribuição do SQL do Synapse (Pré-visualização).

DISTRIBUTION = HASH ( distribution_column_name ) Atribui cada linha a uma distribuição ao hashar o valor armazenado no distribution_column_name. O algoritmo é determinista, o que significa que converte sempre o mesmo valor para a mesma distribuição. A coluna de distribuição deve ser definida como NOT NULL porque todas as linhas com NULL são atribuídas à mesma distribuição.

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

Nota

  • Para ativar a funcionalidade Distribuição de Várias Colunas (MCD), altere o nível de compatibilidade da base de dados para 50 com este comando. Para obter mais informações sobre como definir o nível de compatibilidade da base de dados, veja ALTER DATABASE SCOPED CONFIGURATION (ALTERAR CONFIGURAÇÃO DO ÂMBITO DA BASE DE DADOS). Por exemplo: ALTER DATABASE SCOPED CONFIGURATION SET DW_COMPATIBILITY_LEVEL = 50;
  • Para desativar a funcionalidade de distribuição de Várias Colunas (MCD), execute este comando para alterar o nível de compatibilidade da base de dados para AUTO. Por exemplo: ALTER DATABASE SCOPED CONFIGURATION SET DW_COMPATIBILITY_LEVEL = AUTO; as tabelas MCD existentes permanecerão, mas tornar-se-ão ilegíveis. As consultas em tabelas MCD irão devolver 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, ative novamente a funcionalidade.
    • Para carregar dados para uma tabela MCD, utilize a instrução CTAS e a origem de dados tem de ser tabelas SQL do Synapse.
  • A utilização do SSMS para gerar um script para criar tabelas MCD é atualmente suportada para além da versão 19 do SSMS.

DISTRIBUTION = ROUND_ROBIN Distribui uniformemente as linhas por todas as distribuições de forma round robin. Este comportamento é a predefinição do Azure Synapse Analytics.

DISTRIBUTION = REPLICATE Armazena uma cópia da tabela em cada nó de Computação. Para Azure Synapse Analytics, a tabela é armazenada numa base de dados de distribuição em cada nó de Computação. Para o Sistema de Plataforma de Análise (PDW), a tabela é armazenada num grupo de ficheiros SQL Server que abrange o nó Computação. Este comportamento é a predefinição para o Sistema de Plataforma de Análise (PDW).

Opções de partição de tabela

Para obter orientações sobre como utilizar partições de tabela, veja Particionar tabelas no conjunto de SQL dedicado.

PARTITION ( partition_column_nameRANGE [ LEFT | RIGHT ] FOR VALUES ( [ boundary_value [,... n] ] ))
Cria uma ou mais partições de tabela. Estas partições são setores de tabela horizontais que lhe permitem aplicar operações a subconjuntas de linhas, independentemente de a tabela estar armazenada como uma área dinâmica para dados, índice agrupado ou índice columnstore em cluster. Ao contrário da coluna de distribuição, as partições de tabela não determinam a distribuição onde cada linha é armazenada. Em vez disso, as partições de tabela determinam a forma 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 utilizará para particionar as linhas. Esta coluna pode ser qualquer tipo de dados. Azure Synapse Analytics ordena os valores da coluna de partição por ordem ascendente. A ordenação baixa para alta vai de LEFT para RIGHT na RANGE especificação.
RANGE LEFT Especifica que o valor de limite pertence à partição à esquerda (valores mais baixos). A predefinição é LEFT.
RANGE RIGHT Especifica que o valor de limite pertence à partição à direita (valores mais altos).
FOR VALUES ( boundary_value [,... n] ) Especifica os valores de limite da partição. boundary_value é uma expressão constante. Não pode ser NULO. Tem de corresponder ou ser implicitamente convertível ao tipo de dados de partition_column_name. 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 especificar a PARTITION cláusula, mas não especificar um valor de limite, Azure Synapse Analytics cria uma tabela particionada com uma partição. Se aplicável, pode dividir a tabela em duas partições posteriormente.



Se especificar um valor de limite, a tabela resultante tem duas partições; um para os valores inferiores ao valor de limite e outro para os valores superiores ao valor de limite. Se mover uma partição para uma tabela não particionada, a tabela não particionada recebe os dados, mas não terá os limites de partição nos respetivos metadados.

Veja Criar uma tabela particionada na secção Exemplos.

Opção de índice columnstore em cluster ordenada

O índice columnstore (CCI) agrupado é a predefinição para criar tabelas no Azure Synapse Analytics. Os dados num CCI não são ordenados antes de serem comprimidos em segmentos columnstore. Ao criar um CCI com ORDER, os dados são ordenados antes de serem adicionados aos segmentos de índice e o desempenho das consultas pode ser melhorado. Veja Otimização do Desempenho com Índice Columnstore Agrupado Ordenado para obter detalhes.

Um CCI ordenado pode ser criado em colunas de quaisquer tipos de dados suportados no Azure Synapse Analytics, exceto nas colunas de cadeia.

Os utilizadores podem consultar column_store_order_ordinal coluna no sys.index_columns para as colunas em que uma tabela é ordenada e a sequência na ordenação.

Verifique a otimização do desempenho com o índice columnstore agrupado ordenado para obter detalhes.

Tipo de dados

Azure Synapse Analytics suporta os tipos de dados mais utilizados. Para compreender melhor os tipos de dados e como utilizá-los, veja Tipos de dados para tabelas no Azure Synapse Analytics.

Nota

Tal como SQL Server, existe um limite de 8060 bytes por linha. Isto pode tornar-se 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 violem o limite de bytes 8060 resultarão em códigos de erro 511 ou 611. Para obter mais informações, consulte o Guia de Arquitetura de Páginas e Extensões.

Para obter uma tabela de conversões de tipo de dados, veja a secção Conversões Implícitas de CAST e CONVERT (Transact-SQL). Para obter mais informações, veja Tipos e Funções de Dados de Data e Hora (Transact-SQL).

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

datetimeoffset [ ( n ) ]
O valor predefinido para n é 7.

datetime2 [ ( n ) ]
datetimeO mesmo que , exceto que pode especificar o número de segundos fracionários. O valor predefinido para n é 7.

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

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

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

time [ ( n ) ]
O valor predefinido para n é 7.

float [ ( n ) ]
Tipo de dados de número aproximado para utilização com dados numéricos de vírgula flutuante. Os dados de vírgula 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 utilizados para armazenar a mantissa da float notação científica in. n dita a precisão e o tamanho do armazenamento. Se n for especificado, tem de ser um valor entre 1 e 53. O valor predefinido de n é 53.

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

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

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

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

decimal [ ( precision [ , scale ] ) ] | numeric [ ( precision [ , scale ] ) ]
Armazena números de precisão e dimensionamento fixos.

precisão
O número total máximo de dígitos decimais que podem ser armazenados, tanto à esquerda como à direita da vírgula decimal. A precisão tem de ser um valor de 1 até à precisão máxima de 38. A precisão predefinida é 18.

dimensionamento
O número máximo de dígitos decimais que podem ser armazenados à direita da vírgula decimal. A escala tem de ser um valor de através da 0precisão. Só pode especificar o dimensionamento se for especificada precisão . A escala predefinida é 0 e assim 0<= escala<= precisão. 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 de número exato que utilizam dados inteiros. O armazenamento é apresentado na tabela seguinte.

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

bit
Um tipo de dados inteiro que pode assumir o valor de 1, 0ou "NULL. Azure Synapse Analytics otimiza o armazenamento de colunas de bits. Se existirem colunas de 8 ou menos bits numa tabela, as colunas são armazenadas como 1 byte. Se existirem colunas de 9 a 16 bits, as colunas são armazenadas como 2 bytes e assim sucessivamente.

nvarchar[ ( n | max ) ] -- max aplica-se apenas ao Azure Synapse Analytics.
Dados de carateres 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 superior ao número de carateres introduzido + 2 bytes. Os dados introduzidos podem ter zero carateres de comprimento.

nchar [ ( n ) ]
Dados de carateres Unicode de comprimento fixo com um comprimento de n carateres. n tem de ser um valor de 1 até 4000. O tamanho do armazenamento é duas vezes n bytes.

varchar[ ( n | max ) ] -- max aplica-se apenas ao Azure Synapse Analytics.
Dados de carateres não Unicode de comprimento variável com um comprimento de n bytes. n tem de ser um valor de 1 para 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 introduzidos + 2 bytes.

char [ ( n ) ]
Dados de carateres não Unicode de comprimento fixo com um comprimento de n bytes. n tem de ser um valor de 1 para 8000. O tamanho do armazenamento é n bytes. A predefinição para n é 1.

varbinary[ ( n | max ) ] -- max aplica-se apenas ao Azure Synapse Analytics.
Dados binários de comprimento variável. n pode ser um valor de 1 para 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 introduzidos + 2 bytes. O valor predefinido para n é 7.

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

uniqueidentifier
É um GUID de 16 bytes.

Permissões

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

  • CREATE TABLE permissão na base de dados
  • ALTER SCHEMA permissão no esquema que irá conter a tabela

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

  • ALTER ANY DATASPACE permissão

O início de sessão que cria uma tabela temporária local recebe CONTROL, INSERT, SELECTe UPDATE permissões na tabela.

Observações

Para obter limites mínimos e máximos, veja Azure Synapse Limites de capacidade do Analytics.

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

Cada tabela definida pelo utilizador é dividida em múltiplas tabelas mais pequenas que são armazenadas em localizações separadas chamadas distribuições. Azure Synapse Analytics utiliza 60 distribuições. No Sistema de Plataformas de Análise (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 existirem 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 agrupado, haverá um índice columnstore por partição, o que significa que terá 300 índices columnstore.

Recomendamos que utilize menos partições de tabela para garantir que cada índice columnstore tem linhas suficientes para tirar partido dos benefícios dos índices columnstore. Para obter mais informações, veja Partitioning tables in dedicated SQL pool and Indexes on dedicated SQL pool tables in Azure Synapse Analytics (Criar partições de tabelas no conjunto de SQL dedicado e Índices em tabelas de conjuntos de SQL dedicadas no Azure Synapse Analytics).

Tabela Rowstore (heap ou índice agrupado)

Uma tabela rowstore é uma tabela armazenada por ordem linha a linha. É uma área dinâmica ou índice agrupado. Azure Synapse Analytics cria todas as tabelas rowstore com compressão de página; este comportamento não é configurável pelo utilizador.

Tabela Columnstore (índice columnstore)

Uma tabela columnstore é uma tabela armazenada por ordem coluna a coluna. O índice columnstore é a tecnologia que gere os dados armazenados numa tabela columnstore. O índice columnstore em cluster 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, largue todos os índices existentes na tabela e crie um índice columnstore em cluster. Por exemplo, veja CREATE COLUMNSTORE INDEX (Transact-SQL).

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

Limitações e Restrições

  • Não pode definir uma restrição PREDEFINida numa coluna de distribuição.
  • O Nome da Tabela não pode ter mais de 100 carateres.

Partições

A coluna de partição não pode ter um agrupamento apenas 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 tem de ser convertido implicitamente no tipo de dados no partition_column_name, ocorre uma discrepância. O valor literal é apresentado através das vistas do sistema Azure Synapse Analytics, mas o valor convertido é utilizado para operações Transact-SQL.

Tabelas temporárias

As tabelas temporárias globais que começam por ## não são suportadas.

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

  • Só estão visíveis para a sessão atual. Azure Synapse Analytics os remove automaticamente no final da sessão. Para os remover explicitamente, utilize a instrução DROP TABLE.
  • Não é possível mudar o nome.
  • Não podem ter partições ou vistas.
  • As permissões não podem ser alteradas. GRANT, DENYe REVOKE as instruções não podem ser utilizadas com tabelas temporárias locais.
  • Os comandos da consola da base de dados estão bloqueados para tabelas temporárias.
  • Se for utilizada mais do que uma tabela temporária local num lote, cada uma tem de ter um nome exclusivo. Se várias sessões estiverem a executar o mesmo lote e a criar a mesma tabela temporária local, Azure Synapse Analytics anexa 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

Tem um bloqueio exclusivo na tabela. Utiliza um bloqueio partilhado nos objetos DATABASE, SCHEMA e SCHEMARESOLUTION.

Exemplos de colunas

A. Especificar um agrupamento de colunas

No exemplo seguinte, a tabela MyTable é criada com dois agrupamentos de colunas diferentes. Por predefinição, a coluna , mycolumn1tem o agrupamento predefinido Latin1_General_100_CI_AS_KS_WS. A coluna tem mycolumn2 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 PREDEFINida para uma coluna

O exemplo seguinte mostra a sintaxe para especificar um valor predefinido para uma coluna. A coluna colA tem uma restrição predefinida denominada constraint_colA e um valor predefinido 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 seguinte cria uma tabela temporária local com o nome #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 para a estrutura da tabela

D. Criar uma tabela com um índice columnstore agrupado

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

O índice columnstore agrupado não afeta a forma como os dados são distribuídos; os dados são sempre distribuídos por linha. O índice columnstore em cluster afeta a forma 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 agrupado ordenado

O exemplo seguinte mostra como criar um índice columnstore agrupado 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 de tabelas

F. Criar uma tabela de ROUND_ROBIN

O exemplo seguinte cria uma tabela ROUND_ROBIN com três colunas e sem partições. Os dados são distribuídos por todas as distribuições. A tabela é criada com um ÍNDICE COLUMNSTORE AGRUPADO, que proporciona um melhor desempenho e compressão de dados do que um índice agrupado em cluster 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 (pré-visualização)

O exemplo seguinte 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 agrupado, que proporciona um melhor desempenho e compressão de dados do que um índice agrupado 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 seguinte cria uma tabela replicada semelhante aos exemplos anteriores. As tabelas replicadas são copiadas na totalidade para cada nó de Computação. Com esta cópia em cada nó de Computação, o movimento de dados é reduzido para consultas. Este exemplo é criado com um ÍNDICE AGRUPADO, que proporciona uma melhor compressão de dados do que uma área dinâmica. Uma área dinâmica pode não conter linhas suficientes para obter uma boa compressão DE ÍNDICE COLUMNSTORE EM CLUSTER.

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 seguinte cria a mesma tabela, conforme mostrado no exemplo A, com a adição de partições INTERVALO À ESQUERDA na id coluna. 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 ordenados 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 tiver sido particionada INTERVALO PARA A DIREITA em vez de INTERVALO À ESQUERDA (predefinição), os dados serão ordenados 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 seguinte cria uma tabela particionada com uma partição. Não especifica nenhum valor de limite, o que resulta numa 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 criação de partições de datas

O exemplo seguinte cria uma nova tabela com o nome myTable, com criação de partições numa date coluna. Ao utilizar INTERVALO DIREITO e datas para os valores de limite, 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'  
      ))
  );  

Passos seguintes

Aplica-se a:Armazém no Microsoft Fabric

Cria uma nova tabela num Armazém no Microsoft Fabric.

Para obter mais informações, veja Criar tabelas no Armazém no Microsoft Fabric.

Nota

Para referência a Azure Synapse Analytics and Analytics Platform System (PDW), visite CREATE TABLE (Azure Synapse Analytics). Para SQL Server e SQL do Azure plataformas, visite CREATE TABLE e selecione a versão do produto pretendida na lista pendente de versões.

Convenções de sintaxe 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
    [ <column_constraint> ]

<data type> ::=
      datetime2 [ ( n ) ]  
    | date  
    | time [ ( n ) ]  
    | float [ ( n ) ]  
    | real [ ( n ) ]  
    | decimal [ ( precision [ , scale ] ) ]   
    | numeric [ ( precision [ , scale ] ) ]   
    | bigint  
    | int   
    | smallint  
    | bit  
    | varchar [ ( n ) ] 
    | char [ ( n ) ]  
    | varbinary [ ( n ) ] 
    | binary [ ( n ) ]  
    | uniqueidentifier  

Argumentos

database_name

O nome da base de dados que irá conter a nova tabela. A predefinição é a base de dados atual.

schema_name

O esquema da tabela. Especificar o esquema é opcional. Se estiver em branco, é utilizado o esquema predefinido.

table_name

O nome da nova tabela. Para criar uma tabela temporária local, preceda o nome da tabela com #.

column_name

O nome de uma coluna de tabela.

Opções de coluna

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

[ CONSTRAINTconstraint_name ] DEFAULTconstant_expression
Especifica o valor de coluna predefinido.

Argumento Explicação
constraint_name O nome opcional para a restrição. O nome da restrição é exclusivo na base de dados. O nome pode ser reutilizado noutras bases de dados.
constant_expression O valor predefinido da coluna. A expressão tem de 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.

Tipo de dados

O Microsoft Fabric suporta os tipos de dados mais utilizados.

Nota

Tal como SQL Server, existe um limite de 8060 bytes por linha. Isto pode tornar-se 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 violem o limite de bytes 8060 resultarão em códigos de erro 511 ou 611. Para obter mais informações, veja Pages and Extents Architecture Guide (Guia de Arquitetura de Páginas e Extensões).

Para obter uma tabela de conversões de tipo de dados, veja a secção Conversões Implícitas de CAST e CONVERT (Transact-SQL). Para obter mais informações, veja Tipos e Funções de Dados de Data e Hora (Transact-SQL).

A seguinte lista de tipos de dados suportados inclui os respetivos detalhes e bytes de armazenamento.

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

Nota

Não existe nenhuma precisão predefinida como outras plataformas SQL. Tem de fornecer o valor para precisão de 0 para 6.

n valor 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 com um máximo de 10 carateres para ano, mês e dia de acordo com o calendário Gregoriano. O tamanho de armazenamento é de 3 bytes. A data é armazenada como um número inteiro.

time ( n )
n tem de ser um valor de 0 para 6.

float [ ( n ) ]
Tipo de dados de número aproximado para utilização com dados numéricos de vírgula flutuante. Os dados de vírgula 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 utilizados para armazenar a mantissa do float na notação científica. n dita a precisão e o tamanho de armazenamento. Se n for especificado, tem de ser um valor entre 1 e 53. O valor predefinido de n é 53.

Nota

Não existe nenhuma precisão predefinida como outras plataformas SQL. Tem de fornecer o valor para precisão de 0 para 6.

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

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

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

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

decimal [ ( precision [ , scale ] ) ] | numeric [ ( precision [ , scale ] ) ]
Armazena números de precisão e dimensionamento fixos.

precisão
O número total máximo de dígitos decimais que podem ser armazenados, tanto à esquerda como à direita da vírgula decimal. A precisão tem de ser um valor de 1 até à precisão máxima de 38. A precisão predefinida é 18.

dimensionamento
O número máximo de dígitos decimais que podem ser armazenados à direita da vírgula decimal. A escala tem de ser um valor de através da 0precisão. Só pode especificar o dimensionamento se for especificada precisão . A escala predefinida é 0 e assim 0<= escala<= precisão. 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 de número exato que utilizam dados inteiros. O armazenamento é apresentado na tabela seguinte.

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

bit
Um tipo de dados inteiro que pode assumir o valor de 1, 0ou "NULL. Azure Synapse Analytics otimiza o armazenamento de colunas de bits. Se existirem colunas de 8 ou menos bits numa tabela, as colunas são armazenadas como 1 byte. Se existirem colunas de 9 a 16 bits, as colunas são armazenadas como 2 bytes e assim sucessivamente.

varchar [ ( n ) ] Variable-length, Unicode character data with a length of n bytes. n tem de ser um valor de 1 para 8000. O tamanho do armazenamento é o comprimento real dos dados introduzidos + 2 bytes. A predefinição para n é 1.

char [ ( n ) ]
Dados de carateres Unicode de comprimento fixo com um comprimento de n bytes. n tem de ser um valor de 1 para 8000. O tamanho do armazenamento é n bytes. A predefinição para n é 1.

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

uniqueidentifier
É um GUID de 16 bytes.

Permissões

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

Limitações e restrições

  • O nome da tabela não pode ter mais de 100 carateres.
  • Os nomes das tabelas no Armazém no Microsoft Fabric não podem incluir os carateres / ou \.
  • O agrupamento predefinido e apenas suportado no Armazém é Latin1_General_100_BIN2_UTF8.

Observações

Existe uma funcionalidade TSQL limitada no Warehouse. Para obter mais informações, veja TSQL Surface Area in Microsoft Fabric (Área do Surface TSQL no Microsoft Fabric).

Comportamento de bloqueio

Utiliza um bloqueio Schema-Modification na tabela, um bloqueio partilhado na BASE de Dados e um bloqueio de Schema-Stability no ESQUEMA.

Passos seguintes