CREATE TABLE - Amazon Redshift

CREATE TABLE

Crea una nueva tabla en la base de datos actual. Defina una lista de columnas, cada una de las cuales contiene datos de un tipo distinto. El propietario de la tabla es el emisor del comando CREATE TABLE.

Privilegios necesarios

Los siguientes privilegios son necesarios para CREATE TABLE:

  • Superusuario

  • Usuarios con el privilegio CREATE TABLE

Sintaxis

CREATE [ [LOCAL ] { TEMPORARY | TEMP } ] TABLE [ IF NOT EXISTS ] table_name ( { column_name data_type [column_attributes] [ column_constraints ] | table_constraints | LIKE parent_table [ { INCLUDING | EXCLUDING } DEFAULTS ] } [, ... ] ) [ BACKUP { YES | NO } ] [table_attributes] where column_attributes are: [ DEFAULT default_expr ] [ IDENTITY ( seed, step ) ] [ GENERATED BY DEFAULT AS IDENTITY ( seed, step ) ] [ ENCODE encoding ] [ DISTKEY ] [ SORTKEY ] [ COLLATE CASE_SENSITIVE | COLLATE CASE_INSENSITIVE ] and column_constraints are: [ { NOT NULL | NULL } ] [ { UNIQUE | PRIMARY KEY } ] [ REFERENCES reftable [ ( refcolumn ) ] ] and table_constraints are: [ UNIQUE ( column_name [, ... ] ) ] [ PRIMARY KEY ( column_name [, ... ] ) ] [ FOREIGN KEY (column_name [, ... ] ) REFERENCES reftable [ ( refcolumn ) ] and table_attributes are: [ DISTSTYLE { AUTO | EVEN | KEY | ALL } ] [ DISTKEY ( column_name ) ] [ [COMPOUND | INTERLEAVED ] SORTKEY ( column_name [,...]) | [ SORTKEY AUTO ] ] [ ENCODE AUTO ]

Parámetros

LOCAL

Opcional. Aunque esta palabra clave se acepta en la instrucción, no tiene efecto en Amazon Redshift.

TEMPORARY | TEMP

Palabra clave que crea una tabla temporal que solo se puede ver dentro de la sesión actual. La tabla se elimina automáticamente al final de la sesión en la que se creó. La tabla temporal puede tener el mismo nombre que una tabla permanente. La tabla temporal se crea en un esquema separado específico de la sesión. (No se puede especificar un nombre para este esquema). Este esquema temporal se convierte en el primer esquema en la ruta de búsqueda, por lo que la tabla temporal tiene prioridad sobre la tabla permanente a menos que califique el nombre de la tabla con el nombre del esquema para obtener acceso a la tabla permanente. Para obtener más información acerca de esquemas y prioridades, consulte search_path.

nota

De forma predeterminada, los usuarios de base de datos tienen permiso para crear tablas temporales por su pertenencia automática al grupo PUBLIC. Para denegarle este privilegio a un usuario, anule el privilegio TEMP del grupo PUBLIC y, luego, conceda explícitamente el privilegio TEMP solo a usuarios o grupos de usuarios específicos.

IF NOT EXISTS

Cláusula que indica que si la tabla especificada ya existe, el comando no debe realizar cambios y debe devolver un mensaje en el que se indique que la tabla existe, en lugar de detenerse con un error. Tenga en cuenta que la tabla existente puede ser completamente diferente a la que podría haberse creado; solo se compara el nombre de la tabla.

Esta cláusula es útil cuando se realiza scripting, para que el script no produzca un error si CREATE TABLE intenta crear una tabla que ya existe.

table_name

Nombre de la tabla que se creará.

importante

Si especifica un nombre de tabla que comienza con "#", la tabla se crea como una tabla temporal. A continuación, se muestra un ejemplo:

create table #newtable (id int);

También hace referencia a la tabla con el carácter “#”. Por ejemplo:

select * from #newtable;

La longitud máxima del nombre de la tabla es de 127 bytes; los nombres más largos se truncan en 127 bytes. Puede usar caracteres multibyte UTF-8 de hasta un máximo de cuatro bytes. Amazon Redshift aplica una cuota para el número de tablas por clúster según el tipo de nodo, incluidas las tablas temporales definidas por el usuario y las tablas temporales creadas por Amazon Redshift durante el procesamiento de consultas o el mantenimiento del sistema. De manera opcional, puede clasificar el nombre de la tabla con el nombre de la base de datos y del esquema. En el siguiente ejemplo, el nombre de base de datos es tickit, el nombre de esquema es public y el nombre de tabla es test.

create table tickit.public.test (c1 int);

Si no existe la base de datos o el esquema, no se crea la tabla y la instrucción devuelve un error. No puede crear tablas o vistas en las bases de datos del sistema template0, template1, padb_harvest o sys:internal.

Si se proporciona un nombre de esquema, la tabla nueva se crea en ese esquema (suponiendo que el creador tiene acceso al esquema). El nombre de la tabla debe ser un nombre único para ese esquema. Si no se especifica un esquema, se crea la tabla a través del esquema de la base de datos actual. Si está creando una tabla temporal, no puede especificar un nombre de esquema, ya que las tablas temporales existen en un esquema especial.

Pueden existir varias tablas temporales con el mismo nombre y al mismo tiempo en la misma base de datos si se crean en sesiones separadas porque las tablas se asignan a diferentes esquemas. Para obtener más información acerca de los nombres válidos, consulte Nombres e identificadores.

column_name

Nombre de una columna que se creará en la tabla nueva. La longitud máxima del nombre de la columna es de 127 bytes; los nombres más largos se truncan en 127 bytes. Puede usar caracteres multibyte UTF-8 de hasta un máximo de cuatro bytes. La cantidad máxima de columnas que se pueden definir en una única tabla es 1 600. Para obtener más información acerca de los nombres válidos, consulte Nombres e identificadores.

nota

Si está creando una "tabla ancha", asegúrese de que la lista de columnas no supere los límites de ancho de las filas para los resultados intermedios durante la carga y el procesamiento de consultas. Para obtener más información, consulte Notas de uso.

data_type

El tipo de datos de la columna que se crea. Para las columnas CHAR y VARCHAR, puede usar la palabra clave MAX en lugar de declarar una longitud máxima. MAX establece la longitud máxima en 4096 bytes para CHAR o 65 535 bytes para VARCHAR. El tamaño máximo del objeto GEOMETRY es 1 048 447 bytes.

Para obtener información acerca de los tipos de datos compatibles con Amazon Redshift, consulte Tipos de datos.

DEFAULT default_expr

Cláusula que asigna un valor de datos predeterminado para la columna. El tipo de datos de default_expr debe coincidir con el tipo de datos de la columna. El valor DEFAULT debe ser una expresión sin variables. No se permiten subconsultas, referencias cruzadas a otras columnas de la tabla actual ni funciones definidas por el usuario.

La expresión default_expr se utiliza en las operaciones INSERT que no especifican un valor para la columna. Si no se especifica un valor predeterminado, el valor predeterminado para la columna es nulo.

Si una operación COPY con una lista de columnas definida omite una columna que tiene el valor DEFAULT, el comando COPY inserta el valor de default_expr (expresión_predeterminada).

IDENTITY(seed, step)

Cláusula que especifica que la columna es una columna IDENTITY. Las columnas IDENTITY contienen valores únicos generados automáticamente. El tipo de datos de una columna IDENTITY debe ser INT o BIGINT.

Cuando agrega filas utilizando la instrucción INSERT o INSERT INTO [tablename] VALUES(), estos valores comienzan por el valor especificado como seed (valor de inicialización) y van aumentando según el número especificado en step (paso).

Cuando la tabla se carga mediante la instrucción INSERT INTO [tablename] SELECT * FROM o COPY , los datos se cargan en paralelo y se distribuyen a los sectores del nodo. Para asegurarse de que los valores de identidad sean únicos, Amazon Redshift omite una serie de valores cuando crea los valores de identidad. Los valores de identidad son únicos, pero es posible que el orden no coincida con el de los archivos de origen.

GENERATED BY DEFAULT AS IDENTITY(seed, step)

Cláusula que especifica que la columna es una columna IDENTITY predeterminada y permite asignar automáticamente un valor único a la columna. El tipo de datos de una columna IDENTITY debe ser INT o BIGINT. Cuando agrega filas sin valores, estos valores comienzan con el valor especificado como seed (valor de inicialización) y van aumentando según el número especificado como step (paso). Para obtener más información acerca de cómo se generan los valores, consulte IDENTITY.

Además, durante las operaciones INSERT, UPDATE o COPY, puede proporcionar un valor sin EXPLICIT_IDS. Amazon Redshift utiliza ese valor para insertarlo en la columna de identidad en lugar de utilizar el valor generado por el sistema. El valor puede ser un duplicado, un valor inferior al valor de inicialización (seed) o un valor comprendido entre los valores de paso (step). Amazon Redshift no verifica la singularidad de los valores de la columna. El hecho de que se proporcione un valor no afecta al siguiente valor generado por el sistema.

nota

Si necesita valores eclusivos en la columna, no agregue un valor duplicado. En su lugar, agregue un valor único que sea inferior al valor de inicialización (seed) o que esté comprendido entre los valores de paso (step).

Tenga en cuenta lo siguiente sobre las columnas de identidad predeterminadas:

  • Las columnas de identidad predeterminadas son NOT NULL. No se pueden insertar valores NULL.

  • Para insertar un valor generado en una columna de identidad predeterminada, utilice la palabra clave DEFAULT.

    INSERT INTO tablename (identity-column-name) VALUES (DEFAULT);
  • El hecho de anular los valores de una columna de identidad predeterminada no afecta al siguiente valor generado.

  • No puede agregar una columna de identidad predeterminada con la instrucción ALTER TABLE ADD COLUMN.

  • Puede anexar una columna de identidad predeterminada con la instrucción ALTER TABLE APPEND.

ENCODE encoding

La codificación de compresión de una columna. ENCODE AUTO es la opción predeterminada para las tablas. Amazon Redshift administra de forma automática la codificación de compresión para todas las columnas de la tabla. Si especifica la codificación de compresión para alguna columna de la tabla, esta ya no tendrá la opción ENCODE AUTO configurada. Amazon Redshift ya no administra automáticamente la codificación de compresión para todas las columnas de la tabla. Puede especificar la opción ENCODE AUTO para la tabla con el fin de permitir que Amazon Redshift administre automáticamente la codificación de compresión para todas las columnas de la tabla.

Amazon Redshift asigna de forma automática una codificación de compresión inicial a las columnas para las que no se especifica la codificación de compresión de la siguiente manera:

  • Por defecto, se asigna una compresión RAW a todas las columnas de tablas temporales.

  • A las columnas que están definidas como claves de ordenación se les asigna una compresión RAW.

  • A las columnas que están definidas como tipos de datos BOOLEAN, REAL, DOUBLE PRECISION, GEOMETRY o GEOGRAPHY se les asigna una compresión RAW.

  • A las columnas que se definen como SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP o TIMESTAMPTZ se les asigna la compresión AZ64.

  • A las columnas que se definen como CHAR, VARCHAR o VARBYTE se les asigna la compresión LZO.

nota

Si no desea que una columna se comprima, especifique explícitamente la codificación RAW.

Se admiten los siguientes compression encodings:

  • AZ64

  • BYTEDICT

  • DELTA

  • DELTA32K

  • LZO

  • MOSTLY8

  • MOSTLY16

  • MOSTLY32

  • RAW (sin comprimir)

  • RUNLENGTH

  • TEXT255

  • TEXT32K

  • ZSTD

DISTKEY

Palabra clave que especifica que la columna es la clave de distribución de la tabla. Solo una columna de una tabla puede ser la clave de distribución. Puede usar la palabra clave DISTKEY después del nombre de una columna o como parte de la definición de la tabla utilizando la sintaxis DISTKEY (column_name). Los dos métodos tienen el mismo efecto. Para obtener más información, consulte el parámetro DISTSTYLE más adelante en este tema.

El tipo de datos de una columna de clave de distribución puede ser algunas de las siguientes opciones: BOOLEAN, REAL, DOUBLE PRECISION, SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP, TIMESTAMPTZ, CHAR o VARCHAR.

SORTKEY

Palabra clave que especifica que la columna es la clave de ordenación de la tabla. Cuando carga datos en la tabla, los datos se ordenan por una o más columnas que se designan como claves de ordenación. Puede usar la palabra clave SORTKEY después de un nombre de columna para especificar una clave de ordenación de una única columna, o puede especificar una o varias columnas como columnas de clave de ordenación de la tabla utilizando la sintaxis SORTKEY (column_name (nombre_de_columna) [, ...]). Solo se crean claves de ordenación compuestas con esta sintaxis.

Puede definir un máximo de 400 columnas SORTKEY por tabla.

El tipo de datos de una columna de clave de ordenación puede ser alguna de las siguientes opciones: BOOLEAN, REAL, DOUBLE PRECISION, SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP, TIMESTAMPTZ, CHAR o VARCHAR.

COLLATE CASE_SENSITIVE | COLLATE CASE_INSENSITIVE

Se trata de una cláusula que especifica si la búsqueda o la comparación de cadenas en la columna es CASE_SENSITIVE o CASE_INSENSITIVE. El valor predeterminado es el mismo que la configuración actual de distinción entre mayúsculas y minúsculas de la base de datos.

Para encontrar información de la intercalación de bases de datos, utilice el siguiente comando:

SELECT db_collation(); db_collation ---------------- case_sensitive (1 row)
NOT NULL | NULL

NOT NULL indica que la columna no puede contener valores nulos. NULL, el valor predeterminado, especifica que la columna acepta valores nulos. Las columnas IDENTITY están declaradas NOT NULL por defecto.

UNIQUE

Palabra clave que especifica que la columna puede contener solo valores únicos. El comportamiento de la restricción única de la tabla es el mismo que el de las restricciones de columna, con la capacidad adicional de abarcar varias columnas. Para definir una restricción de tabla única, consulte la sintaxis UNIQUE ( column_name [, ... ] ).

importante

Las restricciones únicas son informativas y el sistema no fuerza su aplicación.

PRIMARY KEY

Palabra clave que especifica que la columna es la clave principal de la tabla. Solo una columna se puede definir como la clave principal al utilizar una definición de columna. Para definir una restricción de tabla con una clave principal de varias columnas, use la sintaxis PRIMARY KEY ( column_name [, ... ] ).

Identificar una columna como clave principal proporciona metadatos acerca del diseño del esquema. Una clave principal implica que otras tablas pueden contar con este conjunto de columnas como un identificador único para las filas. Una clave principal puede especificarse para una tabla, ya sea como restricción de columna o restricción de tabla. La restricción de clave principal debe designar un conjunto de columnas diferente a los otros conjuntos de columnas denominados por cualquier restricción única definida para la misma tabla.

Las columnas CLAVE PRINCIPAL también se definen como NOT NULL.

importante

Las restricciones de clave principal son solo con fines informativos. El sistema no fuerza su aplicación, pero el planificador las utiliza.

References reftable [ ( refcolumn ) ]

Cláusula que especifica una restricción de clave externa, que implica que la columna debe contener solo los valores que coinciden con los valores en la columna referenciada de alguna fila de la tabla referenciada. Las columnas referenciadas deben ser las columnas de una clave única o principal en la tabla referenciada.

importante

Las restricciones de clave externa son solo con fines informativos. El sistema no fuerza su aplicación, pero el planificador las utiliza.

LIKE parent_table [ { INCLUDING | EXCLUDING } DEFAULTS ]

Una cláusula que especifica una tabla existente desde la cual la nueva tabla copia automáticamente nombres de columna, tipos de datos y restricciones NOT NULL. La tabla nueva y la tabla principal están desacopladas, por lo que los cambios realizados en la tabla principal no se aplicarán a la tabla nueva Las expresiones predeterminadas para las definiciones de columnas copiadas se copian solo si INCLUDING DEFAULTS está especificado. El comportamiento predeterminado es excluir las expresiones predeterminadas, para que todas las columnas de la tabla nueva tengan valores predeterminados nulos.

Las tablas creadas con la opción LIKE no heredan restricciones de clave principal y externa. Las tablas LIKE heredan el estilo de distribución, las claves de ordenación y las propiedades BACKUP y NULL, pero no se pueden configurar de forma explícita en la instrucción CREATE TABLE … LIKE.

BACKUP { YES | NO }

Una cláusula que especifica si la tabla debe incluirse en instantáneas de clústeres manuales y automáticos. Para las tablas, como las tablas provisionales que no contienen datos críticos, especifique BACKUP NO para ahorrar tiempo de procesamiento al momento de crear instantáneas y restaurar contenido a partir de ellas, y para reducir espacio de almacenamiento en Amazon Simple Storage Service. El ajuste BACKUP NO no tiene efecto en la replicación automática de datos a otros nodos dentro del clúster, por lo que las tablas con BACKUP NO especificado se restauran en un error del nodo. El valor predeterminado es BACKUP YES.

DISTSTYLE { AUTO | EVEN | KEY | ALL }

Se trata de la palabra clave que define el estilo de distribución de datos para toda la tabla. Amazon Redshift distribuye las filas de una tabla entre los nodos informáticos en función del estilo de distribución especificado en la tabla. El valor predeterminado es AUTO.

El estilo de distribución que selecciona para las tablas afecta el rendimiento global de la base de datos. Para obtener más información, consulte Uso de estilos de distribución de datos. Los posibles estilos de distribución son los siguientes:

  • AUTO: Amazon Redshift asigna un estilo de distribución óptimo en función de los datos de la tabla. Por ejemplo, si se especifica el estilo de distribución AUTO, Amazon Redshift asigna inicialmente el estilo de distribución ALL a una tabla pequeña. Cuando la tabla crezca, Amazon Redshift podría cambiar el estilo de distribución a KEY y elegir la clave principal (o una columna de la clave primaria compuesta) como DISTKEY. Si la tabla aumenta de tamaño y ninguna de las columnas es adecuada para ser DISTKEY, Amazon Redshift cambia el estilo de distribución a EVEN. El cambio en el estilo de distribución se produce en segundo plano y tiene un impacto mínimo en las consultas de los usuarios.

    Para ver el estilo de distribución aplicado a una tabla, consulte la tabla de catálogo del sistema PG_CLASS. Para obtener más información, consulte Visualización de los estilos de distribución.

  • EVEN: Los datos de la tabla se distribuyen de manera uniforme en los nodos de un clúster en una distribución de turnos rotativos. Los ID de filas se utilizan para determinar la distribución, y se distribuye casi la misma cantidad de filas a cada nodo.

  • KEY: Los datos se distribuyen por los valores en la columna DISTKEY. Cuando establece las columnas de unión de las tablas de unión como claves de distribución, las filas de combinación de ambas tablas se colocan en los nodos de computación. Cuando se colocan los datos, el optimizador puede realizar combinaciones de manera más eficiente. Si especifica DISTSTYLE KEY, debe nombrar una columna DISTKEY, ya sea para la tabla o como parte de la definición de la columna. Para obtener más información, consulte el parámetro DISTKEY mencionado en este tema.

  • ALL: Una copia de toda la tabla se distribuye a cada nodo. El estilo de distribución garantiza que todas las filas obligatorias para cualquier combinación estén disponibles en todos los nodos, pero multiplica los requisitos de almacenamiento y aumenta el tiempo de carga y mantenimiento de la tabla. La distribución ALL puede mejorar el tiempo de ejecución cuando se usa con determinadas tablas de dimensión en las que la distribución KEY no es adecuada. No obstante, es conveniente analizar las mejoras de rendimiento en relación con los costos de mantenimiento.

DISTKEY ( column_name )

Restricción que especifica la columna que se utilizará como la clave de distribución de la tabla. Puede usar la palabra clave DISTKEY detrás del nombre de columna o como parte de la definición de tabla utilizando la sintaxis DISTKEY (column_name). Los dos métodos tienen el mismo efecto. Para obtener más información, consulte el parámetro DISTSTYLE mencionado en este tema.

[COMPOUND | INTERLEAVED ] SORTKEY ( column_name [,...]) | [ SORTKEY AUTO ]

Especifica una o más claves de ordenación para la tabla. Cuando carga datos en la tabla, los datos se ordenan por las columnas que se designan como claves de ordenación. Puede usar la palabra clave SORTKEY después del nombre de una columna para especificar una clave de ordenación de una única columna, o puede especificar una o más columnas como las columnas de clave de ordenación para la tabla a través de la sintaxis SORTKEY (column_name [ , ... ] ).

Puede especificar el estilo de ordenación COMPOUND o INTERLEAVED. Si especifica SORTKEY con columnas, el valor predeterminado es COMPOUND. Para obtener más información, consulte Uso de claves de ordenación.

Si no especifica ninguna opción de claves de ordenación, el valor predeterminado es AUTO.

Puede definir un máximo de 400 columnas COMPOUND SORTKEY u 8 columnas INTERLEAVED SORTKEY por tabla.

AUTO

Especifica que Amazon Redshift asigna una clave de ordenación óptima en función de los datos de la tabla. Por ejemplo, si se especifica la clave de ordenación AUTO, Amazon Redshift inicialmente no asigna ninguna clave de ordenación a una tabla. Si Amazon Redshift determina que una clave de ordenación mejorará el rendimiento de las consultas, dicho servicio podría cambiar la clave de ordenación de la tabla. La ordenación real de la tabla se realiza con la ordenación automática de la tabla. Para obtener más información, consulte Clasificación automática de tablas.

Amazon Redshift no modifica las tablas que ya tienen claves de ordenación o de distribución. Con una excepción, si una tabla tiene una clave de distribución que nunca se ha utilizado en una operación JOIN, la clave podría modificarse si Amazon Redshift determina que hay una clave mejor.

Para ver la clave de ordenación de una tabla, consulte la vista de catálogo del sistema SVV_TABLE_INFO. Para obtener más información, consulte SVV_TABLE_INFO. Si desea ver las recomendaciones para tablas de Advisor de Amazon Redshift, consulte la vista de catálogo del sistema SVV_ALTER_TABLE_RECOMMENDATIONS. Para obtener más información, consulte SVV_ALTER_TABLE_RECOMMENDATIONS. Para ver las acciones llevadas a cabo por Amazon Redshift, consulte la vista de catálogo del sistema SVL_AUTO_WORKER_ACTION. Para obtener más información, consulte SVL_AUTO_WORKER_ACTION.

COMPOUND

Especifica que los datos se ordenan a través de una clave compuesta formada por todas las columnas enumeradas en el orden en que aparecen en la lista. Una clave de ordenación compuesta es útil cuando una consulta analiza filas según el orden de las columnas de ordenación. Los beneficios del rendimiento de ordenación con una clave compuesta se reducen cuando las consultas dependen de columnas de ordenación secundarias. Puede definir una cantidad máxima de 400 columnas COMPOUND SORTKEY por tabla.

INTERLEAVED

Especifica que los datos se ordenan a través de una clave de ordenación intercalada. Se puede especificar una cantidad máxima de ocho columnas para una clave de ordenación intercalada.

Una ordenación intercalada otorga el mismo peso a cada columna o subconjunto de columnas de la clave de ordenación. Por lo tanto, las consultas no dependen del orden que tengan las columnas en la clave de ordenación. Cuando una consulta usa una o más columnas de ordenación secundarias, la ordenación intercalada mejora considerablemente el rendimiento de la consulta. La ordenación intercalada tiene un pequeño costo general para las operaciones de carga y limpieza de datos.

importante

No utilice una clave de ordenación intercalada con atributos monótonamente crecientes, como columnas de identidad, fechas o marcas temporales.

ENCODE AUTO

Permite a Amazon Redshift ajustar de forma automática el tipo de codificación de todas las columnas de la tabla para optimizar el rendimiento de la consulta. ENCODE AUTO conserva los tipos de codificación iniciales que se especifican durante la creación de la tabla. Luego, si Amazon Redshift determina que un nuevo tipo de codificación puede mejorar el rendimiento de la consulta, Amazon Redshift puede cambiar el tipo de codificación de las columnas de la tabla. ENCODE AUTO es la opción predeterminada si no se especifica un tipo de codificación en cualquiera de las columnas de la tabla.

UNIQUE ( column_name [,...] )

Restricción que especifica que un grupo de una o más columnas de una tabla puede contener solo valores únicos. El comportamiento de la restricción única de la tabla es el mismo que el de las restricciones de columna, con la capacidad adicional de abarcar varias columnas. En el contexto de las restricciones únicas, los valores nulos no se consideran iguales. Cada restricción de tabla única debe designar un conjunto de columnas diferente al conjunto de columnas denominado por otra restricción de clave única o principal definida para la tabla.

importante

Las restricciones únicas son informativas y el sistema no fuerza su aplicación.

PRIMARY KEY ( column_name [,...] )

Restricción que especifica que una columna o un grupo de columnas de una tabla puede contener solo valores no nulos (no duplicados). Identificar un conjunto de columnas como clave principal también proporciona metadatos acerca del diseño del esquema. Una clave principal implica que otras tablas pueden contar con este conjunto de columnas como un identificador único para las filas. Una clave principal puede especificarse para una tabla, ya sea como restricción de columna única o restricción de tabla. La restricción de clave principal debe designar un conjunto de columnas diferente a los otros conjuntos de columnas denominados por cualquier restricción única definida para la misma tabla.

importante

Las restricciones de clave principal son solo con fines informativos. El sistema no fuerza su aplicación, pero el planificador las utiliza.

FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn ) ]

