Compartir por


CREATE TABLE

Se aplica a: Azure Synapse Analytics Analytics Platform System (PDW)

Crea una tabla en Azure Synapse Analytics o Sistema de la plataforma de análisis (PDW).

Para entender las tablas y cómo usarlas, vea el artículo sobre tablas en Azure Synapse Analytics.

En este artículo, las descripciones de Azure Synapse Analytics se aplican tanto a Azure Synapse Analytics como a Sistema de la plataforma de análisis (PDW), a menos que se indique lo contrario.

Nota

Para SQL Server y plataformas de Azure SQL, visite CREATE TABLE y seleccione la versión de producto deseada. Para consultas sobre el almacenamiento en Microsoft Fabric, visite CREATE TABLE (Fabric).

Nota

El grupo de SQL sin servidor en Azure Synapse Analytics solo admite tablas externas y temporales.

Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Nombre de la base de datos que contendrá la nueva tabla. El valor predeterminado es la base de datos actual.

schema_name

El esquema para la tabla. La especificación de esquema es opcional. Si se deja vacío, se usa el esquema predeterminado.

table_name

Nombre de la nueva tabla. Para crear una tabla temporal local, anteponga # al nombre de tabla. Para obtener instrucciones y explicaciones sobre las tablas temporales, vea Tablas temporales en un grupo de SQL dedicado en Azure Synapse Analytics.

column_name

El nombre de una columna de la tabla.

Opciones de columna

COLLATE Windows_collation_name
Especifica la intercalación para la expresión. La intercalación debe ser una de las intercalaciones de Windows que SQL Server admite. Para obtener una lista de intercalaciones de Windows compatibles con SQL Server, vea Nombre de intercalación de Windows (Transact-SQL)).

NULL | NOT NULL
Especifica si se permiten valores NULL en la columna. El valor predeterminado es NULL.

[ CONSTRAINT constraint_name ] DEFAULT constant_expression
Especifica el valor de columna predeterminado.

Argumento Explicación
constraint_name El nombre opcional para la restricción. El nombre de la restricción es único dentro de la base de datos. El nombre se puede volver a usar en otras bases de datos.
constant_expression El valor predeterminado de la columna. La expresión debe ser un valor literal o una constante. Por ejemplo, se permiten estas expresiones constantes: 'CA', 4. Estas expresiones constantes no se permiten: 2+3, CURRENT_TIMESTAMP.

Opciones de estructura de tabla

Para obtener instrucciones sobre cómo elegir el tipo de tabla, vea Indexación de tablas en Azure Synapse Analytics.

CLUSTERED COLUMNSTORE INDEX

Almacena la tabla como un índice de almacén de columnas en clúster. El índice de almacén de columnas en clúster se aplica a todos los datos de tabla. Este es el comportamiento predeterminado para Azure Synapse Analytics.

HEAP Almacena la tabla como un montón. Este es el comportamiento predeterminado para Sistema de la plataforma de análisis (PDW).

CLUSTERED INDEX ( index_column_name [ ,...n ] )
Almacena la tabla como un índice agrupado con una o varias columnas de clave. Este comportamiento almacena los datos por fila. Use index_column_name para especificar el nombre de una o varias columnas de clave en el índice. Para obtener más información, consulte Tablas de almacén de filas.

LOCATION = USER_DB Esta opción está en desuso. Se acepta sintácticamente, pero ya no es necesaria y no afecta al comportamiento.

Opciones de distribución de tabla

Para saber cómo elegir el mejor método de distribución y usar tablas distribuidas, consulte Guía de diseño de tablas distribuidas mediante un grupo de SQL dedicado en Azure Synapse Analytics.

Para obtener recomendaciones sobre la mejor estrategia de distribución que se puede usar en función de las cargas de trabajo, consulte Asesor de distribución de Azure Synapse SQL.

DISTRIBUTION = HASH (distribution_column_name) Asigna cada fila a una distribución aplicando un algoritmo hash al valor almacenado en 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. 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.

DISTRIBUTION = HASH ( [distribution_column_name [, ...n]] ) Distribuye las filas basadas en los valores hash de hasta ocho columnas, lo que permite una distribución más uniforme de los datos de la tabla base, reduce la asimetría de datos en el tiempo y mejora el rendimiento de las consultas.

