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

SE APLICA A: noSQL Server noAzure SQL Database síAzure Synapse Analytics (SQL DW) síAlmacenamiento de datos paralelos APPLIES TO: noSQL Server noAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Crea una tabla en Almacenamiento de datos SQLSQL Data Warehouse o Almacenamiento de datos paralelosParallel Data Warehouse.Creates a new table in Almacenamiento de datos SQLSQL Data Warehouse or Almacenamiento de datos paralelosParallel Data Warehouse.

Para entender las tablas y cómo usarlas, vea Introducción al diseño de tablas en Azure SQL Data Warehouse.To understand tables and how to use them, see Tables in SQL Data Warehouse.

Nota

En este artículo, las descripciones de SQL Data Warehouse se aplican tanto a SQL Data Warehouse como a Almacenamiento de datos paralelos, a menos que se indique lo contrario.Discussions about SQL Data Warehouse in this article apply to both SQL Data Warehouse and Parallel Data Warehouse unless otherwise noted.

Icono de vínculo de artículo Convenciones de sintaxis de Transact-SQLArticle link icon Transact-SQL Syntax Conventions

SintaxisSyntax

-- 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
Nombre de la base de datos que contendrá la nueva tabla.The name of the database that will contain the new table. El valor predeterminado es la base de datos actual.The default is the current database.

schema_nameschema_name
El esquema para la tabla.The schema for the table. La especificación de esquema es opcional.Specifying schema is optional. Si se deja vacío, se usará el esquema predeterminado.If blank, the default schema will be used.

table_nametable_name
Nombre de la nueva tabla.The name of the new table. Para crear una tabla temporal local, anteponga # al nombre de tabla.To create a local temporary table, precede the table name with #. Para obtener instrucciones y explicaciones sobre las tablas temporales, vea Tablas temporales en SQL Data Warehouse.For explanations and guidance on temporary tables, see Temporary tables in Azure SQL Data Warehouse.

column_namecolumn_name
El nombre de una columna de la tabla.The name of a table column.

Opciones de columnaColumn options

COLLATE Windows_collation_nameCOLLATE Windows_collation_name
Especifica la intercalación para la expresión.Specifies the collation for the expression. La intercalación debe ser una de las intercalaciones de Windows que SQL ServerSQL Server admite.The collation must be one of the Windows collations supported by SQL ServerSQL Server. Para obtener una lista de las intercalaciones de Windows que admite SQL ServerSQL Server, vea Nombre de intercalación de Windows (Transact-SQL)/).For a list of Windows collations supported by SQL ServerSQL Server, see Windows Collation Name (Transact-SQL)/).

NULL | NOT NULL
Especifica si se permiten valores NULL en la columna.Specifies whether NULL values are allowed in the column. El valor predeterminado es NULL.The default is NULL.

[ CONSTRAINT constraint_name ] DEFAULT constant_expression[ CONSTRAINT constraint_name ] DEFAULT constant_expression
Especifica el valor de columna predeterminado.Specifies the default column value.

ArgumentoArgument ExplicaciónExplanation
constraint_nameconstraint_name El nombre opcional para la restricción.The optional name for the constraint. El nombre de la restricción es único dentro de la base de datos.The constraint name is unique within the database. El nombre se puede volver a usar en otras bases de datos.The name can be reused in other databases.
constant_expressionconstant_expression El valor predeterminado de la columna.The default value for the column. La expresión debe ser un valor literal o una constante.The expression must be a literal value or a constant. Por ejemplo, se permiten estas expresiones constantes: 'CA', 4.For example, these constant expressions are allowed: 'CA', 4. Estas expresiones constantes no se permiten: 2+3, CURRENT_TIMESTAMP.These constant expressions aren't allowed: 2+3, CURRENT_TIMESTAMP.

Opciones de estructura de tablaTable structure options

Para obtener instrucciones sobre cómo elegir el tipo de tabla, vea Indexación de tablas en SQL Data Warehouse.For guidance on choosing the type of table, see Indexing tables in Azure SQL Data Warehouse.

CLUSTERED COLUMNSTORE INDEX

Almacena la tabla como un índice de almacén de columnas en clúster.Stores the table as a clustered columnstore index. El índice de almacén de columnas en clúster se aplica a todos los datos de tabla.The clustered columnstore index applies to all of the table data. Este es el comportamiento predeterminado para Almacenamiento de datos SQLSQL Data Warehouse.This behavior is the default for Almacenamiento de datos SQLSQL Data Warehouse.