Restricción que especifica una restricción de clave externa, que requiere que un grupo de una o más columnas de la nueva tabla debe contener solo valores que coincidan con los valores en la columna o columnas a las que se hace referencia de alguna fila de la tabla referenciada. Si se omite refcolumn , se usa la clave principal de reftable. Las columnas referenciadas deben ser las columnas de una clave única o principal en la tabla referenciada.

importante

Las restricciones de clave externa son solo con fines informativos. El sistema no fuerza su aplicación, pero el planificador las utiliza.

Notas de uso

Las restricciones de unicidad, clave principal y clave externa son solo informativas, Amazon Redshift no las aplica al rellena una tabla. Por ejemplo, si inserta datos en una tabla con dependencias, la inserción puede realizarse correctamente aunque infrinja la restricción. No obstante, las claves principales y externas se utilizan como sugerencias de planificación y deben estar declaradas si el proceso de Extract, Transform, Load (ETL, Extracción, transformación y carga) o algún otro proceso de su aplicación exige su integridad. Para obtener información acerca de cómo eliminar una tabla con dependencias, consulte DROP TABLE.

Límites y cuotas

Tenga en cuenta los siguientes límites al crear una tabla.

  • Existe un límite para el número máximo de tablas en un clúster por tipo de nodo. Para obtener más información, consulte Límites en la Guía de administración de Amazon Redshift.

  • La cantidad máxima de caracteres para el nombre de una tabla es 127.

  • La cantidad máxima de columnas que se pueden definir en una única tabla es 1 600.

  • La cantidad máxima de columnas SORTKEY que se pueden definir en una única tabla es 400.

