Criar tabelas no Athena
Para criar tabelas, é possível executar instruções DDL no console do Athena, usar o formulário Create table (Criar tabela) do Athena ou usar um driver JDBC ou ODBC. O Athena usa o Apache Hive para definir tabelas e criar bancos de dados, que são basicamente um namespace lógico de tabelas. O Athena oferece suporte a uma variedade de bibliotecas de serializador-desserializador (SerDe) para criação de tabelas para formatos de dados específicos. Para obter uma lista de bibliotecas SerDe compatíveis, consulte Escolha de um SerDe para seus dados.
Ao criar um banco de dados e uma tabela no Athena, você apenas descreve o esquema e o local onde os dados da tabela estão localizados no Amazon S3 para consulta em tempo de leitura. O Athena não modifica os dados no Amazon S3. Por isso, o banco de dados e a tabela têm um significado um pouco diferente do que o de sistemas de bancos de dados relacionais tradicionais porque os dados não são armazenados com a definição de esquema para o banco de dados e a tabela.
O Athena armazena o esquema no AWS Glue Data Catalog e o utiliza para ler os dados quando você consulta a tabela usando SQL. Essa abordagem de esquema na leitura, que projeta um esquema em seus dados quando você executa uma consulta, elimina a necessidade de carregamento ou transformação de dados.
Considerações e limitações
Estas são algumas limitações e considerações importantes sobre as tabelas no Athena.
Considerações sobre o Amazon S3
Ao criar uma tabela, você especifica o local de um bucket do Amazon S3 para os dados subjacentes usando a cláusula LOCATION
. Considere o seguinte:
-
O Athena pode consultar somente a versão mais recente dos dados em um bucket versionado do Amazon S3, não as versões anteriores.
-
Você deve ter as permissões para trabalhar com os dados no local do Amazon S3. Para ter mais informações, consulte Controlar o acesso ao Amazon S3 do Athena.
-
O Athena permite consultar objetos armazenados com várias classes de armazenamento no mesmo bucket especificado pela cláusula
LOCATION
. Por exemplo, é possível consultar dados em objetos armazenados em classes diferentes de armazenamento (Standard, Standard-IA e Intelligent-Tiering) no Amazon S3. -
O Athena é compatível com buckets de pagamento a cargo do solicitante. Para obter informações sobre como habilitar pagamento a cargo do solicitante para buckets com dados de origem que você pretende consultar no Athena, consulte Criar um grupo de trabalho.
-
Você pode usar o Athena para consultar objetos restaurados das classes de armazenamento do Amazon S3 S3 Glacier Flexible Retrieval (antigo Glacier) e S3 Glacier Deep Archive, mas deverá habilitar essa capacidade para cada uma tabela separadamente. Se você não habilitar o atributo em uma tabela antes de executar a consulta, o Athena ignorará todos os objetos do S3 Glacier Flexible Retrieval e do S3 Glacier Deep Archive da tabela durante a execução da consulta. Para ter mais informações, consulte Consultar objetos restaurados do Amazon S3 Glacier.
Para obter informações sobre classes de armazenamento, consulte Classes de armazenamento, Alterar a classe de armazenamento de um objeto no Amazon S3, Transição para a classe de armazenamento GLACIER (arquivamento de objeto) e Buckets de pagamento pelo solicitante no Guia do usuário do Amazon Simple Storage Service.
-
Se você realizar consultas nos buckets do Amazon S3 com um grande número de objetos, e os dados não estiverem particionados, essas consultas poderão afetar os limites de taxa de solicitações Get no Amazon S3 e gerar exceções no Amazon S3. Para evitar erros, particione seus dados. Considere também ajustar suas taxas de solicitações do Amazon S3. Para obter mais informações, consulte Taxas de solicitações e considerações de performance.
Para obter mais informações sobre como especificar um local para seus dados no Amazon S3, consulte Especificar um local de tabela no Amazon S3.
Outras considerações
-
Não há suporte a transformações de dados transacionais: o Athena não permite operações baseadas em transações (como as disponíveis no Hive ou no Presto) nos dados de tabelas. Para obter uma lista completa de palavras-chave não compatíveis, consulte DDL incompatível.
-
As operações em tabelas são ACID: quando você cria, atualiza ou exclui tabelas, essas operações têm compatibilidade com ACID garantida. Por exemplo, se vários usuários ou clientes tentarem criar ou alterar uma tabela existente ao mesmo tempo, somente um será bem-sucedido.
-
As tabelas são EXTERNAL: exceto ao criar tabelas do Iceberg, use sempre a palavra-chave
EXTERNAL
. Se você usarCREATE TABLE
sem a palavra-chaveEXTERNAL
para tabelas que não são do Iceberg, o Athena emitirá um erro. Quando você descarta uma tabela no Athena, apenas os metadados da tabela são removidos, os dados permanecem no Amazon S3. -
Comprimento máximo de string de consulta: o tamanho máximo da string de consulta é 256 KB.
Se você usar a operação de API do AWS Glue CreateTable ou o modelo
AWS::Glue::Table
do AWS CloudFormation para criar uma tabela para uso no Athena sem especificar a propriedadeTableType
e, depois, executar uma consulta DDL, comoSHOW CREATE TABLE
ouMSCK REPAIR TABLE
, poderá receber a mensagem de erroFALHA: o nome de NullPointerException é nulo
.Para resolver o erro, especifique um valor para o atributo TableInput
TableType
como parte da chamada de APICreateTable
do AWS Glue ou do modelo do AWS CloudFormation. Os valores possíveis paraTableType
sãoEXTERNAL_TABLE
ouVIRTUAL_VIEW
.Esse requisito é aplicado somente quando você cria uma tabela usando a operação de API do AWS Glue
CreateTable
ou o modelo doAWS::Glue::Table
. Se você criar uma tabela do Athena usando uma instrução DDL ou um crawler do AWS Glue, a propriedadeTableType
será definida automaticamente para você.