HEAP Almacena la tabla como un montón.HEAP Stores the table as a heap. Este es el comportamiento predeterminado para Almacenamiento de datos paralelosParallel Data Warehouse.This behavior is the default for Almacenamiento de datos paralelosParallel Data Warehouse.

CLUSTERED INDEX ( index_column_name [ ,...n ] )CLUSTERED INDEX ( index_column_name [ ,...n ] )
Almacena la tabla como un índice agrupado con una o varias columnas de clave.Stores the table as a clustered index with one or more key columns. Este comportamiento almacena los datos por fila.This behavior stores the data by row. Use index_column_name para especificar el nombre de una o varias columnas de clave en el índice.Use index_column_name to specify the name of one or more key columns in the index. Para obtener más información, vea Tablas de almacén de filas en la sección Comentarios generales.For more information, see Rowstore Tables in the General Remarks.

LOCATION = USER_DB Esta opción está en desuso.LOCATION = USER_DB This option is deprecated. Se acepta sintácticamente, pero ya no es necesaria y no afecta al comportamiento.It's syntactically accepted, but no longer required and no longer affects behavior.

Opciones de distribución de tablaTable distribution options

Para entender cómo elegir el mejor método de distribución y usar tablas distribuidas, vea Instrucciones de diseño para las tablas distribuidas - Azure SQL Data Warehouse.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) Asigna cada fila a una distribución aplicando un algoritmo hash al valor almacenado en distribution_column_name.DISTRIBUTION = HASH ( distribution_column_name ) Assigns each row to one distribution by hashing the value stored in distribution_column_name. El algoritmo es determinista, lo que significa que siempre se aplica el algoritmo hash al mismo valor para la misma distribución.The algorithm is deterministic, which means it always hashes the same value to the same distribution. La columna de distribución se debe definir como NOT NULL porque todas las filas que tengan NULL se asignan a la misma distribución.The distribution column should be defined as NOT NULL because all rows that have NULL are assigned to the same distribution.

DISTRIBUTION = ROUND_ROBIN Distribuye uniformemente las filas entre todas las distribuciones de un modo Round Robin.DISTRIBUTION = ROUND_ROBIN Distributes the rows evenly across all the distributions in a round-robin fashion. Este es el comportamiento predeterminado para Almacenamiento de datos SQLSQL Data Warehouse.This behavior is the default for Almacenamiento de datos SQLSQL Data Warehouse.

DISTRIBUTION = REPLICATE Almacena una copia de la tabla en cada nodo de ejecución.DISTRIBUTION = REPLICATE Stores one copy of the table on each Compute node. Para Almacenamiento de datos SQLSQL Data Warehouse, la tabla se almacena en una base de datos de distribución en cada nodo de ejecución.For Almacenamiento de datos SQLSQL Data Warehouse the table is stored on a distribution database on each Compute node. Para Almacenamiento de datos paralelosParallel Data Warehouse, la tabla se almacena en un grupo de archivos de SQL ServerSQL Server que abarca el nodo de ejecución.For Almacenamiento de datos paralelosParallel Data Warehouse, the table is stored in a SQL ServerSQL Server filegroup that spans the Compute node. Este es el comportamiento predeterminado para Almacenamiento de datos paralelosParallel Data Warehouse.This behavior is the default for Almacenamiento de datos paralelosParallel Data Warehouse.

Opciones de partición de tablaTable partition options

Para obtener instrucciones sobre cómo usar las particiones de tabla, vea Creación de particiones de tablas en 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] ] ))
Crea una o varias particiones de tabla.Creates one or more table partitions. Estas particiones son segmentos de tabla horizontales que permiten aplicar operaciones a subconjuntos de filas, independientemente de si la tabla se almacena como un montón, índice agrupado o índice de almacén de columnas en clúster.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. A diferencia de la columna de distribución, las particiones de tabla no determinan la distribución donde se almacena cada fila.Unlike the distribution column, table partitions don't determine the distribution where each row is stored. En su lugar, las particiones de tabla determinan cómo se agrupan las filas y se almacenan dentro de cada distribución.Instead, table partitions determine how the rows are grouped and stored within each distribution.

