CREATE TABLE (SQL Data Warehouse do Azure)CREATE TABLE (Azure SQL Data Warehouse)

APLICA-SE A: nãoSQL Server nãoBanco de Dados SQL do Azure simAzure Synapse Analytics (SQL DW) simParallel Data Warehouse APPLIES TO: noSQL Server noAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Cria uma nova tabela no SQL Data WarehouseSQL Data Warehouse ou no Parallel Data WarehouseParallel Data Warehouse.Creates a new table in SQL Data WarehouseSQL Data Warehouse or Parallel Data WarehouseParallel Data Warehouse.

Para entender as tabelas e como usá-las, confira Tabelas no SQL Data Warehouse.To understand tables and how to use them, see Tables in SQL Data Warehouse.

Observação

as discussões sobre o SQL Data Warehouse neste artigo aplicam-se ao SQL Data Warehouse e ao Parallel Data Warehouse, a menos que haja alguma indicação contrária.Discussions about SQL Data Warehouse in this article apply to both SQL Data Warehouse and Parallel Data Warehouse unless otherwise noted.

Ícone de link do artigo Convenções de sintaxe Transact-SQLArticle link icon Transact-SQL Syntax Conventions

SintaxeSyntax

-- 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  
    [ [ CONSTRAINT constraint_name ] DEFAULT constant_expression  ]
  
<table_option> ::=
    {
       CLUSTERED COLUMNSTORE INDEX --default for SQL Data Warehouse 
      | 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 = ROUND_ROBIN -- default for SQL Data Warehouse
      | 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 SQL Data Warehouse 
    | nchar [ ( n ) ]  
    | varchar [ ( n | max )  ] -- max applies only to SQL Data Warehouse  
    | char [ ( n ) ]  
    | varbinary [ ( n | max ) ] -- max applies only to SQL Data Warehouse  
    | binary [ ( n ) ]  
    | uniqueidentifier  

ArgumentosArguments

database_namedatabase_name
O nome do banco de dados que conterá a nova tabela.The name of the database that will contain the new table. O padrão é o banco de dados atual.The default is the current database.

schema_nameschema_name
O esquema da tabela.The schema for the table. A especificação de esquema é opcional.Specifying schema is optional. Se ele estiver vazio, o esquema padrão será usado.If blank, the default schema will be used.

table_nametable_name
O nome da nova tabela.The name of the new table. Para criar uma tabela temporária local, preceda o nome da tabela com #.To create a local temporary table, precede the table name with #. Para obter explicações e diretrizes sobre tabelas temporárias, confira Tabelas temporárias no SQL Data Warehouse do Azure.For explanations and guidance on temporary tables, see Temporary tables in Azure SQL Data Warehouse.

column_namecolumn_name
O nome de uma coluna da tabela.The name of a table column.

Opções de colunaColumn options

COLLATE Windows_collation_nameCOLLATE Windows_collation_name
Especifica a ordenação da expressão.Specifies the collation for the expression. A ordenação precisa ser uma das ordenações do Windows compatíveis com o SQL ServerSQL Server.The collation must be one of the Windows collations supported by SQL ServerSQL Server. Para obter uma lista de ordenações do Windows compatíveis com o SQL ServerSQL Server, confira Nome de ordenação do Windows (Transact-SQL)/).For a list of Windows collations supported by SQL ServerSQL Server, see Windows Collation Name (Transact-SQL)/).

NULL | NOT NULL
Especifica se os valores NULL são permitidos na coluna.Specifies whether NULL values are allowed in the column. O padrão é NULL.The default is NULL.

[ CONSTRAINT constraint_name ] DEFAULT constant_expression[ CONSTRAINT constraint_name ] DEFAULT constant_expression
Especifica o valor padrão da coluna.Specifies the default column value.

ArgumentoArgument ExplicaçãoExplanation
constraint_nameconstraint_name O nome opcional da restrição.The optional name for the constraint. O nome da restrição é exclusivo no banco de dados.The constraint name is unique within the database. O nome pode ser reutilizado em outros bancos de dados.The name can be reused in other databases.
constant_expressionconstant_expression O valor padrão da coluna.The default value for the column. A expressão precisa ser um valor literal ou uma constante.The expression must be a literal value or a constant. Por exemplo, estas expressões de constante são permitidas: 'CA', 4.For example, these constant expressions are allowed: 'CA', 4. Essas expressões constantes não são permitidas: 2+3, CURRENT_TIMESTAMP.These constant expressions aren't allowed: 2+3, CURRENT_TIMESTAMP.

Opções de estrutura da tabelaTable structure options

