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 claveEXTERNAL
excepto al crear tablas de Iceberg. Si utilizaCREATE TABLE
sin la palabra claveEXTERNAL
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áusulasROW FORMAT
,STORED AS
yWITH 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ó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_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, pongatable_name
entre comillas; por ejemplo"table123"
. Sitable_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
(_)
. Sicol_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 sontrue
yfalse
. -
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 claveint
para representar un entero. En otras consultas, utilice la palabra claveinteger
, dondeinteger
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 devuelveinteger
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 areal
en Presto. En Athena, utilicefloat
en instrucciones DDL comoCREATE TABLE
yreal
en funciones SQL comoSELECT CAST
. El rastreador de AWS Glue devuelve valores enfloat
, y Athena traduce los tiposreal
yfloat
internamente (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:scale
decimal(11,5)
,decimal(15)
. El valor máximo paraprecisión
es 38 y el valor máximo paraescala
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 envarchar
. -
binary
: (para los datos en formato Parquet) -
date
: una fecha en formato ISO, como
. Por ejemplo,YYYY
-MM
-DD
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 conjava.sql.Timestamp
hasta una resolución máxima de milisegundos, como
. Por ejemplo,yyyy
-MM
-dd
HH
:mm
:ss
[.f...
]timestamp '2008-09-15 03:04:05.324'
. Una excepción es OpenCSVSerDe, que utiliza datos deTIMESTAMP
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 eltable_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
ycol_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_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ámetronum_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áusulaDELIMITED
o bien puede utilizar la cláusulaSERDE
tal y como se describe más abajo. SiROW FORMAT
se 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_name
indica el SerDe que debe utilizarse. La cláusulaWITH 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 parafile_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 entrue
para indicar que el conjunto de datos subyacente queLOCATION
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 valorfalse
. Si se omite o se establece enfalse
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 propiedadclassification
. Para ejecutar trabajos de ETL, AWS Glue necesita que usted cree una tabla con la propiedadclassification
para indicar que el tipo de datos para AWS Glue escsv
,parquet
,orc
,avro
ojson
. 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.