CREATE TABLE
Aplica-se a: Azure Synapse Analytics Analytics Platform System (PDW)
CREATE TABLE (Azure Synapse Analytics)
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 banco de dados SQL no Microsoft Fabric, consulte CREATE TABLE. 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
COLLATE
Windows_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 agrupamentos do Windows compatíveis com o SQL Server, consulte Nome do agrupamento do Windows (Transact-SQL)).
NULL
| NOT NULL
Especifica se os valores NULL
são permitidos na coluna. O padrão é NULL
.
[ CONSTRAINT
constraint_name ] DEFAULT
constant_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, consulte Tabelas de repositório de linhas.
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 gerar scripts para criar tabelas MCD SSMS versão 19 e versões posteriores.
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_name RANGE
[ 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 usa 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. |
Para obter um exemplo, consulte Criar uma tabela particionada.
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. Para obter mais informações sobre índices columnstore clusterizados ordenados no Azure Synapse Analytics, consulte Ajuste de desempenho com o índice columnstore clusterizado ordenado.
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 column_store_order_ordinal
a coluna ou sys.index_columns
colunas em que uma tabela está ordenada e 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, consulte 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 float do Azure Synapse Analytics está em conformidade com o padrão ISO para todos os valores de n de 1
até .53
O sinónimo de dupla precisão é float(53).
real
[ ( n ) ]
A definição de real é igual à de float. O sinônimo ISO de 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 total máximo de dígitos decimais que podem ser armazenados, em ambos os lados da vírgula 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
) ] 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. O max
comprimento se aplica somente ao Azure Synapse Analytics.
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
[ ( nmax
| ) ] Dados de caracteres não Unicode de comprimento variável com um comprimento 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. O max
comprimento se aplica somente ao Azure Synapse Analytics.
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
) ] 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. O max
comprimento se aplica somente ao Azure Synapse Analytics.
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 ALTER SCHEMA
no esquema da 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 obter os limites mínimos e máximos no Azure Synapse Analytics, consulte 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 no Azure Synapse Analytics, consulte Particionamento de tabelas no pool de SQL dedicado e Índices em tabelas de pool de SQL dedicado 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:
- Novidades nos índices columnstore
- Tabelas de indexação no Azure Synapse Analytics
- Visão geral: índices columnstore
Limitaçõ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
eREVOKE
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 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 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'
))
);
Conteúdo relacionado
Aplica-se a: Depósito no Microsoft Fabric
CREATE TABLE (Data Warehouse do 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 banco de dados SQL no Microsoft Fabric, consulte CREATE TABLE. Para plataformas SQL Server e SQL do Azure, visite CREATE TABLE e selecione a versão do produto desejada na lista suspensa de versão. Para referência ao Azure Synapse Analytics e ao PDW (Analytics Platform System), visite CREATE TABLE (Azure Synapse Analytics).
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 | MAX ) ]
| char [ ( n ) ]
| varbinary [ ( n | MAX ) ]
| 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. Para obter mais informações, consulte Tipos de dados no Microsoft Fabric.
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, consulte 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 float do Azure Synapse Analytics está em conformidade com o padrão ISO para todos os valores de n de 1
até .53
O sinónimo de dupla precisão é float(53).
real
[ ( n ) ]
A definição de real é igual à de float. O sinônimo ISO de 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 total máximo de dígitos decimais que podem ser armazenados, em ambos os lados da vírgula 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 | MAX
) ] 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
. A varchar(MAX)
coluna pode armazenar até 1 MB de texto no Warehouse.
Observação
varchar(MAX)
está em versão prévia no Warehouse. Para obter mais informações, consulte Tipos de dados no Microsoft Fabric.
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 | MAX
) ] 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.
A varbinary(MAX)
coluna pode armazenar até 1 MB de dados no Warehouse.
Observação
varbinary(MAX)
está em versão prévia no Warehouse. Para obter mais informações, consulte Tipos de dados no Microsoft Fabric.
uniqueidentifier
É um GUID de 16 bytes.
Permissões
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 do Fabric.
Limitações
- Os nomes de tabela 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.
. - Os nomes das colunas não podem ter mais de 128 caracteres.
- As tabelas têm no máximo 1.024 colunas por tabela.
- O agrupamento padrão com suporte no Warehouse é
Latin1_General_100_BIN2_UTF8
. Você também pode criar depósitos com ordenação CI (que não diferencia maiúsculas de minúsculas) - Latin1_General_100_CI_AS_KS_WS_SC_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.