Para obter diretrizes de como escolher o tipo de tabela, confira Indexando tabelas no SQL Data Warehouse do Azure.For guidance on choosing the type of table, see Indexing tables in Azure SQL Data Warehouse.

CLUSTERED COLUMNSTORE INDEX

Armazena a tabela como um índice columnstore clusterizado.Stores the table as a clustered columnstore index. O índice columnstore clusterizado aplica-se a todos os dados da tabela.The clustered columnstore index applies to all of the table data. Esse comportamento é o padrão para SQL Data WarehouseSQL Data Warehouse.This behavior is the default for SQL Data WarehouseSQL Data Warehouse.

HEAP Armazena a tabela como um heap.HEAP Stores the table as a heap. Esse comportamento é o padrão para Parallel Data WarehouseParallel Data Warehouse.This behavior is the default for Parallel Data WarehouseParallel Data Warehouse.

CLUSTERED INDEX ( index_column_name [ ,...n ] )CLUSTERED INDEX ( index_column_name [ ,...n ] )
Armazena a tabela como um índice clusterizado com uma ou mais colunas de chave.Stores the table as a clustered index with one or more key columns. Esse comportamento armazena os dados por linha.This behavior stores the data by row. Use index_column_name para especificar o nome de uma ou mais colunas de chave no índice.Use index_column_name to specify the name of one or more key columns in the index. Para obter mais informações, confira Tabelas rowstore nos Comentários gerais.For more information, see Rowstore Tables in the General Remarks.

LOCATION = USER_DB Essa opção foi preterida.LOCATION = USER_DB This option is deprecated. Ela é aceita sintaticamente, mas não é mais necessária e não afeta mais o comportamento.It's syntactically accepted, but no longer required and no longer affects behavior.

Opções de distribuição da tabelaTable distribution options

Para entender como escolher o melhor método de distribuição e use tabelas distribuídas, confira Distribuindo tabelas no SQL Data Warehouse do Azure.To understand how to choose the best distribution method and use distributed tables, see Distributing tables in Azure SQL Data Warehouse.

DISTRIBUTION = HASH ( distribution_column_name ) Atribui cada linha a uma distribuição, efetuando hash no valor armazenado em distribution_column_name.DISTRIBUTION = HASH ( distribution_column_name ) Assigns each row to one distribution by hashing the value stored in distribution_column_name. O algoritmo é determinístico, ou seja, ele sempre efetua hash no mesmo valor para a mesma distribuição.The algorithm is deterministic, which means it always hashes the same value to the same distribution. 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.The distribution column should be defined as NOT NULL because all rows that have NULL are assigned to the same distribution.

DISTRIBUTION = ROUND_ROBIN Distribui as linhas uniformemente entre todas as distribuições de modo round robin.DISTRIBUTION = ROUND_ROBIN Distributes the rows evenly across all the distributions in a round-robin fashion. Esse comportamento é o padrão para SQL Data WarehouseSQL Data Warehouse.This behavior is the default for SQL Data WarehouseSQL Data Warehouse.

DISTRIBUTION = REPLICATE Armazena uma cópia da tabela em cada nó de computação.DISTRIBUTION = REPLICATE Stores one copy of the table on each Compute node. Para o SQL Data WarehouseSQL Data Warehouse, a tabela é armazenada em um banco de dados de distribuição em cada nó de computação.For SQL Data WarehouseSQL Data Warehouse the table is stored on a distribution database on each Compute node. Para o Parallel Data WarehouseParallel Data Warehouse, a tabela é armazenada em um grupo de arquivos do SQL ServerSQL Server que abrange o nó de computação.For Parallel Data WarehouseParallel Data Warehouse, the table is stored in a SQL ServerSQL Server filegroup that spans the Compute node. Esse comportamento é o padrão para Parallel Data WarehouseParallel Data Warehouse.This behavior is the default for Parallel Data WarehouseParallel Data Warehouse.

Opções de partição da tabelaTable partition options

Para obter diretrizes sobre o uso de partições de tabela, confira Particionando tabelas no SQL Data Warehouse.For guidance on using table partitions, see Partitioning tables in SQL Data Warehouse.

PARTITION ( partition_column_name RANGE [ LEFT | RIGHT ] FOR VALUES ( [ boundary_value [,...n] ] ))PARTITION ( partition_column_name RANGE [ LEFT | RIGHT ] FOR VALUES ( [ boundary_value [,...n] ] ))
Cria uma ou mais partições da tabela.Creates one or more table partitions. 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.These partitions are horizontal table slices that allow you to apply operations to subsets of rows regardless of whether the table is stored as a heap, clustered index, or clustered columnstore index. Ao contrário da coluna de distribuição, as partições da tabela não determinam a distribuição em que cada linha é armazenada.Unlike the distribution column, table partitions don't determine the distribution where each row is stored. As partições da tabela determinam como as linhas são agrupadas e armazenadas em cada distribuição.Instead, table partitions determine how the rows are grouped and stored within each distribution.

