

# CREATE TABLE
<a name="create-table"></a>

Crea una tabla con el nombre y los parámetros que especifica. 

**nota**  
Esta página contiene información de referencia resumida. Para obtener más información sobre la creación de tablas en Athena y una declaración de `CREATE TABLE` de ejemplo, consulte [Creación de tablas en Athena](creating-tables.md). Para ver un ejemplo de cómo crear una base de datos, crear una tabla y ejecutar una consulta `SELECT` en una tabla en Athena, consulte [Introducción](getting-started.md).

## Sinopsis
<a name="synopsis"></a>

```
CREATE EXTERNAL TABLE [IF NOT EXISTS]
 [db_name.]table_name [(col_name data_type [COMMENT col_comment] [, ...] )]
 [COMMENT table_comment]
 [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
 [CLUSTERED BY (col_name, col_name, ...) INTO num_buckets BUCKETS]
 [ROW FORMAT row_format]
 [STORED AS file_format] 
 [WITH SERDEPROPERTIES (...)]
 [LOCATION 's3://amzn-s3-demo-bucket/[folder]/']
 [TBLPROPERTIES ( ['has_encrypted_data'='true | false',] ['encryption_option'='SSE_S3 | SSE_KMS | CSE_KMS',] ['kms_key'='aws_kms_key_arn',] ['classification'='aws_glue_classification',] property_name=property_value [, ...] ) ]
```

## Parameters
<a name="parameters"></a>

**EXTERNAL**  
Especifica que la tabla se basa en un archivo de datos subyacente que existe en Amazon S3, en la ubicación `LOCATION` que especifique. Utilice siempre la palabra clave `EXTERNAL` excepto al crear tablas de [Iceberg](querying-iceberg-creating-tables.md). Si utiliza `CREATE TABLE` sin la palabra clave `EXTERNAL` para tablas que no son Iceberg, Athena emite un error. Cuando cree una tabla externa, los datos a los que hace referencia deben respetar el formato predeterminado o el formato que especifique con las cláusulas `ROW FORMAT`, `STORED AS` y `WITH SERDEPROPERTIES`.

**[IF NOT EXISTS]**  
Este parámetro comprueba si ya existe una tabla con el mismo nombre. Si es así, el parámetro devuelve `TRUE` y Amazon Athena cancela la acción `CREATE TABLE`. Como la cancelación se produce antes de que Athena llame al catálogo de datos, no emite ningún evento AWS CloudTrail.

**[db\_name.]table\_name**  
Especifica un nombre para la tabla que se creará. El parámetro opcional `db_name` especifica la base de datos donde existe la tabla. Si se omite, se presupondrá que se utiliza la base de datos actual. Si el nombre de la tabla incluye números, ponga `table_name` entre comillas; por ejemplo `"table123"`. Si `table_name` comienza con un guion bajo, utilice acentos graves; por ejemplo: ``_mytable``. Los caracteres especiales, salvo el guion bajo, no se admiten.  
En los nombres de tabla de Athena no se distingue entre mayúsculas y minúsculas. Sin embargo, si utiliza Apache Spark, este requiere que los nombres de las tablas estén en minúsculas. Para ver las restricciones para los nombres de las tablas en Athena, consulte [Nombrar tablas, bases de datos y columnas](tables-databases-columns-names.md).