ArgumentoArgument ExplicaciónExplanation
partition_column_namepartition_column_name Especifica la columna que va a usar Almacenamiento de datos SQLSQL Data Warehouse para crear particiones de las filas.Specifies the column that Almacenamiento de datos SQLSQL Data Warehouse will use to partition the rows. Esta columna puede ser de cualquier tipo de datos.This column can be any data type. Almacenamiento de datos SQLSQL Data Warehouse ordena los valores de columna de partición en orden ascendente.sorts the partition column values in ascending order. El orden de bajo a alto va de LEFT a RIGHT en la especificación de RANGE.The low-to-high ordering goes from LEFT to RIGHT in the RANGE specification.
RANGE LEFT Especifica que el valor de límite pertenece a la partición de la izquierda (los valores más bajos).Specifies the boundary value belongs to the partition on the left (lower values). El valor predeterminado es LEFT.The default is LEFT.
RANGE RIGHT Especifica que el valor de límite pertenece a la partición de la derecha (los valores más altos).Specifies the boundary value belongs to the partition on the right (higher values).
FOR VALUES ( boundary_value [,...n] )FOR VALUES ( boundary_value [,...n] ) Especifica los valores de límite para la partición.Specifies the boundary values for the partition. valor_de_límite es una expresión constante.boundary_value is a constant expression. No puede ser NULL.It can't be NULL. Debe coincidir o ser implícitamente convertible al tipo de datos de partition_column_name.It must either match or be implicitly convertible to the data type of partition_column_name. No se puede truncar durante la conversión implícita para que el tamaño y la escala del valor no coincidan con el tipo de datos de partition_column_name.It 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

Si se especifica la cláusula PARTITION, pero no se especifica un valor de límite, Almacenamiento de datos SQLSQL Data Warehouse creará una tabla con particiones con una partición.If you specify the PARTITION clause, but don't specify a boundary value, Almacenamiento de datos SQLSQL Data Warehouse will create a partitioned table with one partition. Si procede, más adelante se puede dividir la tabla en dos particiones.If applicable, you can split the table into two partitions at a later time.

Si se especifica un valor de límite, la tabla resultante tendrá dos particiones; una para los valores inferiores al valor de límite y otra para los valores superiores al valor de límite.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. Si se mueve una partición a una tabla sin particiones, la tabla sin particiones recibirá los datos, pero no tendrá los límites de partición en sus metadatos.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.

Vea Crear una tabla con particiones en la sección Ejemplos.See Create a partitioned table in the Examples section.

Opción de índice de almacén de columnas agrupado ordenadoOrdered Clustered columnstore index option

El índice de almacén de columnas agrupado (CCI) es el valor predeterminado para crear tablas en Azure SQL Data Warehouse.Clustered columnstore index (CCI) is the default for creating tables in Azure SQL Data Warehouse. Los datos de un CCI no se ordenan antes de comprimirse en segmentos de almacén de columnas.Data in CCI is not sorted before being compressed into columnstore segments. Al crear un CCI con ORDER, los datos se ordenan antes de agregarse a los segmentos de índice y el rendimiento de las consultas se puede mejorar.When creating a CCI with ORDER, data is sorted before being added to index segments and query performance can be improved. Consulte Optimización del rendimiento con el índice de almacén de columnas agrupado ordenado para obtener más información.See Performance Tuning with Ordered Clustered Columnstore Index for details.

Se puede crear un CCI ordenado en columnas de cualquier tipo de datos que se admita en Azure SQL Data Warehouse, excepto en las columnas de cadena.An ordered CCI can be created on columns of any data types supported in Azure SQL Data Warehouse except for string columns.

Los usuarios pueden consultar la columna column_store_order_ordinal en sys.index_columns para obtener las columnas en las que se ordena una tabla y la secuencia del orden.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.

Consulte Optimización del rendimiento con el índice de almacén de columnas agrupado ordenado para obtener más información.Check Performance tuning with ordered clustered columnstore index for details.

Tipo de datosData type

Almacenamiento de datos SQLSQL Data Warehouse admite los tipos de datos más usados habitualmente.supports the most commonly used data types. A continuación se muestra una lista de los tipos de datos admitidos junto con sus detalles y los bytes de almacenamiento.Below is a list of the supported data types along with their details and storage bytes. Para entender mejor los tipos de datos y cómo usarlos, vea Guía de tipos de datos - Azure SQL Data Warehouse.To better understand data types and how to use them, see Data types for tables in SQL Data Warehouse.

Para obtener una tabla de conversiones de tipos de datos, vea la sección Conversiones implícitas de CAST y 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 ) ]
El valor predeterminado de n es 7.The default value for n is 7.

datetime2 [ ( n ) ]datetime2 [ ( n ) ]
Igual que datetime, salvo que puede se especificar el número de fracciones de segundo.Same as datetime, except that you can specify the number of fractional seconds. El valor predeterminado de n es 7.The default value for n is 7.

