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
LOCATIONque especifique. Utilice siempre la palabra claveEXTERNALexcepto al crear tablas de Iceberg. Si utilizaCREATE TABLEsin la palabra claveEXTERNALpara 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áusulasROW FORMAT,STORED ASyWITH SERDEPROPERTIES.
- [IF NOT EXISTS]
-
Este parámetro comprueba si ya existe una tabla con el mismo nombre. Si es así, el parámetro devuelve
TRUEy Amazon Athena cancela la acciónCREATE 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_nameespecifica 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, pongatable_nameentre comillas; por ejemplo"table123". Sitable_namecomienza 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
(_). Sicol_namecomienza 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_typepuede ser cualquiera de los siguientes:-
boolean: los valores sontrueyfalse. -
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), comoCREATE TABLE, utilice la palabra claveintpara representar un entero. En otras consultas, utilice la palabra claveinteger, dondeintegerse 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 devuelveintegera 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.doublesigue 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.floatsigue el estándar IEEE para la aritmética de punto flotante (IEEE 754). Equivalente arealen Presto. En Athena, utilicefloaten instrucciones DDL comoCREATE TABLEyrealen funciones SQL comoSELECT CAST. El rastreador de AWS Glue devuelve valores enfloat, y Athena traduce los tiposrealyfloatinternamente (consulte las notas de la versión 5 de junio de 2018). -
decimal [ (, dondeprecision,scale) ]es el número total de dígitos yprecision(opcional) es el número de dígitos con parte fraccional, el valor predeterminado es 0. Por ejemplo, utilice estas definiciones de tipo:scaledecimal(11,5),decimal(15). El valor máximo paraprecisiónes 38 y el valor máximo paraescalatambié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
decimaly 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
stringen Athena; en su lugar, se pueden convertir envarchar. -
binary: (para los datos en formato Parquet) -
date: una fecha en formato ISO, como. Por ejemplo,YYYY-MM-DDdate '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 conjava.sql.Timestamphasta una resolución máxima de milisegundos, como . Por ejemplo,yyyy-MM-ddHH:mm:ss[.f...]timestamp '2008-09-15 03:04:05.324'. Una excepción es OpenCSVSerDe, que utiliza datos deTIMESTAMPen 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
commenty la rellena con eltable_commentque 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_typeycol_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 paracol_nameigual 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_nameespecificadas en subconjuntos de datos llamados buckets. El parámetronum_bucketsespecifica 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_formatpuede especificar uno o varios delimitadores con la cláusulaDELIMITEDo bien puede utilizar la cláusulaSERDEtal y como se describe más abajo. SiROW FORMATse omite o bien se especificaROW 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_nameindica el SerDe que debe utilizarse. La cláusulaWITH SERDEPROPERTIESle 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,
TEXTFILEes la opción predeterminada. Las opciones parafile_formatson:-
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-buckets3://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 entruepara indicar que el conjunto de datos subyacente queLOCATIONespecifica 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 valorfalse. Si se omite o se establece enfalsecuando 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
cloudtrailcomo valor a la propiedadclassification. Para ejecutar trabajos de ETL, AWS Glue necesita que usted cree una tabla con la propiedadclassificationpara indicar que el tipo de datos para AWS Glue escsv,parquet,orc,avroojson. 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_levelespecifica 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 DELIMITEDindica 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 TEXTFILEindica 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.