ArgumentoArgument ExplicaçãoExplanation
partition_column_namepartition_column_name Especifica a coluna que o SQL Data WarehouseSQL Data Warehouse usará para particionar as linhas.Specifies the column that SQL Data WarehouseSQL Data Warehouse will use to partition the rows. Esta coluna pode ser de qualquer tipo de dados.This column can be any data type. O SQL Data WarehouseSQL Data Warehouse classifica os valores de coluna de partição em ordem crescente.SQL Data WarehouseSQL Data Warehouse sorts the partition column values in ascending order. A ordenação do menor ao maior vai da LEFT para a RIGHT na especificação RANGE.The low-to-high ordering goes from LEFT to RIGHT in the RANGE specification.
RANGE LEFT Especifica que o valor de limite pertence à partição à esquerda (valores mais baixos).Specifies the boundary value belongs to the partition on the left (lower values). O padrão é LEFT.The default is LEFT.
RANGE RIGHT Especifica que o valor de limite pertence à partição à direita (valores mais baixos).Specifies the boundary value belongs to the partition on the right (higher values).
FOR VALUES ( boundary_value [,...n] )FOR VALUES ( boundary_value [,...n] ) Especifica os valores de limite para a partição.Specifies the boundary values for the partition. boundary_value é uma expressão de constante.boundary_value is a constant expression. Ele não pode ser NULL.It can't be NULL. Ele deve corresponder ou ser implicitamente conversível no tipo de dados de partition_column_name.It must either match or be implicitly convertible to the data type of 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_nameIt can't be truncated during implicit conversion so that the size and scale of the value don't match the data type of partition_column_name

Se você especificar a cláusula PARTITION, mas não especificar um valor de limite, o SQL Data WarehouseSQL Data Warehouse criará uma tabela particionada com uma partição.If you specify the PARTITION clause, but don't specify a boundary value, SQL Data WarehouseSQL Data Warehouse will create a partitioned table with one partition. Caso seja necessário, você pode dividir a tabela em duas partições posteriormente.If applicable, you can split the table into two partitions at a later time.

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.If you specify one boundary value, the resulting table has two partitions; one for the values lower than the boundary value and one for the values higher than the boundary value. 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.If you move a partition into a non-partitioned table, the non-partitioned table will receive the data, but will not have the partition boundaries in its metadata.

Confira Criar uma tabela particionada na seção de exemplos.See Create a partitioned table in the Examples section.

Opção de índice columnstore clusterizado ordenadoOrdered Clustered columnstore index option

O CCI (índice columnstore clusterizado) é o padrão para a criação de tabelas no SQL Data Warehouse do Azure.Clustered columnstore index (CCI) is the default for creating tables in Azure SQL Data Warehouse. Os dados em CCI não são classificados antes de serem compactados em segmentos columnstore.Data in CCI is not sorted before being compressed into columnstore segments. 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.When creating a CCI with ORDER, data is sorted before being added to index segments and query performance can be improved. Veja Ajuste de desempenho com índice columnstore clusterizado ordenado para obter detalhes.See Performance Tuning with Ordered Clustered Columnstore Index for details.

Um CCI pode ser criado em colunas de qualquer tipo de dados com suporte no SQL Data Warehouse do Azure, exceto por colunas de cadeia de caracteres.An ordered CCI can be created on columns of any data types supported in Azure SQL Data Warehouse except for string columns.

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.Users can query column_store_order_ordinal column in sys.index_columns for the column(s) a table is ordered on and the sequence in the ordering.

Confira Ajuste de desempenho com índice columnstore clusterizado ordenado para obter detalhes.Check Performance tuning with ordered clustered columnstore index for details.

Tipo de dadosData type

O SQL Data WarehouseSQL Data Warehouse é compatível com os tipos de dados mais usados.SQL Data WarehouseSQL Data Warehouse supports the most commonly used data types. Abaixo há uma lista dos tipos de dados compatíveis, juntamente com seus detalhes e bytes de armazenamento.Below is a list of the supported data types along with their details and storage bytes. Para entender melhor os tipos de dados e como usá-los, confira Tipos de dados para tabelas no SQL Data Warehouse.To better understand data types and how to use them, see Data types for tables in SQL Data Warehouse.

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).For a table of data type conversions, see the Implicit Conversions section, of CAST and CONVERT (Transact-SQL).