Resumen de ajustes de nivel de columna y ajustes de nivel de tabla

Se pueden configurar varios atributos y ajustes al nivel de columna o al nivel de tabla. En algunos casos, configurar un atributo o una restricción al nivel de columna o al nivel de tabla tiene el mismo efecto. En otros casos, producen resultados diferentes.

La siguiente lista resume los ajustes de nivel de columna y de nivel de tabla:

DISTKEY

No hay diferencia en el efecto si se configura al nivel de columna o al nivel de tabla.

Si se establece DISTKEY, ya sea al nivel de columna o al nivel de tabla, DISTSTYLE debe estar configurado en KEY o no estar configurado. DISTSTYLE solo puede configurarse al nivel de tabla.

SORTKEY

Si se configura al nivel de columna, SORTKEY debe ser una única columna. Si SORTKEY se configura al nivel de tabla, una o más columnas pueden formar una clave de ordenación compuesta o intercalada.

COLLATE CASE_SENSITIVE | COLLATE CASE_INSENSITIVE

Amazon Redshift no admite la modificación de la distinción entre mayúsculas y minúsculas de una columna. Cuando agrega una columna nueva a la tabla, Amazon Redshift utiliza el valor predeterminado para la distinción entre mayúsculas y minúsculas. Amazon Redshift no admite la palabra clave COLLATE cuando se anexa una columna nueva.