Valor nn value PrecisiónPrecision 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
Almacena la fecha y hora del día con 19 y 23 caracteres según el calendario gregoriano.Stores date and time of day with 19 to 23 characters according to the Gregorian calendar. La fecha puede contener el año, el mes y el día.The date can contain year, month, and day. La hora contiene la hora, los minutos y los segundos. Como opción, se pueden mostrar tres dígitos para fracciones de segundo.The time contains hour, minutes, seconds.As an option, you can display three digits for fractional seconds. El tamaño de almacenamiento es de 8 bytes.The storage size is 8 bytes.

smalldatetime
Almacena una fecha y una hora.Stores a date and a time. El tamaño de almacenamiento es de 4 bytes.Storage size is 4 bytes.

date
Almacena una fecha con un máximo de 10 caracteres para el año, el mes y el día según el calendario gregoriano.Stores a date using a maximum of 10 characters for year, month, and day according to the Gregorian calendar. El tamaño de almacenamiento es de 3 bytes.The storage size is 3 bytes. La fecha se almacena como un entero.Date is stored as an integer.

time [ ( n ) ]time [ ( n ) ]
El valor predeterminado de n es 7.The default value for n is 7.

float [ ( n ) ]float [ ( n ) ]
Tipo de datos numérico aproximado que se usa con datos numéricos de punto flotante.Approximate number data type for use with floating point numeric data. Los datos de punto flotante son aproximados, lo que significa que no todos los valores del rango del tipo de datos se pueden representar con exactitud.Floating point data is approximate, which means that not all values in the data type range can be represented exactly. n especifica el número de bits que se usa para almacenar la mantisa del float en notación científica.n specifies the number of bits used to store the mantissa of the float in scientific notation. n determina el tamaño de almacenamiento y la precisión.n dictates the precision and storage size. Si se especifica n, debe ser un valor entre 1 y 53.If n is specified, it must be a value between 1 and 53. El valor predeterminado de n es 53.The default value of n is 53.

Valor nn value PrecisiónPrecision Tamaño de almacenamientoStorage size
1-241-24 7 dígitos7 digits 4 bytes4 bytes
25-5325-53 15 dígitos15 digits 8 bytes8 bytes

Almacenamiento de datos SQLSQL Data Warehouse trata n como uno de dos valores posibles.treats n as one of two possible values. Si 1<= n <= 24, n se trata como 24.If 1<= n <= 24, n is treated as 24. Si 25 <= n <= 53, n se trata como 53.If 25 <= n <= 53, n is treated as 53.

El tipo de datos float de Almacenamiento de datos SQLSQL Data Warehouse cumple con el estándar ISO para todos los valores de n desde 1 hasta 53.The Almacenamiento de datos SQLSQL Data Warehouse float data type complies with the ISO standard for all values of n from 1 through 53. El sinónimo para doble precisión es float(53).The synonym for double precision is float(53).

real [ ( n ) ]real [ ( n ) ]
La definición de real es la misma que la de float.The definition of real is the same as float. El sinónimo de real en ISO es float(24).The ISO synonym for real is float(24).

decimal [ ( precisión [ , escala ] ) ] | numeric [ ( precisión [ , escala ] ) ]decimal [ ( precision [ , scale ] ) ] | numeric [ ( precision [ , scale ] ) ]
Almacena números de precisión y escala fijas.Stores fixed precision and scale numbers.

precisiónprecision
El número total máximo de dígitos decimales que se puede almacenar, tanto a la izquierda como a la derecha del separador decimal.The maximum total number of decimal digits that can be stored, both to the left and to the right of the decimal point. La precisión debe ser un valor comprendido entre 1 y la precisión máxima de 38.The precision must be a value from 1 through the maximum precision of 38. La precisión predeterminada es 18.The default precision is 18.

escalascale
El número máximo de dígitos decimales que se puede almacenar a la derecha del separador decimal.The maximum number of decimal digits that can be stored to the right of the decimal point. La escala debe ser un valor comprendido entre 0 y precisión.Scale must be a value from 0 through precision. Solo se puede especificar escala si se especifica precisión.You can only specify scale if precision is specified. La escala predeterminada es 0 y, por tanto, 0 <= escala <= precisión.The default scale is 0 and so 0 <= scale <= precision. Los tamaños de almacenamiento máximo varían según la precisión.Maximum storage sizes vary, based on the precision.

PrecisiónPrecision Bytes de almacenamientoStorage bytes
1-91-9 55
10-1910-19 99
20-2820-28 1313
29-3829-38 1717

money | smallmoney
Tipos de datos que representan valores de moneda.Data types that represent currency values.

Tipo de datosData Type Bytes de almacenamientoStorage bytes
money 88
smallmoney 44

bigint | int | smallint | tinyint
Tipos de datos numéricos exactos que utilizan datos enteros.Exact-number data types that use integer data. El almacenamiento se muestra en la tabla siguiente.The storage is shown in the following table.