datetimeoffset [ ( n ) ]datetimeoffset [ ( n ) ]
O valor padrão de n é 7.The default value for n is 7.

datetime2 [ ( n ) ]datetime2 [ ( n ) ]
Igual a datetime, exceto que você pode especificar o número de segundos fracionários.Same as datetime, except that you can specify the number of fractional seconds. O valor padrão de n é 7.The default value for n is 7.

Valor de nn value PrecisãoPrecision EscalaScale
0 1919 00
1 2121 11
2 2222 22
3 2323 33
4 2424 44
5 2525 55
6 2626 66
7 2727 77

datetime
Armazena a data e a hora do dia com 19 a 23 caracteres de acordo com o calendário gregoriano.Stores date and time of day with 19 to 23 characters according to the Gregorian calendar. A data pode conter ano, mês e dia.The date can contain year, month, and day. A hora contém horas, minutos e segundos. Como opção, você pode exibir três dígitos para segundos fracionários.The time contains hour, minutes, seconds.As an option, you can display three digits for fractional seconds. O tamanho de armazenamento é de 8 bytes.The storage size is 8 bytes.

smalldatetime
Armazena uma data e uma hora.Stores a date and a time. O tamanho de armazenamento é de 4 bytes.Storage size is 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.Stores a date using a maximum of 10 characters for year, month, and day according to the Gregorian calendar. O tamanho do armazenamento é 3 bytes.The storage size is 3 bytes. A data é armazenada como um inteiro.Date is stored as an integer.

time [ ( n ) ]time [ ( n ) ]
O valor padrão de n é 7.The default value for n is 7.

float [ ( n ) ]float [ ( n ) ]
Tipo de dados do número aproximado para ser usado com os dados numéricos de ponto flutuante.Approximate number data type for use with floating point numeric data. 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.Floating point data is approximate, which means that not all values in the data type range can be represented exactly. n especifica o número de bits usados para armazenar a mantissa do float em notação científica.n specifies the number of bits used to store the mantissa of the float in scientific notation. n determina o tamanho do armazenamento e a precisão.n dictates the precision and storage size. Se n for especificado, ele precisará ser um valor entre 1 e 53.If n is specified, it must be a value between 1 and 53. O valor padrão de n é 53.The default value of n is 53.

Valor de nn value PrecisãoPrecision Tamanho de armazenamentoStorage size
1-241-24 7 dígitos7 digits 4 bytes4 bytes
25-5325-53 15 dígitos15 digits 8 bytes8 bytes

SQL Data WarehouseSQL Data Warehouse trata n como um dos dois valores possíveis.treats n as one of two possible values. Se 1<= n <= 24, n é tratado como 24.If 1<= n <= 24, n is treated as 24. Se 25 <= n <= 53, n é tratado como 53.If 25 <= n <= 53, n is treated as 53.

O tipo de dados SQL Data WarehouseSQL Data Warehouse float está em conformidade com o padrão ISO para todos os valores de n de 1 a 53.The SQL Data WarehouseSQL Data Warehouse float data type complies with the ISO standard for all values of n from 1 through 53. O sinônimo de precisão dupla é float(53).The synonym for double precision is float(53).

real [ ( n ) ]real [ ( n ) ]
A definição de real é igual à de float.The definition of real is the same as float. O sinônimo de ISO para real é float(24).The ISO synonym for real is float(24).

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

precisãoprecision
O número máximo total de dígitos decimais que podem ser armazenados, à esquerda e à direita do ponto decimal.The maximum total number of decimal digits that can be stored, both to the left and to the right of the decimal point. A precisão precisa ser um valor de 1 até a precisão máxima de 38.The precision must be a value from 1 through the maximum precision of 38. A precisão padrão é 18.The default precision is 18.

scalescale
O número máximo de dígitos decimais que podem ser armazenados à direita do ponto decimal.The maximum number of decimal digits that can be stored to the right of the decimal point. Scale precisa ser um valor de 0 até precision.Scale must be a value from 0 through precision. Você só poderá especificar scale se precision for especificado.You can only specify scale if precision is specified. A escala padrão é 0, assim, 0 <= scale <= precision.The default scale is 0 and so 0 <= scale <= precision. Os tamanhos máximos de armazenamento variam, com base na precisão.Maximum storage sizes vary, based on the precision.

PrecisãoPrecision Bytes de armazenamentoStorage bytes
1-91-9 55
10–1910-19 99
20–2820-28 1313
29-3829-38 1717