Nota:

  • Para habilitar la característica de distribución de varias columnas (MCD), cambie el nivel de compatibilidad de la base de datos a 50 con este comando. Para obtener más información sobre cómo establecer el nivel de compatibilidad de la base de datos, consulte ALTER DATABASE SCOPED CONFIGURATION. Por ejemplo: ALTER DATABASE SCOPED CONFIGURATION SET DW_COMPATIBILITY_LEVEL = 50;
  • Para deshabilitar la función de distribución de varias columnas (MCD), ejecute este comando para cambiar el nivel de compatibilidad de la base de datos a AUTO. Por ejemplo: ALTER DATABASE SCOPED CONFIGURATION SET DW_COMPATIBILITY_LEVEL = AUTO; Las tablas MCD existentes se conservarán pero se volverán ilegibles. Las consultas sobre tablas de MCD devolverán este error: 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 el acceso a las tablas MCD, habilite la característica de nuevo.
    • Para cargar datos en una tabla MCD, use la instrucción CTAS y el origen de datos deben ser tablas de Synapse SQL.
  • La generación de scripts para crear tablas MCD es compatible actualmente con SSMS versión 19 y versiones posteriores.

DISTRIBUTION = ROUND_ROBIN Distribuye uniformemente las filas entre todas las distribuciones de un modo Round Robin. Este es el comportamiento predeterminado para Azure Synapse Analytics.

DISTRIBUTION = REPLICATE Almacena una copia de la tabla en cada nodo de ejecución. Para Azure Synapse Analytics, la tabla se almacena en una base de datos de distribución en cada nodo de ejecución. Para Sistema de la plataforma de análisis (PDW), la tabla se almacena en un grupo de archivos de SQL Server que abarca el nodo de ejecución. Este es el comportamiento predeterminado para Sistema de la plataforma de análisis (PDW).

Opciones de partición de tabla

Para obtener instrucciones sobre cómo usar las particiones de tabla, vea Creación de particiones de tablas en el grupo de SQL dedicado.

PARTITION ( partition_column_name RANGE [ LEFT | RIGHT ] FOR VALUES ( [ boundary_value [,...n] ] ))
Crea una o varias particiones de tabla. 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. A diferencia de la columna de distribución, las particiones de tabla no determinan la distribución donde se almacena cada fila. En su lugar, las particiones de tabla determinan cómo se agrupan las filas y se almacenan dentro de cada distribución.

Argumento Explicación
partition_column_name Especifica la columna que Usa Azure Synapse Analytics para crear particiones de las filas. Esta columna puede ser de cualquier tipo de datos. Azure Synapse Analytics ordena los valores de columna de partición en orden ascendente. El orden de bajo a alto va de LEFT a RIGHT en la especificación de RANGE.
RANGE LEFT Especifica que el valor de límite pertenece a la partición de la izquierda (los valores más bajos). El valor predeterminado es LEFT.
RANGE RIGHT Especifica que el valor de límite pertenece a la partición de la derecha (los valores más altos).
FOR VALUES ( boundary_value [,...n] ) Especifica los valores de límite para la partición. valor_de_límite es una expresión constante. No puede ser NULL. Debe coincidir o ser implícitamente convertible al tipo de datos de 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.



Si se especifica la cláusula PARTITION, pero no se especifica un valor de límite, Azure Synapse Analytics crea una tabla con una partición. Si procede, más adelante se puede dividir la tabla en dos particiones.



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

Para obtener un ejemplo, consulte Creación de una tabla con particiones.

Opción de índice de almacén de columnas agrupado ordenado

El índice de almacén de columnas agrupado (CCI) es el valor predeterminado para crear tablas en Azure Synapse Analytics. Los datos de un CCI no se ordenan antes de comprimirse en segmentos de almacén de columnas. 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. Para más información sobre los índices de almacén de columnas agrupados ordenados en Azure Synapse Analytics, consulte Optimización del rendimiento con el índice de almacén de columnas agrupado ordenado.

Se puede crear un CCI ordenado en columnas de cualquier tipo de datos que se admita en Azure Synapse Analytics, excepto en las columnas de cadena.