Tipo de datosData Type Bytes de almacenamientoStorage bytes
bigint 88
int 44
smallint 22
tinyint 11

bit
Tipo de datos entero que puede aceptar los valores 1, 0 o `NULL.An integer data type that can take the value of 1, 0, or `NULL. Almacenamiento de datos SQLSQL Data Warehouse optimiza el almacenamiento de las columnas de tipo bit.optimizes storage of bit columns. Si una tabla contiene ocho columnas o menos de tipo bit, se almacenan como 1 byte.If there are 8 or fewer bit columns in a table, the columns are stored as 1 byte. Si hay entre 9-16 columnas de tipo bit, se almacenan como 2 bytes, y así sucesivamente.If there are from 9-16 bit columns, the columns are stored as 2 bytes, and so on.

nvarchar [ ( n | max ) ] -- max solo se aplica a Almacenamiento de datos SQLSQL Data Warehouse.nvarchar [ ( n | max ) ] -- max applies only to Almacenamiento de datos SQLSQL Data Warehouse.
Datos de caracteres Unicode de longitud variable.Variable-length Unicode character data. n puede ser un valor de 1 a 4000.n can be a value from 1 through 4000. max indica que el tamaño máximo de almacenamiento es de 2^31-1 bytes (2 GB).max indicates that the maximum storage size is 2^31-1 bytes (2 GB). El tamaño de almacenamiento en bytes es dos veces el número de caracteres especificado + 2 bytes.Storage size in bytes is two times the number of characters entered + 2 bytes. Los datos especificados pueden tener una longitud de cero caracteres.The data entered can be zero characters in length.

nchar [ ( n ) ]nchar [ ( n ) ]
Datos de caracteres Unicode de longitud fija, con una longitud de n caracteres.Fixed-length Unicode character data with a length of n characters. n debe ser un valor entre 1 y 4000.n must be a value from 1 through 4000. El tamaño de almacenamiento es dos veces n bytes.The storage size is two times n bytes.

varchar [ ( n | max ) ] -- max solo se aplica a Almacenamiento de datos SQLSQL Data Warehouse.varchar [ ( n | max ) ] -- max applies only to Almacenamiento de datos SQLSQL Data Warehouse.
Datos de caracteres no Unicode de longitud variable, con una longitud de n bytes.Variable-length, non-Unicode character data with a length of n bytes. n debe ser un valor entre 1 y 8000.n must be a value from 1 to 8000. max indica que el tamaño máximo de almacenamiento es 2^31-1 bytes (2 GB). El tamaño de almacenamiento es la longitud real de los datos especificados + 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 ) ]
Datos de caracteres no Unicode de longitud fija, con una longitud de n bytes.Fixed-length, non-Unicode character data with a length of n bytes. n debe ser un valor entre 1 y 8000.n must be a value from 1 to 8000. El tamaño de almacenamiento es de n bytes.The storage size is n bytes. El valor predeterminado de n es 1.The default for n is 1.

varbinary [ ( n | max ) ] -- max solo se aplica a Almacenamiento de datos SQLSQL Data Warehouse.varbinary [ ( n | max ) ] -- max applies only to Almacenamiento de datos SQLSQL Data Warehouse.
Datos binarios de longitud variable.Variable-length binary data. n puede ser un valor entre 1 y 8000.n can be a value from 1 to 8000. max indica que el tamaño máximo de almacenamiento es de 2^31-1 bytes (2 GB).max indicates that the maximum storage size is 2^31-1 bytes (2 GB). El tamaño de almacenamiento es la longitud real de los datos especificados + 2 bytes.The storage size is the actual length of data entered + 2 bytes. El valor predeterminado de n es 7.The default value for n is 7.

binary [ ( n ) ]binary [ ( n ) ]
Datos binarios de longitud fija con una longitud de n bytes.Fixed-length binary data with a length of n bytes. n puede ser un valor entre 1 y 8000.n can be a value from 1 to 8000. El tamaño de almacenamiento es de n bytes.The storage size is n bytes. El valor predeterminado de n es 7.The default value for n is 7.

uniqueidentifier
Es un GUID de 16 bytes.Is a 16-byte GUID.

PermisosPermissions

Crear una tabla requiere un permiso en el rol fijo de base de datos db_ddladmin, o bien:Creating a table requires permission in the db_ddladmin fixed database role, or:

  • El permiso CREATE TABLE en la base de datos.CREATE TABLE permission on the database
  • El permiso ALTER SCHEMA en el esquema que va a contener la tabla.ALTER SCHEMA permission on the schema that will contain the table.