Para obtener información sobre cómo crear bases de datos mediante la intercalación de bases de datos, consulte CREATE DATABASE.

Para obtener información acerca de la función COLLATE, consulte Función COLLATE.

UNIQUE

Al nivel de columna, una o más claves pueden configurarse en UNIQUE. La restricción UNIQUE se aplica a cada columna individualmente. Si UNIQUE se configura al nivel de tabla, una o más columnas pueden formar una restricción UNIQUE compuesta.

PRIMARY KEY

Si se configura al nivel de columna, PRIMARY KEY debe ser una única columna. Si PRIMARY KEY se configura al nivel de tabla, una o más columnas pueden formar una clave principal compuesta.

FOREIGN KEY

No hay diferencia en el efecto si se configura FOREIGN KEY al nivel de columna o al nivel de tabla. Al nivel de columna, la sintaxis es REFERENCES reftable [ ( refcolumn )].

Distribución de datos entrantes

Cuando el esquema de distribución hash de los datos entrantes coincide con el de la tabla de destino, no es necesaria la distribución física de datos cuando se cargan los datos. Por ejemplo, si se configura una clave de distribución para la nueva tabla y los datos se insertan desde otra tabla que está distribuida en la misma columna clave, los datos se cargan en el lugar a través de los mismos nodos y sectores. No obstante, si las tablas de origen y destino se configuran en distribución EVEN, los datos se redistribuyen en la tabla de destino.

Tablas anchas

Puede crear una tabla muy ancha pero no tener la capacidad de realizar el procesamiento de consultas, como instrucciones INSERT o SELECT, en la tabla. El ancho máximo de una tabla con columnas de ancho fijo, como CHAR, es 64 KB - 1 (o 65 535 bytes). Si una tabla contiene columnas VARCHAR, la tabla puede tener un ancho declarado superior sin devolver un error, ya que, en las columnas VARCHARS, el ancho declarado completo no afecta al límite calculado de procesamiento de consultas. El límite de procesamiento de consultas en vigor para las columnas VARCHAR variará en función a un número de factores.

Si la tabla es demasiado ancha para insertar o seleccionar, recibe el siguiente error.

ERROR: 8001 DETAIL: The combined length of columns processed in the SQL statement exceeded the query-processing limit of 65535 characters (pid:7627)

Ejemplos

Para ver ejemplos que muestran cómo usar el comando CREATE TABLE, consulte el tema Ejemplos.