Los usuarios pueden consultar column_store_order_ordinal la columna en sys.index_columns para la columna o columnas en las que se ordena una tabla y la secuencia en el orden.

Consulte Optimización del rendimiento con el índice de almacén de columnas agrupado ordenado para obtener más información.

Tipo de datos

Azure Synapse Analytics admite los tipos de datos más usados habitualmente. Para entender mejor los tipos de datos y cómo usarlos, vea el artículo sobre los tipos de datos de tabla en Azure Synapse Analytics.

Nota:

De forma similar a SQL Server, hay un límite de 8060 bytes por fila. Esto puede convertirse en un problema de bloqueo para las tablas que tienen muchas columnas o columnas con tipos de datos grandes, como nvarchar(max) o varbinary(max). Las inserciones o actualizaciones que infrinjan el límite de 8060 bytes darán lugar a códigos de error 511 o 611. Para obtener más información, vea Guía de arquitectura de páginas y extensiones.

Para obtener una tabla de conversiones de tipos de datos, consulte la sección Conversiones implícitas de CAST y CONVERT (Transact-SQL). Para obtener más información, vea Tipos de datos y funciones de fecha y hora (Transact-SQL).

A continuación se muestra una lista de los tipos de datos admitidos junto con sus detalles y los bytes de almacenamiento:

datetimeoffset [ ( n ) ]
El valor predeterminado de n es 7.

datetime2 [ ( n ) ]
Igual que datetime, salvo que puede se especificar el número de fracciones de segundo. El valor predeterminado de n es 7.

Valor n Precision 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
Almacena la fecha y hora del día con 19 y 23 caracteres según el calendario gregoriano. La fecha puede contener el año, el mes y el día. La hora contiene la hora, los minutos y los segundos. Como opción, se pueden mostrar tres dígitos para fracciones de segundo. El tamaño de almacenamiento es de 8 bytes.

smalldatetime
Almacena una fecha y una hora. El tamaño de almacenamiento es de 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. El tamaño de almacenamiento es de 3 bytes. La fecha se almacena como un entero.

time [ ( n ) ]
El valor predeterminado de n es 7.

float [ ( n ) ]
Tipo de datos numérico aproximado que se usa con datos numéricos de punto flotante. 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. n especifica el número de bits que se usa para almacenar la mantisa del float en notación científica. n determina el tamaño de almacenamiento y la precisión. Si se especifica n, debe ser un valor entre 1 y 53. El valor predeterminado de n es 53.

Valor n Precision Tamaño de almacenamiento
1-24 7 dígitos 4 bytes
25-53 15 dígitos 8 bytes

Azure Synapse Analytics trata n como uno de dos valores posibles. Si 1<= n<= 24, n se trata como 24. Si 25<= n<= 53, n se trata como 53.

El tipo de datos float de Azure Synapse Analytics cumple con el estándar ISO para todos los valores de n desde 1 hasta 53. El sinónimo de precisión doble es float(53).

real [ ( n ) ]
La definición de real es la misma que la de float. El sinónimo ISO para real es float(24) .

decimal [ ( precisión [ , escala ] ) ] | numeric [ ( precisión [ , escala ] ) ]
Almacena números de precisión y escala fijas.

precisión
Número total máximo de dígitos decimales que se pueden almacenar, en cualquiera de los lados del separador decimal. La precisión debe ser un valor comprendido entre 1 y la precisión máxima de 38. La precisión predeterminada es 18.

scale
El número máximo de dígitos decimales que se puede almacenar a la derecha del separador decimal. La escala debe ser un valor comprendido entre 0 y precisión. Solo se puede especificar escala si se especifica precisión. La escala predeterminada es 0 y, por tanto, 0<=escala<precisión. Los tamaños de almacenamiento máximo varían según la precisión.

Precision Bytes de almacenamiento
1-9 5
10-19 9
20-28 13
29-38 17

money | smallmoney
Tipos de datos que representan valores de moneda.

Tipo de datos Bytes de almacenamiento
money 8
smallmoney 4

bigint | int | smallint | tinyint
Tipos de datos numéricos exactos que utilizan datos enteros. El almacenamiento se muestra en la tabla siguiente.