Crear una tabla con particiones requiere un permiso en el rol fijo de base de datos db_ddladmin, o bienCreating a partitioned table requires permission in the db_ddladmin fixed database role, or

  • el permiso ALTER ANY DATASPACE.ALTER ANY DATASPACE permission

El inicio de sesión que crea una tabla temporal local recibe los permisos CONTROL, INSERT, SELECT y UPDATE en la tabla.The login that creates a local temporary table receives CONTROL, INSERT, SELECT, and UPDATE permissions on the table.

Notas generalesGeneral Remarks

Para obtener información sobre los límites mínimo y máximo, vea Límites de capacidad de SQL Data Warehouse.For minimum and maximum limits, see SQL Data Warehouse capacity limits.

Determinar el número de particiones de tablaDetermining the number of table partitions

Cada tabla definida por el usuario se divide en varias tablas más pequeñas que se almacenan en ubicaciones independientes llamadas distribuciones.Each user-defined table is divided into multiple smaller tables that are stored in separate locations called distributions. Almacenamiento de datos SQLSQL Data Warehouse usa 60 distribuciones.uses 60 distributions. En Almacenamiento de datos paralelosParallel Data Warehouse, el número de distribuciones depende del número de nodos de ejecución.In Almacenamiento de datos paralelosParallel Data Warehouse, the number of distributions depends on the number of Compute nodes.

Cada distribución contiene todas las particiones de tabla.Each distribution contains all table partitions. Por ejemplo, si hay 60 distribuciones y 4 particiones de tabla, además de una partición vacía, habrá 300 particiones (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). Si la tabla es un índice de almacén de columnas en clúster, habrá un índice de almacén de columnas por partición, lo que significa que tendrá 300 índices de almacén de columnas.If the table is a clustered columnstore index, there will be one columnstore index per partition, which means you'll have 300 columnstore indexes.

Se recomienda el uso de menos particiones de tabla para asegurar que cada índice de almacén de columnas tiene suficientes filas para aprovechar las ventajas de los índices de almacén de columnas.We recommend using fewer table partitions to ensure each columnstore index has enough rows to take advantage of the benefits of columnstore indexes. Para más información, vea Creación de particiones de tablas en SQL Data Warehouse e lndexación de tablas en SQL Data WarehouseFor more information, see Partitioning tables in SQL Data Warehouse and Indexing tables in SQL Data Warehouse

Tabla de almacén de filas (montón o índice agrupado)Rowstore table (heap or clustered index)

Una tabla de almacén de filas es una tabla almacenada en el orden de fila por fila.A rowstore table is a table stored in row-by-row order. Es un montón o índice agrupado.It's a heap or clustered index. Almacenamiento de datos SQLSQL Data Warehouse crea todas las tablas de almacén de filas con compresión de página; este comportamiento no es configurable por el usuario.creates all rowstore tables with page compression; this behavior isn't user-configurable.

Tabla de almacén de columnas (índice de almacén de columnas)Columnstore table (columnstore index)

Una tabla de almacén de columnas es una tabla almacenada en el orden de columna por columna.A columnstore table is a table stored in column-by-column order. El índice de almacén de columnas es la tecnología que administra los datos almacenados en una tabla de almacén de columnas.The columnstore index is the technology that manages data stored in a columnstore table. El índice de almacén de columnas agrupado no afecta a cómo se distribuyen los datos, si no que afecta a cómo se almacenan dichos datos dentro de cada distribución.The clustered columnstore index doesn't affect how data are distributed, rather, it affects how the data are stored within each distribution.

Para cambiar una tabla de almacén de filas a una tabla de almacén de columnas, quite todos los índices existentes en la tabla y cree un índice de almacén de columnas agrupado.To change a rowstore table to a columnstore table, drop all existing indexes on the table and create a clustered columnstore index. Para obtener un ejemplo, vea CREATE COLUMNSTORE INDEX (Transact-SQL).For an example, see CREATE COLUMNSTORE INDEX (Transact-SQL).

Para más información, vea estos artículos:For more information, see these articles:

Limitaciones y restriccionesLimitations and Restrictions

No puede definir una restricción DEFAULT en una columna de distribución.You can't define a DEFAULT constraint on a distribution column.

ParticionesPartitions

Al usar particiones, la columna de partición no puede tener una intercalación exclusiva de Unicode.When using partitions, the partition column can't have a Unicode-only collation. Por ejemplo, se produce un error en la instrucción siguiente.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'')))

