CREATE TABLE - Amazon Athena

CREATE TABLE

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

Sinopsis

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',] ['classification'='aws_glue_classification',] property_name=property_value [, ...] ) ]

Parámetros

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

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

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

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

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

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

  • timestamp: instante de fecha y hora en un formato compatible con java.sql.Timestamp 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.

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

nota

Después de crear una tabla con particiones, ejecute una consulta posterior que consista en la cláusula MSCK REPAIR TABLE 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 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. Para obtener información sobre el formato de datos y los permisos, consulte Consideraciones sobre Amazon S3.

Utilice una barra diagonal final para su carpeta o bucket. No utilice nombres de archivo ni caracteres glob.

Uso:

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',] ['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. 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.

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 y Creación de trabajos en AWS Glue 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.

Para obtener más información sobre otras propiedades de tabla, consulte ALTER TABLE SET TBLPROPERTIES.

Ejemplos

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.