money | smallmoney
Tipos de dados que representam valores de moeda.Data types that represent currency values.

Tipo de DadosData Type Bytes de armazenamentoStorage bytes
money 88
smallmoney 44

bigint | int | smallint | tinyint
Tipos de dados numéricos exatos que usam dados inteiros.Exact-number data types that use integer data. O armazenamento é mostrado na tabela a seguir.The storage is shown in the following table.

Tipo de DadosData Type Bytes de armazenamentoStorage bytes
bigint 88
int 44
smallint 22
tinyint 11

bit
Um tipo de dados Integer que pode ter o valor 1, 0 ou NULL.An integer data type that can take the value of 1, 0, or `NULL. O SQL Data WarehouseSQL Data Warehouse otimiza o armazenamento de colunas de bit.SQL Data WarehouseSQL Data Warehouse optimizes storage of bit columns. Se houver 8 ou menos colunas de bit em uma tabela, as colunas serão armazenadas como 1 byte.If there are 8 or fewer bit columns in a table, the columns are stored as 1 byte. Se houver colunas de 9 a 16 bits, as colunas serão armazenadas como 2 bytes e assim por diante.If there are from 9-16 bit columns, the columns are stored as 2 bytes, and so on.

nvarchar [ ( n | max ) ] – max aplica-se somente ao SQL Data WarehouseSQL Data Warehouse.nvarchar [ ( n | max ) ] -- max applies only to SQL Data WarehouseSQL Data Warehouse.
Dados de caracteres Unicode de comprimento variável.Variable-length Unicode character data. n pode ser um valor de 1 a 4000.n can be a value from 1 through 4000. max indica que o tamanho de armazenamento máximo é 2^31-1 bytes (2 GB).max indicates that the maximum storage size is 2^31-1 bytes (2 GB). O tamanho do armazenamento, em bytes, é duas vezes o número de caracteres inseridos + 2 bytes.Storage size in bytes is two times the number of characters entered + 2 bytes. Os dados digitados podem ter zero caracteres de comprimento.The data entered can be zero characters in length.

nchar [ ( n ) ]nchar [ ( n ) ]
Dados de caractere Unicode de comprimento fixo com um tamanho de n caracteres.Fixed-length Unicode character data with a length of n characters. n precisa ser um valor de 1 a 4000.n must be a value from 1 through 4000. O tamanho do armazenamento é duas vezes n bytes.The storage size is two times n bytes.

varchar [ ( n | max ) ] – max aplica-se somente ao SQL Data WarehouseSQL Data Warehouse.varchar [ ( n | max ) ] -- max applies only to SQL Data WarehouseSQL Data Warehouse.
Dados de caractere não Unicode de comprimento variável com um tamanho de n bytes.Variable-length, non-Unicode character data with a length of n bytes. n precisa ser um valor de 1 a 8000.n must be a value from 1 to 8000. max indica que o tamanho máximo do armazenamento é de 2^31-1 bytes (2 GB). O tamanho do armazenamento é o comprimento real dos dados inseridos + 2 bytes.max indicates that the maximum storage size is 2^31-1 bytes (2 GB).The storage size is the actual length of data entered + 2 bytes.

char [ ( n ) ]char [ ( n ) ]
Dados de caractere não Unicode de comprimento fixo com um tamanho de n bytes.Fixed-length, non-Unicode character data with a length of n bytes. n precisa ser um valor de 1 a 8000.n must be a value from 1 to 8000. O tamanho do armazenamento é n bytes.The storage size is n bytes. O padrão para n é 1.The default for n is 1.

varbinary [ ( n | max ) ] – max aplica-se somente ao SQL Data WarehouseSQL Data Warehouse.varbinary [ ( n | max ) ] -- max applies only to SQL Data WarehouseSQL Data Warehouse.
Dados binários de comprimento variável.Variable-length binary data. n pode ser um valor de 1 a 8000.n can be a value from 1 to 8000. max indica que o tamanho de armazenamento máximo é 2^31-1 bytes (2 GB).max indicates that the maximum storage size is 2^31-1 bytes (2 GB). O tamanho de armazenamento é o comprimento real dos dados inseridos + 2 bytes.The storage size is the actual length of data entered + 2 bytes. O valor padrão de n é 7.The default value for n is 7.

binary [ ( n ) ]binary [ ( n ) ]
Dados binários de comprimento fixo com um tamanho de n bytes.Fixed-length binary data with a length of n bytes. n pode ser um valor de 1 a 8000.n can be a value from 1 to 8000. O tamanho do armazenamento é n bytes.The storage size is n bytes. O valor padrão de n é 7.The default value for n is 7.

uniqueidentifier
É um GUID de 16 bytes.Is a 16-byte GUID.

PermissõesPermissions

A criação de uma tabela requer permissão na função de banco de dados fixa db_ddladmin ou:Creating a table requires permission in the db_ddladmin fixed database role, or:

  • Permissão CREATE TABLE no banco de dadosCREATE TABLE permission on the database
  • Permissão ALTER SCHEMA no esquema que conterá a tabela.ALTER SCHEMA permission on the schema that will contain the table.

A criação de uma tabela particionada requer permissão na função de banco de dados fixa db_ddladmin ouCreating a partitioned table requires permission in the db_ddladmin fixed database role, or

  • Permissão ALTER ANY DATASPACEALTER ANY DATASPACE permission

O logon que cria uma tabela temporária local recebe as permissões CONTROL, INSERT, SELECT e UPDATE na tabela.The login that creates a local temporary table receives CONTROL, INSERT, SELECT, and UPDATE permissions on the table.

Comentários geraisGeneral Remarks

Para saber os limites mínimo e máximo, confira Limites de capacidade do SQL Data Warehouse.For minimum and maximum limits, see SQL Data Warehouse capacity limits.

Determinar o número de partições da tabelaDetermining the number of table partitions

Cada tabela definida pelo usuário é dividida em várias tabelas menores que são armazenadas em locais separados chamados distribuições.Each user-defined table is divided into multiple smaller tables that are stored in separate locations called distributions. O SQL Data WarehouseSQL Data Warehouse usa 60 distribuições.SQL Data WarehouseSQL Data Warehouse uses 60 distributions. No Parallel Data WarehouseParallel Data Warehouse, o número de distribuições depende do número de nós de computação.In Parallel Data WarehouseParallel Data Warehouse, the number of distributions depends on the number of Compute nodes.

Cada distribuição contém todas as partições da tabela.Each distribution contains all table partitions. 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).For example, if there are 60 distributions and four table partitions plus one empty partition, there will be 300 partitions (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.If the table is a clustered columnstore index, there will be one columnstore index per partition, which means you'll have 300 columnstore indexes.

É 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.We recommend using fewer table partitions to ensure each columnstore index has enough rows to take advantage of the benefits of columnstore indexes. Confira mais informações em Tabelas de partição no SQL Data Warehouse e Tabelas de indexação no SQL Data WarehouseFor more information, see Partitioning tables in SQL Data Warehouse and Indexing tables in SQL Data Warehouse

Tabela rowstore (índice de heap ou clusterizado)Rowstore table (heap or clustered index)

Uma tabela rowstore é uma tabela armazenada em ordem de linha por linha.A rowstore table is a table stored in row-by-row order. É um índice de heap ou clusterizado.It's a heap or clustered index. O SQL Data WarehouseSQL Data Warehouse cria todas as tabelas rowstore com compactação de página; esse comportamento não é configurável pelo usuário.SQL Data WarehouseSQL Data Warehouse creates all rowstore tables with page compression; this behavior isn't user-configurable.

Tabela columnstore (índice columnstore)Columnstore table (columnstore index)

Uma tabela columnstore é uma tabela armazenada em ordem de coluna por coluna.A columnstore table is a table stored in column-by-column order. O índice columnstore é a tecnologia que gerencia os dados armazenados em uma tabela columnstore.The columnstore index is the technology that manages data stored in a columnstore table. O índice columnstore clusterizado não afeta como os dados são distribuídos, mas afeta como os dados são armazenados dentro de cada distribuição.The clustered columnstore index doesn't affect how data are distributed, rather, it affects how the data are stored within each distribution.

Para converter uma tabela rowstore em uma tabela columnstore, remova todos os índices existentes na tabela e crie um índice columnstore clusterizado.To change a rowstore table to a columnstore table, drop all existing indexes on the table and create a clustered columnstore index. Para obter um exemplo, confira CREATE COLUMNSTORE INDEX (Transact-SQL).For an example, see CREATE COLUMNSTORE INDEX (Transact-SQL).

Para obter mais informações, consulte estes tópicos:For more information, see these articles:

Limitações e RestriçõesLimitations and Restrictions

Não é possível definir uma restrição DEFAULT em uma coluna de distribuição.You can't define a DEFAULT constraint on a distribution column.

PartiçõesPartitions

Ao usar partições, a coluna de partição não pode ter uma ordenação somente Unicode.When using partitions, the partition column can't have a Unicode-only collation. Por exemplo, a instrução a seguir falhará.For example, the following statement fails.

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.If boundary_value is a literal value that must be implicitly converted to the data type in partition_column_name, a discrepancy will occur. O valor literal é exibido por meio das exibições do sistema do SQL Data WarehouseSQL Data Warehouse, mas o valor convertido é usado para operações do Transact-SQLTransact-SQL.The literal value is displayed through the SQL Data WarehouseSQL Data Warehouse system views, but the converted value is used for Transact-SQLTransact-SQL operations.

Tabelas temporáriasTemporary tables

Não há compatibilidade com tabelas temporárias globais que começam com ##.Global temporary tables that begin with ## aren't supported.

As tabelas temporárias locais têm as seguintes limitações e restrições:Local temporary tables have the following limitations and restrictions:

  • Eles são visíveis apenas para a sessão atual.They're visible only to the current session. O SQL Data WarehouseSQL Data Warehouse descarta-as automaticamente no final da sessão.SQL Data WarehouseSQL Data Warehouse drops them automatically at the end of the session. Para removê-las explicitamente, use a instrução DROP TABLE.To drop them explicitly, use the DROP TABLE statement.
  • Não podem ser renomeados.They can't be renamed.
  • Não podem ter partições nem exibições.They can't have partitions or views.
  • Suas permissões não podem ser alteradas.Their permissions can't be changed. As instruções GRANT, DENY e REVOKE não podem ser usadas com tabelas temporárias locais.GRANT, DENY, and REVOKE statements can't be used with local temporary tables.
  • Os comandos do console do banco de dados são bloqueados para tabelas temporárias.Database console commands are blocked for temporary tables.
  • Se mais de uma tabela temporária local for usada em um lote, cada uma precisará ter um nome exclusivo.If more than one local temporary table is used within a batch, each must have a unique name. Se várias sessões estiverem executando o mesmo lote e criando a mesma tabela temporária local, o SQL Data WarehouseSQL Data Warehouse acrescentará internamente um sufixo numérico ao nome de cada tabela temporária local para manter um nome exclusivo para cada uma delas.If multiple sessions are running the same batch and creating the same local temporary table, SQL Data WarehouseSQL Data Warehouse internally appends a numeric suffix to the local temporary table name to maintain a unique name for each local temporary table.

Comportamento de bloqueioLocking behavior

Usa um bloqueio exclusivo na tabela.Takes an exclusive lock on the table. Usa um bloqueio compartilhado nos objetos de banco de dados DATABASE, SCHEMA e SCHEMARESOLUTION.Takes a shared lock on the DATABASE, SCHEMA, and SCHEMARESOLUTION objects.

Exemplos de colunasExamples for columns

A.A. Especificar uma ordenação de colunaSpecify a column collation

No exemplo a seguir, a tabela MyTable é criada com duas ordenações de coluna diferentes.In the following example, the table MyTable is created with two different column collations. Por padrão, a coluna mycolumn1, tem a ordenação padrão Latin1_General_100_CI_AS_KS_WS.By default, the column, mycolumn1, has the default collation Latin1_General_100_CI_AS_KS_WS. A coluna mycolumn2 tem a ordenação Frisian_100_CS_AS.The column, mycolumn2 has the collation Frisian_100_CS_AS.

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

B.B. Especificar uma restrição DEFAULT para uma colunaSpecify a DEFAULT constraint for a column

O exemplo a seguir mostra a sintaxe para especificar um valor padrão para uma coluna.The following example shows the syntax to specify a default value for a column. A coluna colA tem uma restrição padrão chamada constraint_colA e o valor padrão 0.The colA column has a default constraint named constraint_colA and a default value of 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áriasExamples for temporary tables

C.C. Criar uma tabela temporária localCreate a local temporary table

O exemplo a seguir cria uma tabela temporária local denominada #myTable.The following example creates a local temporary table named #myTable. A tabela é especificada com um nome de três partes, que começa com um #.The table is specified with a three-part name, which starts with a #.

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 tabelaExamples for table structure

D.D. Criar uma tabela com um índice columnstore clusterizadoCreate a table with a clustered columnstore index

O exemplo a seguir cria uma tabela distribuída com um índice columnstore clusterizado.The following example creates a distributed table with a clustered columnstore index. Cada distribuição será armazenada como um columnstore.Each distribution will be stored as a columnstore.

O índice columnstore clusterizado não afeta como os dados são distribuídos. Os dados sempre são distribuídos por linha.The clustered columnstore index doesn't affect how the data is distributed; data is always distributed by row. O índice columnstore clusterizado afeta como os dados são armazenados dentro de cada distribuição.The clustered columnstore index affects how the data is stored within each distribution.

  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.E. Criar um índice columnstore clusterizado ordenadoCreate an ordered clustered columnstore index

O exemplo a seguir mostra como criar um índice columnstore clusterizado ordenado.The following example shows how to create an ordered clustered columnstore index. O índice é ordenado em SHIPDATE.The index is ordered on SHIPDATE.

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

Exemplos de distribuição da tabelaExamples for table distribution

F.F. Criar uma tabela ROUND_ROBINCreate a ROUND_ROBIN table

O exemplo a seguir cria uma tabela ROUND_ROBIN com três colunas e sem partições.The following example creates a ROUND_ROBIN table with three columns and without partitions. Os dados são difundidos entre todas as distribuições.The data is spread across all distributions. 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.The table is created with a CLUSTERED COLUMNSTORE INDEX, which gives better performance and data compression than a heap or rowstore clustered index.

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

G.G. Criar uma tabela distribuída por hashCreate a hash-distributed table

O exemplo a seguir cria a mesma tabela que o exemplo anterior.The following example creates the same table as the previous example. No entanto, para essa tabela, as linhas são distribuídas (na coluna id) em vez de serem difundidas aleatoriamente como em uma tabela ROUND_ROBIN.However, for this table, rows are distributed (on the id column) instead of randomly spread like a ROUND_ROBIN table. 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.The table is created with a CLUSTERED COLUMNSTORE INDEX, which gives better performance and data compression than a heap or rowstore clustered index.

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

H.H. Criar uma tabela replicadaCreate a replicated table

O exemplo a seguir cria uma tabela replicada semelhante à dos exemplos anteriores.The following example creates a replicated table similar to the previous examples. As tabelas replicadas são copiadas por completo para cada nó de computação.Replicated tables are copied in full to each Compute node. Com essa cópia em cada nó de computação, a movimentação de dados é reduzida para as consultas.With this copy on each Compute node, data movement is reduced for queries. Este exemplo é criado com um ÍNDICE CLUSTERIZADO, que fornece melhor compactação de dados que um heap.This example is created with a CLUSTERED INDEX, which gives better data compression than a heap. Um heap pode não conter linhas suficientes para obter uma boa compactação de ÍNDICE COLUMNSTORE CLUSTERIZADO.A heap may not contain enough rows to achieve good CLUSTERED COLUMNSTORE INDEX compression.

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

Exemplos de partições de tabelaExamples for table partitions

I.I. Criar uma tabela particionadaCreate a partitioned table

O exemplo a seguir cria a mesma tabela, conforme é mostrado no exemplo A, com a adição do particionamento RANGE LEFT na coluna id.The following example creates the same table as shown in example A, with the addition of RANGE LEFT partitioning on the id column. Ele especifica quatro valores de limite de partição, o que resulta em cinco partições.It specifies four partition boundary values, which results in five partitions.

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:In this example, data will be sorted into the following partitions:

  • Partição 1: col <= 10Partition 1: col <= 10
  • Partição 2: 10 < col <= 20Partition 2: 10 < col <= 20
  • Partição 3: 20 < col <= 30Partition 3: 20 < col <= 30
  • Partição 4: 30 < col <= 40Partition 4: 30 < col <= 40
  • Partição 5: 40 < colPartition 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:If this same table was partitioned RANGE RIGHT instead of RANGE LEFT (default), the data will be sorted into the following partitions:

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

J.J. Criar uma tabela particionada com uma partiçãoCreate a partitioned table with one partition

O exemplo a seguir cria uma tabela particionada com uma partição.The following example creates a partitioned table with one partition. Ele não especifica nenhum valor de limite, o que resulta em uma partição.It doesn't specify any boundary value, which results in one partition.

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

K.K. Criar uma tabela com particionamento de dataCreate a table with date partitioning

O exemplo a seguir cria uma nova tabela nomeada myTable, com o particionamento em uma coluna date.The following example creates a new table named myTable, with partitioning on a date column. Usando datas e RANGE RIGHT para os valores de limite, ele coloca um mês de dados em cada partição.By using RANGE RIGHT and dates for the boundary values, it puts a month of data in each partition.

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

Confira tambémSee also

CREATE TABLE AS SELECT (SQL Data Warehouse do Azure) CREATE TABLE AS SELECT (Azure SQL Data Warehouse)
DROP TABLE (Transact-SQL) DROP TABLE (Transact-SQL)
ALTER TABLE (Transact-SQL) ALTER TABLE (Transact-SQL)
sys.index_columns (Transact-SQL)sys.index_columns (Transact-SQL)