Si valor_de_límite es un valor literal que se debe convertir implícitamente al tipo de datos en partition_column_name, se producirá una discrepancia.If boundary_value is a literal value that must be implicitly converted to the data type in partition_column_name, a discrepancy will occur. El valor literal se muestra a través de las vistas del sistema de Almacenamiento de datos SQLSQL Data Warehouse, pero el valor convertido se usa para operaciones de Transact-SQLTransact-SQL.The literal value is displayed through the Almacenamiento de datos SQLSQL Data Warehouse system views, but the converted value is used for Transact-SQLTransact-SQL operations.

Tablas temporalesTemporary tables

Las tablas temporales globales que comienzan por ## no se admiten.Global temporary tables that begin with ## aren't supported.

Las tablas temporales locales tienen las siguientes limitaciones y restricciones:Local temporary tables have the following limitations and restrictions:

  • Solo son visibles para la sesión actual.They're visible only to the current session. Almacenamiento de datos SQLSQL Data Warehouse las elimina automáticamente al final de la sesión.drops them automatically at the end of the session. Para quitarlas de forma explícita, use la instrucción DROP TABLE.To drop them explicitly, use the DROP TABLE statement.
  • No se pueden cambiar de nombre.They can't be renamed.
  • No pueden tener particiones ni vistas.They can't have partitions or views.
  • No se pueden cambiar sus permisos.Their permissions can't be changed. Las instrucciones GRANT, DENY y REVOKE no se pueden usar con tablas temporales locales.GRANT, DENY, and REVOKE statements can't be used with local temporary tables.
  • Los comandos de consola de base de datos se bloquean para las tablas temporales.Database console commands are blocked for temporary tables.
  • Si se usa más de una tabla temporal local dentro de un lote, cada una debe tener un nombre único.If more than one local temporary table is used within a batch, each must have a unique name. Si varias sesiones ejecutan el mismo lote y crean la misma tabla temporal local, Almacenamiento de datos SQLSQL Data Warehouse anexa de forma interna un sufijo numérico al nombre de la tabla temporal local para mantener un nombre único para cada tabla temporal local.If multiple sessions are running the same batch and creating the same local temporary table, Almacenamiento de datos SQLSQL Data Warehouse internally appends a numeric suffix to the local temporary table name to maintain a unique name for each local temporary table.

Comportamiento de bloqueoLocking behavior

Toma un bloqueo exclusivo en la tabla.Takes an exclusive lock on the table. Toma un bloqueo compartido en los objetos DATABASE, SCHEMA y SCHEMARESOLUTION.Takes a shared lock on the DATABASE, SCHEMA, and SCHEMARESOLUTION objects.

Ejemplos para columnasExamples for columns

A.A. Especificar una intercalaciónSpecify a column collation

En el ejemplo siguiente, se crea la tabla MyTable con dos intercalaciones de columna diferentes.In the following example, the table MyTable is created with two different column collations. De forma predeterminada, la columna mycolumn1 tiene la intercalación predeterminada Latin1_General_100_CI_AS_KS_WS.By default, the column, mycolumn1, has the default collation Latin1_General_100_CI_AS_KS_WS. La columna mycolumn2 tiene la intercalación 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. Especificación de una restricción DEFAULT para una columnaSpecify a DEFAULT constraint for a column

En el ejemplo siguiente se muestra la sintaxis para especificar un valor predeterminado para una columna.The following example shows the syntax to specify a default value for a column. La columna colA tiene una restricción predeterminada denominada constraint_colA y un valor predeterminado de 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 )  
;  

Ejemplos de tablas temporalesExamples for temporary tables

C.C. Creación de una tabla temporal localCreate a local temporary table

En el ejemplo siguiente se crea una tabla temporal local denominada #myTable.The following example creates a local temporary table named #myTable. La tabla se especifica con un nombre de tres partes, que comienza con #.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
  )  
;  

Ejemplos de estructura de tablaExamples for table structure

D.D. Creación de una tabla con un índice de almacén de columnas en clústerCreate a table with a clustered columnstore index

En el ejemplo siguiente se crea una tabla distribuida con un índice de almacén de columnas en clúster.The following example creates a distributed table with a clustered columnstore index. Cada distribución se almacenará como un almacén de columnas.Each distribution will be stored as a columnstore.

El índice de almacén de columnas en clúster no afecta a cómo se distribuyen los datos; los datos siempre se distribuyen por fila.The clustered columnstore index doesn't affect how the data is distributed; data is always distributed by row. El índice de almacén de columnas en clúster afecta a cómo se almacenan los datos dentro de cada distribución.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. Creación de un índice ordenado de almacén de columnas agrupadoCreate an ordered clustered columnstore index