Tipo de datos Bytes de almacenamiento
bigint 8
int 4
smallint 2
tinyint 1

bit
Tipo de datos entero que puede aceptar los valores 1, 0 o `NULL. Azure Synapse Analytics optimiza el almacenamiento de las columnas de tipo bit. Si una tabla contiene ocho columnas o menos de tipo bit, se almacenan como 1 byte. Si hay entre 9-16 columnas de tipo bit, se almacenan como 2 bytes, y así sucesivamente.

nvarchar [ ( n | max ) ] Datos de caracteres Unicode de longitud variable. n puede ser un valor de 1 a 4000. max indica que el tamaño máximo de almacenamiento es de 2^31-1 bytes (2 GB). El tamaño de almacenamiento en bytes es dos veces el número de caracteres especificado + 2 bytes. Los datos especificados pueden tener una longitud de cero caracteres. La max longitud solo se aplica a Azure Synapse Analytics.

nchar [ ( n ) ]
Datos de caracteres Unicode de longitud fija, con una longitud de n caracteres. n debe ser un valor entre 1 y 4000. El tamaño de almacenamiento es dos veces n bytes.

varchar [ ( n | max ) ] Datos de caracteres no Unicode de longitud variable con una longitud de n bytes. n debe ser un valor entre 1 y 8000. max indica que el tamaño máximo de almacenamiento es de 2^31-1 bytes (2 GB). El tamaño de almacenamiento es la longitud real de los datos especificados + 2 bytes. La max longitud solo se aplica a Azure Synapse Analytics.

char [ ( n ) ]
Datos de caracteres no Unicode de longitud fija, con una longitud de n bytes. n debe ser un valor entre 1 y 8000. El tamaño de almacenamiento es de n bytes. El valor predeterminado de n es 1.

varbinary [ ( n | max ) ] Datos binarios de longitud variable. n puede ser un valor entre 1 y 8000. max indica que el tamaño máximo de almacenamiento es de 2^31-1 bytes (2 GB). El tamaño de almacenamiento es la longitud real de los datos especificados + 2 bytes. El valor predeterminado de n es 7. La max longitud solo se aplica a Azure Synapse Analytics.

binary [ ( n ) ]
Datos binarios de longitud fija con una longitud de n bytes. n puede ser un valor entre 1 y 8000. El tamaño de almacenamiento es de n bytes. El valor predeterminado de n es 7.

uniqueidentifier
Es un GUID de 16 bytes.

Permisos

Crear una tabla requiere un permiso en el rol fijo de base de datos db_ddladmin, o bien:

  • El permiso CREATE TABLE en la base de datos.
  • ALTER SCHEMA permiso en el esquema de la tabla

Crear una tabla con particiones requiere un permiso en el rol fijo de base de datos db_ddladmin, o bien

  • el permiso ALTER ANY DATASPACE.

El inicio de sesión que crea una tabla temporal local recibe los permisos CONTROL, INSERT, SELECT y UPDATE en la tabla.

Comentarios

Para conocer los límites mínimos y máximos en Azure Synapse Analytics, consulte Límites de capacidad de Azure Synapse Analytics.

Determinar el número de particiones de tabla

Cada tabla definida por el usuario se divide en varias tablas más pequeñas que se almacenan en ubicaciones independientes llamadas distribuciones. Azure Synapse Analytics usa 60 distribuciones. En Sistema de la plataforma de análisis (PDW), el número de distribuciones depende del número de nodos de ejecución.

Cada distribución contiene todas las particiones de tabla. 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). 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.

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. Para más información en Azure Synapse Analytics, consulte Creación de particiones de tablas en un grupo de SQL dedicado e índices en tablas de grupos de SQL dedicados en Azure Synapse Analytics.

Tabla de almacén de filas (montón o índice agrupado)

Una tabla de almacén de filas es una tabla almacenada en el orden de fila por fila. Es un montón o índice agrupado. Azure Synapse Analytics crea todas las tablas de almacén de filas con compresión de página; este comportamiento no es configurable por el usuario.

Tabla de almacén de columnas (índice de almacén de columnas)

Una tabla de almacén de columnas es una tabla almacenada en el orden de columna por columna. El índice de almacén de columnas es la tecnología que administra los datos almacenados en una tabla de almacén de columnas. El índice de almacén de columnas en clúster no afecta a cómo se distribuyen los datos. Más bien afecta a cómo se almacenan los datos dentro de cada distribución.

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. Para obtener un ejemplo, vea CREATE COLUMNSTORE INDEX (Transact-SQL).

Para obtener más información, consulte estos artículos:

Limitaciones

  • No puede definir una restricción DEFAULT en una columna de distribución.
  • El nombre de la tabla no puede tener más de 128 caracteres.
  • El nombre de la columna no puede tener más de 128 caracteres.

Particiones

La columna de partición no puede tener una intercalación exclusiva de Unicode. Por ejemplo, se produce un error en la instrucción siguiente.

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. El valor literal se muestra a través de las vistas del sistema de Azure Synapse Analytics, pero el valor convertido se usa para operaciones Transact-SQL.

Tablas temporales

Las tablas temporales globales que comienzan por ## no se admiten.

Las tablas temporales locales tienen las siguientes limitaciones y restricciones:

  • Solo son visibles para la sesión actual. Azure Synapse Analytics las elimina automáticamente al final de la sesión. Para quitarlas de forma explícita, use la instrucción DROP TABLE.
  • No se pueden cambiar de nombre.
  • No pueden tener particiones ni vistas.
  • No se pueden cambiar sus permisos. Las instrucciones GRANT, DENY y REVOKE no se pueden usar con tablas temporales locales.
  • Los comandos de consola de base de datos se bloquean para las tablas temporales.
  • Si se usa más de una tabla temporal local dentro de un lote, cada una debe tener un nombre único. Si varias sesiones ejecutan el mismo lote y crean la misma tabla temporal local, Azure Synapse Analytics 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.

Comportamiento de bloqueo

Toma un bloqueo exclusivo en la tabla. Toma un bloqueo compartido en los objetos DATABASE, SCHEMA y SCHEMARESOLUTION.

Ejemplos para columnas

A Especificar una intercalación

En el ejemplo siguiente, se crea la tabla MyTable con dos intercalaciones de columna diferentes. De forma predeterminada, la columna mycolumn1 tiene la intercalación predeterminada Latin1_General_100_CI_AS_KS_WS. La columna mycolumn2 tiene la intercalación Frisian_100_CS_AS.

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

B. Especificación de una restricción DEFAULT para una columna

En el ejemplo siguiente se muestra la sintaxis para especificar un valor predeterminado para una columna. La columna colA tiene una restricción predeterminada denominada constraint_colA y un valor predeterminado de 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 temporales

C. Creación de una tabla temporal local

En el ejemplo siguiente se crea una tabla temporal local denominada #myTable. La tabla se especifica con un nombre de tres partes, que comienza con #.

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 tabla

D. Creación de una tabla con un índice de almacén de columnas en clúster

En el ejemplo siguiente se crea una tabla distribuida con un índice de almacén de columnas en clúster. Cada distribución se almacena como un almacén de columnas.

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. El índice de almacén de columnas en clúster afecta a cómo se almacenan los datos dentro de cada distribución.

  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. Creación de un índice ordenado de almacén de columnas agrupado

En el ejemplo siguiente muestra cómo crear un índice de almacén de columnas agrupado ordenado. El índice se ordena en SHIPDATE.

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

Ejemplos de distribución de la tabla

F. Creación de una tabla ROUND_ROBIN

En el ejemplo siguiente se crea una tabla ROUND_ROBIN con tres columnas y sin particiones. Los datos se reparten entre todas las distribuciones. 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.

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

G. Creación de una tabla distribuida por hash en varias columnas (versión preliminar)

En el ejemplo siguiente se crea la misma tabla que el ejemplo anterior. Pero para esta tabla, las filas se distribuyen (en las columnas id y zipCode). La tabla se crea con un índice de almacén de columnas en clúster, 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.

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

H. Creación de una carpeta replicada

En el ejemplo siguiente se crea una tabla replicada similar a los ejemplos anteriores. Las tablas replicadas se copian por completo en cada nodo de ejecución. Con esta copia en cada nodo de ejecución, se reduce el movimiento de datos para las consultas. Este ejemplo se crea con un ÍNDICE AGRUPADO, lo que proporciona una mejor compresión de datos que un montón. Es posible que un montón no contenga suficientes filas para lograr una buena compresión CLUSTERED COLUMNSTORE INDEX.

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

Ejemplos de particiones de tabla

I. Creación de una tabla con particiones

En el ejemplo siguiente se crea la misma tabla que se muestra en el ejemplo A, con la adición de RANGE LEFT particiones en la id columna. Especifica cuatro valores de límite de partición, lo que da como resultado cinco particiones.

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:

  • Partición 1: col <= 10
  • Partición 2: 10 < col <= 20
  • Partición 3: 20 < col <= 30
  • Partición 4: 30 < col <= 40
  • Partición 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:

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

J. Creación de una tabla con particiones con una partición

En el ejemplo siguiente se crea una tabla con particiones con una partición. No especifica ningún valor de límite, lo que da como resultado una partición.

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

K. Creación de una tabla con particiones de fecha

En el ejemplo siguiente se crea una tabla denominada myTable, con la partición en una columna date. Al usar RANGE RIGHT y fechas para los valores de límite, en cada partición se coloca un mes de datos.

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

Se aplica a: Warehouse en Microsoft Fabric

Crea una nueva tabla en un almacén de Microsoft Fabric.

Para más información, consulte Creación de tablas en el almacenamiento de Microsoft Fabric.

Nota:

Para más información sobre Azure Synapse Analytics y Analytics Platform System (PDW), visite CREATE TABLE (Azure Synapse Analytics). Para las plataformas SQL Server y Azure, visite CREATE TABLE y seleccione la versión de producto deseada en la lista desplegable versión.

Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Nombre de la base de datos que contendrá la nueva tabla. El valor predeterminado es la base de datos actual.

schema_name

El esquema para la tabla. La especificación de esquema es opcional. Si se deja vacío, se usa el esquema predeterminado.

table_name

Nombre de la nueva tabla.

column_name

El nombre de una columna de la tabla.

Opciones de columna

NULL | NOT NULL
Especifica si se permiten valores NULL en la columna. El valor predeterminado es NULL.

Tipo de datos

Microsoft Fabric admite los tipos de datos más usados habitualmente. Para obtener más información, consulte Tipos de datos en Microsoft Fabric.

Nota:

De forma similar a SQL Server, hay un límite de 8060 bytes por fila. Esto puede convertirse en un problema de bloqueo para las tablas que tienen muchas columnas o columnas con tipos de datos grandes, como varchar(8000) o varbinary(8000). Las inserciones o actualizaciones que infrinjan el límite de 8060 bytes darán lugar a códigos de error 511 o 611. Para obtener más información, vea Guía de arquitectura de páginas y extensiones.

Para obtener una tabla de conversiones de tipos de datos, consulte la sección Conversiones implícitas de CAST y CONVERT (Transact-SQL). Para obtener más información, vea Tipos de datos y funciones de fecha y hora (Transact-SQL).

A continuación se muestra una lista de los tipos de datos admitidos junto con sus detalles y los bytes de almacenamiento.

datetime2 ( n )
Almacena la fecha y hora del día con 19 y 26 caracteres según el calendario gregoriano. La fecha puede contener el año, el mes y el día. La hora contiene la hora, los minutos y los segundos. Como opción, puede almacenar y mostrar cero a seis dígitos para fracciones de segundos en función del parámetro n. El tamaño de almacenamiento es de 8 bytes. n debe ser un valor entre 0 y 6.

Nota:

No hay precisión predeterminada como en otras plataformas SQL. Debe proporcionar un valor de precisión de 0 a 6.

Valor n Precision Escala
0 19 0
1 21 1
2 22 2
3 23 3
4 24 4
5 25 5
6 26 6

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. El tamaño de almacenamiento es de 3 bytes. La fecha se almacena como un entero.

time ( n )
n debe ser un valor entre 0 y 6.

float [ ( n ) ]
Tipo de datos numérico aproximado que se usa con datos numéricos de punto flotante. 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. n especifica el número de bits utilizados para almacenar la mantisa del float en notación científica. n determina el tamaño de almacenamiento y la precisión. Si se especifica n, debe ser un valor entre 1 y 53. El valor predeterminado de n es 53.

Nota:

No hay precisión predeterminada como en otras plataformas SQL. Debe proporcionar un valor de precisión de 0 a 6.

Valor n Precision Tamaño de almacenamiento
1-24 7 dígitos 4 bytes
25-53 15 dígitos 8 bytes

Azure Synapse Analytics trata n como uno de dos valores posibles. Si 1<= n<= 24, n se trata como 24. Si 25<= n<= 53, n se trata como 53.

El tipo de datos float de Azure Synapse Analytics cumple con el estándar ISO para todos los valores de n desde 1 hasta 53. El sinónimo de precisión doble es float(53).

real [ ( n ) ]
La definición de real es la misma que la de float. El sinónimo ISO para real es float(24) .

decimal [ ( precisión [ , escala ] ) ] | numeric [ ( precisión [ , escala ] ) ]
Almacena números de precisión y escala fijas.

precisión
Número total máximo de dígitos decimales que se pueden almacenar, en cualquiera de los lados del separador decimal. La precisión debe ser un valor comprendido entre 1 y la precisión máxima de 38. La precisión predeterminada es 18.

scale
El número máximo de dígitos decimales que se puede almacenar a la derecha del separador decimal. La escala debe ser un valor comprendido entre 0 y precisión. Solo se puede especificar escala si se especifica precisión. La escala predeterminada es 0 y, por tanto, 0<=escala<precisión. Los tamaños de almacenamiento máximo varían según la precisión.

Precision Bytes de almacenamiento
1-9 5
10-19 9
20-28 13
29-38 17

bigint | int | smallint
Tipos de datos numéricos exactos que utilizan datos enteros. El almacenamiento se muestra en la tabla siguiente.

Tipo de datos Bytes de almacenamiento
bigint 8
int 4
smallint 2

bit
Tipo de datos entero que puede aceptar los valores 1, 0 o `NULL. Azure Synapse Analytics optimiza el almacenamiento de las columnas de tipo bit. Si una tabla contiene ocho columnas o menos de tipo bit, se almacenan como 1 byte. Si hay entre 9-16 columnas de tipo bit, se almacenan como 2 bytes, y así sucesivamente.

