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
LOCATIONque você especificar. Exceto ao criar tabelas do Iceberg, use sempre a palavra-chaveEXTERNAL. Se você usarCREATE TABLEsem a palavra-chaveEXTERNALpara 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 ASeWITH SERDEPROPERTIES.
- [IF NOT EXISTS]
-
Este parâmetro verifica se já existe uma tabela com o mesmo nome. Se existir, o parâmetro retornará
TRUEe 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_nameopcional 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_nameentre aspas, por exemplo"table123". Setable_namecomeç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_namecomeç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_typepode ser qualquer um dos seguintes:-
boolean: os valores sãotrueefalse. -
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-chaveintpara 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.doublesegue 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.floatsegue o padrão para aritmética de ponto flutuante do IEEE (IEEE 754). Equivalente arealno Presto. No Athena, usefloatnas instruções DDL, comoCREATE TABLE, erealnas funções SQL, comoSELECT CAST. O crawler do AWS Glue retorna os valores emfloat, e o Athena converte os tiposrealefloatinternamente (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:scaledecimal(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
decimale 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
stringno Athena. Em vez disso, converta-os emvarchar. -
binary: (para dados em Parquet) -
date: uma data no formato ISO, como. Por exemplo, .YYYY-MM-DDdate '2008-09-15'Uma exceção é o OpenCSVSerDe, que usa o número de dias decorridos desde 1° de janeiro de 1970. Para obter mais informações, consulte Open CSV SerDe para processamento de CSV. -
timestamp: instante de data e hora em um formato compatível comjava.sql.Timestampaté uma resolução máxima de milissegundos, como . Por exemplo, .yyyy-MM-ddHH:mm:ss[.f...]timestamp '2008-09-15 03:04:05.324'Uma exceção é o OpenCSVSerDe, que usa os dados deTIMESTAMPno formato numérico UNIX (por exemplo,1579059880000). Para obter 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
commente a preenche com otable_commentespecificado 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_typeecol_commentespecificados. 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_nameque é 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_nameespecificadas em subconjuntos de dados chamados buckets. O parâmetronum_bucketsespecifica 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áusulaDELIMITEDou, como alternativa, usar a cláusulaSERDEconforme descrito abaixo. SeROW FORMATfor omitido ouROW FORMAT DELIMITEDfor 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_nameindica o SerDe a ser usado. A cláusulaWITH SERDEPROPERTIESpermite 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,
TEXTFILEserá o padrão. As opções defile_formatsã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-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 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 comotruepara indicar que o conjunto de dados subjacente especificado porLOCATIONestá 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 comofalsequando os dados subjacentes estiverem criptografados, a consulta resultará em um erro. Para obter mais informações, consulte Criptografia inativa.classificação: as tabelas criadas para o Athena no console do CloudTrail adicionam
cloudtrailcomo um valor para a propriedadeclassification. Para executar trabalhos ETL, o AWS Glue requer a criação de uma tabela com a propriedadeclassificationpara indicar o tipo de dados do AWS Glue comocsv,parquet,orc,avrooujson. 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_levelespecifica 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 obter 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 DELIMITEDindica 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 TEXTFILEindica 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.