**[ ( col\_name data\_type [COMMENT col\_comment] [, ...] ) ]**  
Especifica el nombre de cada columna que se va a crear, junto con el tipo de datos de la columna. Los nombres de columnas no permiten caracteres especiales que no sean guiones bajos `(_)`. Si `col_name` comienza con un guion bajo, ponga el nombre de la columna entre acentos graves; por ejemplo ``_mycolumn``. Para ver las restricciones para los nombres de las columnas en Athena, consulte [Nombrar tablas, bases de datos y columnas](tables-databases-columns-names.md).  
El valor `data_type` puede ser cualquiera de los siguientes:  
+ `boolean` – los valores son `true` y `false`.
+ `tinyint`: un número entero firmado de 8 bits en formato de complemento de dos, con un valor mínimo de -2^7 y un valor máximo de 2^7-1.
+ `smallint`: un número entero firmado de 16 bits en formato de complemento de dos, con un valor mínimo de -2^15 y un valor máximo de 2^15-1.
+ `int`: en las consultas de lenguaje de definición de datos (DDL), como `CREATE TABLE`, utilice la palabra clave `int` para representar un entero. En otras consultas, utilice la palabra clave `integer`, donde `integer` se representa como un valor firmado de 32 bits en formato de complemento a dos, con un valor mínimo de -2^31 y un valor máximo de 2^31-1. En el controlador JDBC se devuelve `integer` a fin de garantizar la compatibilidad con las aplicaciones de análisis empresarial.
+ `bigint`: un número entero firmado de 64 bits en formato de complemento de dos, con un valor mínimo de -2^63 y un valor máximo de 2^63-1.
+ `double`: un número firmado de punto flotante de doble precisión de 64 bits. El rango es de 4.94065645841246544e-324d a 1.79769313486231570e\+308d, positivo o negativo. `double` sigue el estándar IEEE para la aritmética de punto flotante (IEEE 754).
+ `float`: un número firmado de punto flotante de precisión simple de 32 bits. El rango es de 1.40129846432481707e-45 a 3.40282346638528860e\+38, positivo o negativo. `float` sigue el estándar IEEE para la aritmética de punto flotante (IEEE 754). Equivalente a `real` en Presto. En Athena, utilice `float` en instrucciones DDL como `CREATE TABLE` y `real` en funciones SQL como `SELECT CAST`. El rastreador de AWS Glue devuelve valores en `float`, y Athena traduce los tipos `real` y `float` internamente (consulte las notas de la versión [5 de junio de 2018](release-notes.md#release-note-2018-06-05)).
+ `decimal [ ({{precision}}, {{scale}}) ]`, donde `{{precision}}` es el número total de dígitos y `{{scale}}` (opcional) es el número de dígitos con parte fraccional, el valor predeterminado es 0. Por ejemplo, utilice estas definiciones de tipo: `decimal(11,5)`, `decimal(15)`. El valor máximo para {{precisión}} es 38 y el valor máximo para {{escala}} también es 38.

  Para especificar valores decimales como literales como, por ejemplo, al seleccionar filas con un valor decimal específico en una expresión DDL de consulta, especifique la definición de tipo `decimal` y enumere el valor decimal como literal (entre comillas simples) en su consulta, como en este ejemplo: `decimal_value = decimal '0.12'`.
+ `char` – datos de caracteres de longitud fija, con una longitud especificada comprendida entre 1 y 255 como, por ejemplo `char(10)`. Para obtener más información, consulte [Tipo de datos Hive CHAR](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-char).
+ `varchar` – datos de caracteres de longitud variable, con una longitud especificada comprendida entre 1 y 65 535 como, por ejemplo `varchar(10)`. Para obtener más información, consulte [Tipo de datos Hive VARCHAR](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-varchar). 
+ `string`: un literal de cadena entre comillas simples o dobles.
**nota**  
Los tipos de datos que no son de cadena no se pueden convertir en `string` en Athena; en su lugar, se pueden convertir en `varchar`.
+ `binary`: (para los datos en formato Parquet)
+ `date` – Una fecha en formato ISO, como `{{YYYY}}-{{MM}}-{{DD}}`. Por ejemplo, `date '2008-09-15'`. Una excepción es OpenCSVSerDe, que utiliza el número de días transcurridos desde el 1 de enero de 1970. Para obtener más información, consulte [Open CSV SerDe para el procesamiento de CSV](csv-serde.md).
+ `timestamp`: instante de fecha y hora en un formato compatible con [https://docs.oracle.com/javase/8/docs/api/java/sql/Timestamp.html](https://docs.oracle.com/javase/8/docs/api/java/sql/Timestamp.html) hasta una resolución máxima de milisegundos, como `{{yyyy}}-{{MM}}-{{dd}} {{HH}}:{{mm}}:{{ss}}[.f{{...}}]`. Por ejemplo, `timestamp '2008-09-15 03:04:05.324'`. Una excepción es OpenCSVSerDe, que utiliza datos de `TIMESTAMP` en formato numérico UNIX (por ejemplo, `1579059880000`). Para obtener más información, consulte [Open CSV SerDe para el procesamiento de CSV](csv-serde.md).
+ `array` < tipo\_datos >
+ `map` < tipo\_primitiva, tipo\_datos >
+ `struct` < nombre\_col : tipo\_datos [comment comentario\_col] [, ...] >

**[COMMENT table\_comment]**  
Crea la propiedad de tabla `comment` y la rellena con el `table_comment` que especifique.

**[PARTITIONED BY (col\_name data\_type [ COMMENT col\_comment ], ... ) ]**  
Crea una tabla con particiones, con una o varias columnas de partición que tienen especificados los elementos `col_name`, `data_type` y `col_comment`. Una tabla puede tener una o varias particiones, que consisten en una combinación de nombre de columna y valor diferenciada. Se crea un directorio de datos independiente por cada combinación especificada, lo que puede mejorar el rendimiento de la consulta en algunas circunstancias. Las columnas particionadas no existen dentro de los propios datos de la tabla. Recibirá un error si utiliza un valor para `col_name` igual al de una columna de la tabla. Para obtener más información, consulte la sección sobre [partición de datos](partitions.md).  
Después de crear una tabla con particiones, ejecute una consulta posterior que consista en la cláusula [MSCK REPAIR TABLE](msck-repair-table.md) para actualizar los metadatos de partición; por ejemplo, `MSCK REPAIR TABLE cloudfront_logs;`. Para las particiones que no son compatibles con Hive, utilice [ALTER TABLE ADD PARTITION](alter-table-add-partition.md) para cargar las particiones de modo que pueda consultar los datos.

**[CLUSTERED BY (col\_name, col\_name, ...) INTO num\_buckets BUCKETS]**  
Divide los datos, con o sin particiones, de las columnas `col_name` especificadas en subconjuntos de datos llamados *buckets*. El parámetro `num_buckets` especifica el número de buckets que se va a crear. La asignación de buckets puede mejorar el rendimiento de algunas consultas en conjuntos de datos grandes.

**[ROW FORMAT row\_format]**  
Especifica el formato de fila de la tabla y su origen de datos subyacente, si procede. En `row_format` puede especificar uno o varios delimitadores con la cláusula `DELIMITED` o bien puede utilizar la cláusula `SERDE` tal y como se describe más abajo. Si `ROW FORMAT` se omite o bien se especifica `ROW FORMAT DELIMITED`, se utilizará un SerDe nativo.  
+ [DELIMITED FIELDS TERMINATED BY char [ESCAPED BY char]]
+ [DELIMITED COLLECTION ITEMS TERMINATED BY char]
+ [MAP KEYS TERMINATED BY char]
+ [LINES TERMINATED BY char]
+ [NULL DEFINED AS char]

  Disponible solo con Hive 0.13 y cuando el formato de archivo STORED AS es `TEXTFILE`.
 **--O BIEN--**   
+ SERDE 'serde\_name' [WITH SERDEPROPERTIES ("property\_name" = "property\_value", "property\_name" = "property\_value" [, ...] )]

  `serde_name` indica el SerDe que debe utilizarse. La cláusula `WITH SERDEPROPERTIES` le permite proporcionar una o varias propiedades personalizadas que el SerDe permite.

**[STORED AS file\_format]**  
Especifica el formato de archivo de los datos de la tabla. Si se omite, `TEXTFILE` es la opción predeterminada. Las opciones para `file_format` son:  
+ SEQUENCEFILE
+ TEXTFILE
+ RCFILE
+ ORC
+ PARQUET
+ AVRO
+ ION
+ INPUTFORMAT input\_format\_classname OUTPUTFORMAT output\_format\_classname

**[LOCATION 's3://amzn-s3-demo-bucket/[folder]/']**  
Especifica la ubicación de los datos subyacentes en Amazon S3 a partir de los cuales se crea la tabla. La ruta de la ubicación debe ser un nombre de bucket solo o un nombre de bucket y una o varias carpetas. Si utiliza particiones, especifique la raíz de los datos particionados. Para obtener más información sobre la ubicación de la tabla, consulte [Especificación de la ubicación de una tabla en Amazon S3](tables-location-format.md). Para obtener información sobre el formato de datos y los permisos, consulte [Consideraciones sobre Amazon S3](creating-tables.md#s3-considerations).   
Utilice una barra diagonal final para su carpeta o bucket. No utilice nombres de archivo ni caracteres glob.  
 **Uso de:**  
`s3://amzn-s3-demo-bucket/`  
`s3://amzn-s3-demo-bucket/{{folder}}/`  
`s3://amzn-s3-demo-bucket/{{folder}}/{{anotherfolder}}/`  
 **No utilice:**  
`s3://amzn-s3-demo-bucket`  
`s3://amzn-s3-demo-bucket/*`  
`s3://amzn-s3-demo-bucket/{{mydatafile.dat}}`

**[TBLPROPERTIES ( ['has\_encrypted\_data'='true \| false',] ['encryption\_option'='SSE\_S3 \| SSE\_KMS \| CSE\_KMS',] ['kms\_key'='aws\_kms\_key\_arn',] ['classification'='classification\_value',] property\_name=property\_value [, ...] ) ]**  
Especifica los pares de clave-valor de metadatos personalizados para la definición de la tabla, además de las propiedades de tablas predefinidas como `"comment"`.  
**has\_encrypted\_data**: Athena tiene una propiedad integrada, `has_encrypted_data`. Establezca esta propiedad en `true` para indicar que el conjunto de datos subyacente que `LOCATION` especifica está cifrado con CSE-KMS. Si se omite y si la configuración del grupo de trabajo no invalida la configuración del lado del cliente, se supone el valor `false`. Si se omite o se establece en `false` cuando los datos subyacentes están cifrados, los resultados de la consulta generarán un error. Para obtener más información, consulte [Cifrado en reposo](encryption.md).  
**encryption\_option**: establezca esta propiedad en `SSE_S3`, `SSE_KMS` o `CSE_KMS` para indicar el nivel más alto de cifrado utilizado en el conjunto de datos subyacente especificado por `LOCATION`. Para obtener más información, consulte [Cifrado en reposo](encryption.md).  
**kms\_key**: establezca esta propiedad en el ARN de la clave de AWS KMS utilizada para cifrar y descifrar los archivos de datos de tablas. Athena utiliza esta clave para cifrar los archivos de datos de tablas al escribir con el cifrado con `SSE_KMS` o `CSE_KMS`, y para descifrar los archivos de datos de tablas cifrados con CSE-KMS. Esta propiedad no es necesaria cuando `encryption_option` se establece en `SSE_KMS` o `CSE_KMS`. Para obtener más información, consulte [Cifrado en reposo](encryption.md).  
**clasificación**: las tablas creadas para Athena en la consola de CloudTrail añaden `cloudtrail` como valor a la propiedad `classification`. Para ejecutar trabajos de ETL, AWS Glue necesita que usted cree una tabla con la propiedad `classification` para indicar que el tipo de datos para AWS Glue es `csv`, `parquet`, `orc`, `avro` o `json`. Por ejemplo, `'classification'='csv'`. Los trabajos de ETL generarán un error si no especifica esta propiedad. Puede especificarla posteriormente utilizando la consola, la API o la CLI de AWS Glue. Para obtener más información, consulte [Creación de tablas para los trabajos de ETL](schema-classifier.md) y [Creación de trabajos en AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/author-job.html) en la *Guía para desarrolladores de AWS Glue*.  
**compression\_level**: la propiedad `compression_level` especifica el nivel de compresión que se debe utilizar. Esta propiedad solo se aplica a la compresión ZSTD. Los valores posibles están comprendidos entre 1 y 22. El valor predeterminado es 3. Para obtener más información, consulte [Uso de niveles de compresión de ZSTD](compression-support-zstd-levels.md).  
Para obtener más información sobre otras propiedades de tabla, consulte [ALTER TABLE SET TBLPROPERTIES](alter-table-set-tblproperties.md).

## Ejemplos
<a name="create-table-examples"></a>

La siguiente instrucción `CREATE TABLE` de ejemplo crea una tabla basada en datos planetarios separados por tabulaciones almacenados en Amazon S3. 

```
CREATE EXTERNAL TABLE planet_data (
  planet_name string,
  order_from_sun int,
  au_to_sun float,
  mass float,
  gravity_earth float,
  orbit_years float,
  day_length float
  )
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION 's3://amzn-s3-demo-bucket/tsv/'
```

Tenga en cuenta los siguientes puntos:
+ La cláusula `ROW FORMAT DELIMITED` indica que los datos están delimitados por un carácter específico.
+ La cláusula `FIELDS TERMINATED BY '\t'` especifica que los campos de los datos TSV están separados por el carácter de tabulación (“\\t”).
+ La cláusula `STORED AS TEXTFILE` indica que los datos se almacenan como archivos de texto sin formato en Amazon S3.

Para consultar los datos, puede utilizar una instrucción `SELECT` sencilla como la siguiente:

```
SELECT * FROM planet_data
```

Para utilizar el ejemplo de creación de una tabla TSV propia en Athena, sustituya los nombres de tabla y columna por los nombres y tipos de datos de la tabla y las columnas propias, y actualice la cláusula `LOCATION` de modo que se dirija a la ruta de Amazon S3 en la que se almacenan los archivos TSV.

Para obtener más información sobre cómo crear tablas, consulte [Creación de tablas en Athena](creating-tables.md).