varchar [ ( n | MAX ) ] Datos de caracteres Unicode de longitud variable, con una longitud de n bytes. n debe ser un valor entre 1 y 8000. El tamaño de almacenamiento es la longitud real de los datos especificados + 2 bytes. El valor predeterminado de n es 1. La varchar(MAX) columna puede almacenar hasta 1 MB de texto en Warehouse.

Nota:

varchar(MAX) está en versión preliminar en Warehouse. Para obtener más información, consulte Tipos de datos en Microsoft Fabric.

char [ ( n ) ]
Datos de caracteres Unicode de longitud fija, con una longitud de n bytes. n debe ser un valor entre 1 y 8000. El tamaño de almacenamiento es de n bytes. El valor predeterminado de n es 1.

varbinary [ ( n | MAX ) ] Datos binarios de longitud variable. n puede ser un valor entre 1 y 8000. El tamaño de almacenamiento es la longitud real de los datos especificados + 2 bytes. El valor predeterminado de n es 7.
La varbinary(MAX) columna puede almacenar hasta 1 MB de datos en Warehouse.

Nota:

varbinary(MAX) está en versión preliminar en Warehouse. Para obtener más información, consulte Tipos de datos en Microsoft Fabric.

uniqueidentifier
Es un GUID de 16 bytes.

Permisos

Los permisos de Microsoft Fabric son diferentes de los permisos de Azure Synapse Analytics.

El usuario debe ser miembro de los roles De administrador, miembro o colaborador en el área de trabajo tejido.

Limitaciones

Comentarios

Hay una funcionalidad de Transact-SQL limitada en el almacenamiento. Para más información, consulte Área expuesta de TSQL en Microsoft Fabric.

Comportamiento de bloqueo

Toma un bloqueo de esquema-modificación en la tabla, un bloqueo compartido en DATABASE y un bloqueo de esquema-estabilidad en SCHEMA.