En el ejemplo siguiente muestra cómo crear un índice de almacén de columnas agrupado ordenado.The following example shows how to create an ordered clustered columnstore index. El índice está ordenado por el valor SHIPDATE.The index is ordered on SHIPDATE.

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

Ejemplos de distribución de la tablaExamples for table distribution

F.F. Creación de una tabla ROUND_ROBINCreate a ROUND_ROBIN table

En el ejemplo siguiente se crea una tabla ROUND_ROBIN con tres columnas y sin particiones.The following example creates a ROUND_ROBIN table with three columns and without partitions. Los datos se reparten entre todas las distribuciones.The data is spread across all distributions. La tabla se crea con un CLUSTERED COLUMNSTORE INDEX, lo que proporciona mejor rendimiento y compresión de datos que un montón o un índice de almacén de filas en clúster.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. Creación de una tabla distribuida de hashCreate a hash-distributed table

En el ejemplo siguiente se crea la misma tabla que el ejemplo anterior.The following example creates the same table as the previous example. Pero para esta tabla, las filas se distribuyen (en la columna id) en lugar de propagarse de forma aleatoria como una tabla ROUND_ROBIN.However, for this table, rows are distributed (on the id column) instead of randomly spread like a ROUND_ROBIN table. La tabla se crea con un CLUSTERED COLUMNSTORE INDEX, lo que proporciona mejor rendimiento y compresión de datos que un montón o un índice de almacén de filas en clúster.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. Creación de una carpeta replicadaCreate a replicated table

En el ejemplo siguiente se crea una tabla replicada similar a los ejemplos anteriores.The following example creates a replicated table similar to the previous examples. Las tablas replicadas se copian por completo en cada nodo de ejecución.Replicated tables are copied in full to each Compute node. Con esta copia en cada nodo de ejecución, se reduce el movimiento de datos para las consultas.With this copy on each Compute node, data movement is reduced for queries. Este ejemplo se crea con un ÍNDICE AGRUPADO, lo que proporciona una mejor compresión de datos que un montón.This example is created with a CLUSTERED INDEX, which gives better data compression than a heap. Un montón no puede contener filas suficientes para lograr una buena compresión del ÍNDICE DE ALMACÉN DE COLUMNAS AGRUPADO.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)  
  );  

Ejemplos de particiones de tablaExamples for table partitions

I.I. Creación de una tabla con particionesCreate a partitioned table

En el ejemplo siguiente se crea la misma tabla que en el ejemplo A, con la adición de la partición RANGE LEFT en la columna id.The following example creates the same table as shown in example A, with the addition of RANGE LEFT partitioning on the id column. Especifica cuatro valores de límite de partición, lo que da como resultado cinco particiones.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
  )  
;  

En este ejemplo, los datos se ordenarán en las particiones siguientes:In this example, data will be sorted into the following partitions:

  • Partición 1: col <= 10Partition 1: col <= 10
  • Partición 2: 10 < col <= 20Partition 2: 10 < col <= 20
  • Partición 3: 20 < col <= 30Partition 3: 20 < col <= 30
  • Partición 4: 30 < col <= 40Partition 4: 30 < col <= 40
  • Partición 5: 40 < colPartition 5: 40 < col

Si se crearan particiones RANGE RIGHT en lugar de RANGE LEFT (el valor predeterminado) en esta misma tabla, los datos se ordenarían en las particiones siguientes:If this same table was partitioned RANGE RIGHT instead of RANGE LEFT (default), the data will be sorted into the following partitions:

  • Partición 1: col < 10Partition 1: col < 10
  • Partición 2: 10 <= col < 20Partition 2: 10 <= col < 20
  • Partición 3: 20 <= col < 30Partition 3: 20 <= col < 30
  • Partición 4: 30 <= col < 40Partition 4: 30 <= col < 40
  • Partición 5: 40 <= colPartition 5: 40 <= col

J.J. Creación de una tabla con particiones con una particiónCreate a partitioned table with one partition

En el ejemplo siguiente se crea una tabla con particiones con una partición.The following example creates a partitioned table with one partition. No especifica ningún valor de límite, lo que da como resultado una partición.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. Creación de una tabla con particiones de fechaCreate a table with date partitioning

En el ejemplo siguiente se crea una tabla denominada myTable, con la partición en una columna date.The following example creates a new table named myTable, with partitioning on a date column. Al usar RANGE RIGHT y fechas para los valores de límite, en cada partición se coloca un mes de datos.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'  
      ))
  );  

Vea tambiénSee also

CREATE TABLE AS SELECT (Azure SQL Data Warehouse) 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)