CREATE TABLE
Cria uma tabela com o nome e os parâmetros especificados por você.
nota
Esta página contém informações de referência resumidas. Para obter mais informações sobre como criar tabelas no Athena e um exemplo de instrução CREATE TABLE
, consulte Criar tabelas no Athena. Para ver um exemplo de como criar um banco de dados, criar uma tabela e executar uma consulta SELECT
na tabela do Athena, consulte Conceitos básicos.
Resumo
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 a tabela é baseada em um arquivo de dados subjacente existente no Amazon S3, no
LOCATION
que você especificar. Exceto ao criar tabelas do Iceberg, use sempre a palavra-chaveEXTERNAL
. Se você usarCREATE TABLE
sem a palavra-chaveEXTERNAL
para tabelas que não são do Iceberg, o Athena emitirá um erro. Quando você cria uma tabela externa, os dados referenciados devem estar em conformidade com o formato padrão ou o formato especificado por você com as cláusulasROW FORMAT
,STORED AS
eWITH SERDEPROPERTIES
.
- [IF NOT EXISTS]
-
Este parâmetro verifica se já existe uma tabela com o mesmo nome. Se existir, o parâmetro retornará
TRUE
e o Amazon Athena cancelará a açãoCREATE TABLE
. Como o cancelamento ocorre antes que o Athena chame o catálogo de dados, ele não emite um evento AWS CloudTrail. - [db_name.]table_name
-
Especifica um nome para a tabela a ser criada. O parâmetro
db_name
opcional especifica o banco de dados no qual a tabela existe. Se omitido, o banco de dados atual será assumido. Se o nome da tabela inclui números, coloquetable_name
entre aspas, por exemplo"table123"
. Setable_name
começar com um sublinhado, use acentos graves, por exemplo,`_mytable`
. Os caracteres especiais (que não sejam sublinhado) não são compatíveis.Os nomes de tabela do Athena não diferenciam maiúsculas de minúsculas. No entanto, se você trabalhar com o Apache Spark, o Spark exigirá nomes de tabela em letras minúsculas. Para restrições sobre nomes de tabelas no Athena, consulte Nomear bancos de dados, tabelas e colunas.
- [ ( col_name data_type [COMMENT col_comment] [, ...] ) ]
-
Especifica o nome de cada coluna a ser criada, além do tipo de dados da coluna. Os nomes de coluna não permitem caracteres especiais além de sublinhado
(_)
. Secol_name
começar com um sublinhado, coloque o nome da coluna entre acentos graves, por exemplo`_mycolumn`
. Para restrições sobre nomes de colunas no Athena, consulte Nomear bancos de dados, tabelas e colunas.O valor
data_type
pode ser qualquer um dos seguintes:-
boolean
: os valores sãotrue
efalse
. -
tinyint
: um inteiro com sinal de 8 bits no formato de complemento de dois, com um valor mínimo de -2^7 e um valor máximo de 2^7-1. -
smallint
: um inteiro com sinal de 16 bits no formato de complemento de dois, com um valor mínimo de -2^15 e um valor máximo de 2^15-1. -
int
: nas consultas em Data Definition Language (DDL), comoCREATE TABLE
, use a palavra-chaveint
para representar um número inteiro. Em outras consultas, use a palavra-chaveinteger
, em queinteger
é representado por um valor com sinal de 32 bits no formato de complemento de dois, com um valor mínimo de -2^31 e um valor máximo de 2^31-1. No driver JDBC,integer
é retornado para garantir a compatibilidade com os aplicativos de análise de negócios. -
bigint
: um inteiro com sinal de 64 bits no formato de complemento de dois, com um valor mínimo de -2^63 e um valor máximo de 2^63-1. -
double
: um número com sinal de ponto flutuante de precisão dupla de 64 bits. O intervalo é de 4.94065645841246544e-324d a 1.79769313486231570e+308d, positivo ou negativo.double
segue o padrão para aritmética de ponto flutuante do IEEE (IEEE 754). -
float
: um número com sinal de ponto flutuante de precisão única de 32 bits. O intervalo é de 1.40129846432481707e-45 a 3.40282346638528860e+38, positivo ou negativo.float
segue o padrão para aritmética de ponto flutuante do IEEE (IEEE 754). Equivalente areal
no Presto. No Athena, usefloat
nas instruções DDL, comoCREATE TABLE
, ereal
nas funções SQL, comoSELECT CAST
. O crawler do AWS Glue retorna os valores emfloat
, e o Athena converte os tiposreal
efloat
internamente (leia as notas de release 5 de junho de 2018). -
decimal [ (
, ondeprecision
,scale
) ]
é o número total de dígitos eprecision
(opcional) é o número de dígitos na parte fracionada, o padrão é 0. Por exemplo, use estas definições de tipo:scale
decimal(11,5)
,decimal(15)
. O valor máximo paraprecisão
é 38 e o valor máximo paraescala
é 38.Para especificar valores decimais como literais, como ao selecionar filas com um valor decimal específico em uma expressão de consulta DDL, especifique a definição de tipo
decimal
e liste o valor decimal como um literal (em aspas simples) na consulta, como neste exemplo:decimal_value = decimal '0.12'
. -
char
: os dados de caractere de comprimento fixo, com um tamanho especificado entre 1 e 255, comochar(10)
. Para obter mais informações, consulte CHAR Hive data type(Tipo de dado CHAR do Hive). -
varchar
: os dados de caractere de comprimento variável, com um tamanho especificado entre 1 e 65535, comovarchar(10)
. Para obter mais informações, consulte VARCHAR Hive data type(Tipo de dado VARCHAR do Hive). -
string
: um literal de string entre aspas simples ou duplas.nota
Os tipos de dados que não são de string não podem ser convertidos em
string
no Athena. Em vez disso, converta-os emvarchar
. -
binary
: (para dados em Parquet) -
date
: uma data no formato ISO, como
. Por exemplo,YYYY
-MM
-DD
date '2008-09-15'
. Uma exceção é o OpenCSVSerDe, que usa o número de dias decorridos desde 1° de janeiro de 1970. Para ter mais informações, consulte Open CSV SerDe para processamento de CSV. -
timestamp
: instante de data e hora em um formato compatível comjava.sql.Timestamp
até uma resolução máxima de milissegundos, como
. Por exemplo,yyyy
-MM
-dd
HH
:mm
:ss
[.f...
]timestamp '2008-09-15 03:04:05.324'
. Uma exceção é o OpenCSVSerDe, que usa os dados deTIMESTAMP
no formato numérico UNIX (por exemplo,1579059880000
). Para ter mais informações, consulte Open CSV SerDe para processamento de CSV. -
array
< data_type > -
map
< primitive_type, data_type > -
struct
< col_name : data_type [comment col_comment] [, ...] >
-
- [COMMENT table_comment]
-
Cria a propriedade da tabela
comment
e a preenche com otable_comment
especificado por você. - [PARTITIONED BY (col_name data_type [ COMMENT col_comment ], ... ) ]
-
Cria uma tabela particionada com uma ou mais colunas de partição que tenham
col_name
,data_type
ecol_comment
especificados. A tabela pode ter uma ou mais partições, que consistem em uma combinação distinta de nome e valor de coluna. Um diretório de dados à parte é criado para cada combinação especificada, o que pode melhorar a performance da consulta em algumas circunstâncias. As colunas particionadas não existem na própria tabela de dados. Se você usar um valor paracol_name
que é o mesmo valor usado na coluna da tabela, obterá um erro. Para obter mais informações, consulte Particionar dados.nota
Depois de criar uma tabela com partições, execute uma consulta que consista na cláusula MSCK REPAIR TABLE para atualizar metadados de partição, por exemplo,
MSCK REPAIR TABLE cloudfront_logs;
. Para partições que não são compatíveis com o Hive, use o ALTER TABLE ADD PARTITION a fim de carregar as partições para que você consiga consultar os dados.
- [CLUSTERED BY (col_name, col_name, ...) INTO num_buckets BUCKETS]
-
Divide, com ou sem particionamento, os dados nas colunas
col_name
especificadas em subconjuntos de dados chamados buckets. O parâmetronum_buckets
especifica o número de buckets que serão criados. A criação de buckets pode melhorar a performance de algumas consultas em grandes conjuntos de dados.
- [ROW FORMAT row_format]
-
Especifica o formato de linha da tabela e os dados de origem subjacente, se aplicável. Para
row_format
, você pode especificar um ou mais delimitadores com a cláusulaDELIMITED
ou, como alternativa, usar a cláusulaSERDE
conforme descrito abaixo. SeROW FORMAT
for omitido ouROW FORMAT DELIMITED
for especificado, um SerDe nativo será usado.-
[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]
Disponível somente com o Hive 0.13 e quando o formato de arquivo em STORED AS (ARMAZENADO COMO) for
TEXTFILE
.
--OU--
-
SERDE 'serde_name' [WITH SERDEPROPERTIES ("property_name" = "property_value", "property_name" = "property_value" [, ...] )]
O
serde_name
indica o SerDe a ser usado. A cláusulaWITH SERDEPROPERTIES
permite fornecer uma ou mais propriedades personalizadas permitidas pelo SerDe.
-
- [STORED AS formato do arquivo]
-
Especifica o formato de arquivo para dados da tabela. Se omitido,
TEXTFILE
será o padrão. As opções defile_format
são:-
SEQUENCEFILE
-
TEXTFILE
-
RCFILE
-
ORC
-
PARQUET
-
AVRO
-
ION
-
INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname
-
- [LOCATION 's3://amzn-s3-demo-bucket/[folder]/']
-
Especifica o local dos dados subjacentes no Amazon S3 dos quais a tabela é criada. O caminho do local deve ser um nome de bucket ou um nome de bucket e uma ou mais pastas. Se você estiver usando partições, especifique a raiz dos dados particionados. Para obter mais informações sobre a localização da tabela, consulte Especificar um local de tabela no Amazon S3. Para obter informações sobre formatos de dados e permissões, consulte Considerações sobre o Amazon S3.
Use uma barra à direita para a pasta ou o bucket. Não use nomes de arquivo ou caracteres glob.
Use:
s3://amzn-s3-demo-bucket/
s3://amzn-s3-demo-bucket/
folder
/s3://amzn-s3-demo-bucket/
folder
/anotherfolder
/Não use:
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 pares de chave/valor de metadados personalizados para a definição da tabela, além das propriedades da tabela predefinidas, como
"comment"
.has_encrypted_data: o Athena tem uma propriedade integrada,
has_encrypted_data
. Defina essa propriedade comotrue
para indicar que o conjunto de dados subjacente especificado porLOCATION
está criptografado. Se omitido e se as configurações do grupo de trabalho não substituírem as configurações do lado do cliente, a pressuposição seráfalse
. Se omitido ou definido comofalse
quando os dados subjacentes estiverem criptografados, a consulta resultará em um erro. Para ter mais informações, consulte Criptografia em repouso.classificação: as tabelas criadas para o Athena no console do CloudTrail adicionam
cloudtrail
como um valor para a propriedadeclassification
. Para executar trabalhos ETL, o AWS Glue requer a criação de uma tabela com a propriedadeclassification
para indicar o tipo de dados do AWS Glue comocsv
,parquet
,orc
,avro
oujson
. Por exemplo,'classification'='csv'
. Os trabalhos ETL falharão se você não especificar essa propriedade. Você poderá especificá-la mais tarde usando o console do AWS Glue, a API ou a CLI. Para obter mais informações, consulte Criação de tabelas para trabalhos de ETL e Criar trabalhos no AWS Glue no Guia do desenvolvedor do AWS Glue.compression_level: a propriedade
compression_level
especifica o nível de compactação a ser usado. Essa propriedade se aplica apenas à compactação ZSTD. Os valores possíveis são de 1 a 22. O valor padrão é 3. Para ter mais informações, consulte Usar níveis de compactação ZSTD.Para obter mais informações sobre outras propriedades de tabelas, consulte ALTER TABLE SET TBLPROPERTIES.
Exemplos
A instrução de exemplo CREATE TABLE
a seguir cria uma tabela com base em dados de planetas separados por tabulações armazenados no 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/'
Observe os seguintes pontos:
-
A cláusula
ROW FORMAT DELIMITED
indica que os dados são delimitados por um caractere específico. -
A cláusula
FIELDS TERMINATED BY '\t'
especifica que os campos nos dados do TSV sejam separados pelo caractere de tabulação ('\t'). -
A cláusula
STORED AS TEXTFILE
indica que os dados sejam armazenados como arquivos de texto simples no Amazon S3.
Para consultar os dados, você pode usar uma instrução simples SELECT
como a seguinte:
SELECT * FROM planet_data
Para usar o exemplo para criar sua própria tabela TSV no Athena, substitua os nomes das tabelas e colunas pelos nomes e tipos de dados de sua própria tabela e colunas e atualize a cláusula LOCATION
para apontar para o caminho do Amazon S3 em que seus arquivos TSV estão armazenados.
Para obter mais informações sobre como criar tabelas, consulte Criar tabelas no Athena.