Criação de índices de partição - AWS União

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Criação de índices de partição

Ao longo do tempo, centenas de milhares de partições são adicionadas a uma tabela. O GetPartitions APIé usado para buscar as partições na tabela. As partições de API retorno que correspondem à expressão fornecida na solicitação.

Vamos usar uma tabela sales_data como exemplo, particionada pelas chaves País, Categoria, Ano, Mês e. creationDate Se você quiser obter dados de vendas de todos os itens vendidos para a categoria Livros no ano de 2020 após 15/08/2020, deverá fazer uma GetPartitions solicitação com a expressão “Categoria = 'Livros' e creationDate > '2020-08-15'” para o Catálogo de Dados.

Se nenhum índice de partição estiver presente na tabela, o AWS Glue carrega todas as partições da tabela e, em seguida, filtra as partições carregadas usando a expressão de consulta fornecida pelo usuário na solicitação GetPartitions. A consulta leva mais tempo para ser executada à medida que o número de partições aumenta em uma tabela sem índices. Com um índice, a consulta GetPartitions tentará buscar um subconjunto das partições em vez de carregar todas as partições na tabela.

Sobre índices de partição

Ao criar um índice de partição, você especifica uma lista de chaves de partição que já existem em uma tabela específica. O índice de partição é uma sublista de chaves de partição definidas na tabela. Um índice de partição pode ser criado em qualquer permutação de chaves de partição definidas na tabela. Para a tabela sales_data acima, os índices possíveis são (país, categoria,creationDate), (país, categoria, ano), (país, categoria), (país), (categoria, país, ano, mês) e assim por diante.

O Data Catalog concatenará os valores de partição na ordem fornecida no momento da criação do índice. O índice é criado consistentemente à medida que as partições são adicionadas à tabela. É possível criar índices para tipos de colunas string (string, char e varchar), numérico (int, bigint, long, tinyint e smallint) e data (aaaa-MM-dd).

Tipos de dados compatíveis

  • Data — Uma data em ISO formato, comoYYYY-MM-DD. Por exemplo, data 2020-08-15. O formato usa hífens (‐) para separar o ano, o mês e o dia. O intervalo permitido para datas de indexação se estende de 0000-01-01 até 9999-12-31.

  • String: um literal de string entre aspas simples ou duplas.

  • Char: dados de caractere de comprimento fixo, com um comprimento especificado entre 1 e 255, por exemplo, char(10).

  • Varchar: dados de caracteres de comprimento variável com um tamanho especificado entre 1 e 65535, como varchar(10).

  • Numérico: int, bigint, long, tinyint e smallint

Índices em dados dos tipos Numérico, String e Data são compatíveis com os operadores =, >, >=, <, <= e “between” (entre). Atualmente, a solução de indexação oferece suporte somente ao operador lógico AND. As subexpressões com os operadores "LIKE“, “IN”, “OR” e "NOT" são ignoradas na expressão para filtragem usando um índice. A filtragem da subexpressão ignorada é feita nas partições obtidas após a aplicação da filtragem de índice.

Para cada partição adicionada a uma tabela, há um item de índice correspondente criado. Para uma tabela com “n” partições , um índice de partição resultará em “n” itens de índice de partição. O índice de partição “m” na mesma tabela resultará em “m*n” itens de índice de partição. Cada item de índice de partição será cobrado de acordo com a política de preços AWS Glue para armazenamento no catálogo de dados. Para obter detalhes sobre o preço do objeto de armazenamento, consulte Preço do AWS Glue.

Criar uma tabela com índices de partição

Você pode criar um índice de partição durante a criação da tabela. O CreateTable solicita uma lista de objetos PartitionIndex como uma entrada. Um máximo de três índices de partição pode ser criado em uma determinada tabela. Cada índice de partição requer um nome e uma lista de partitionKeys definidos para a tabela. Os índices criados em uma tabela podem ser obtidos usando o GetPartitionIndexesAPI

Adicionar um índice de partição a uma tabela existente

Para adicionar um índice de partição a uma tabela existente, use a operação CreatePartitionIndex. Você só pode criar um PartitionIndex por operação CreatePartitionIndex. Adicionar um índice não afeta a disponibilidade de uma tabela, pois a tabela continua disponível enquanto os índices estão sendo criados.

O status do índice de uma partição adicionada é definido como CREATING e a criação dos dados do índice é iniciada. Se o processo de criação dos índices for bem-sucedido, o indexStatus será atualizado para ACTIVE e, para um processo malsucedido, o status do índice será atualizado para. FAILED A criação do índice pode falhar por vários motivos, e você pode usar a operação GetPartitionIndexes para recuperar os detalhes da falha. As possíveis falhas são:

  • ENCRYPTED_ PARTITION _ ERROR — A criação de índice em uma tabela com partições criptografadas não é suportada.

  • INVALID_ PARTITION _ TYPE _ DATA _ ERROR — Observado quando o partitionKey valor não é um valor válido para o tipo de partitionKey dados correspondente. Por exemplo, uma partitionKey com o tipo de dados “int” tem um valor “foo”.

  • MISSING_ PARTITION _ VALUE _ ERROR — Observado quando o partitionValue for an não indexedKey está presente. Isso pode acontecer quando uma tabela não é particionada de forma consistente.

  • UNSUPPORTED_ _ PARTITION CHARACTER _ ERROR — Observado quando o valor de uma chave de partição indexada contém os caracteres\ u0000,\ u0001 ou\ u0002

  • INTERNAL_ ERROR — Ocorreu um erro interno durante a criação dos índices.

Descrever índices de partição em uma tabela

Para buscar os índices de partição criados em uma tabela, use a operação GetPartitionIndexes. A resposta retorna todos os índices na tabela, juntamente com o status atual de cada índice (o IndexStatus).

O IndexStatus para um índice de partição será um dos seguintes:

  • CREATING: o índice está sendo criado e ainda não está disponível para uso.

  • ACTIVE: o índice está pronto para uso. As solicitações podem usar o índice para executar uma consulta otimizada.

  • DELETING: o índice está sendo excluído e não pode mais ser usado. Um índice no estado ativo pode ser excluído usando a DeletePartitionIndex solicitação, que move o status de ACTIVE paraDELETING.

  • FAILED: falha na criação do índice em uma tabela existente. Cada tabela armazena os últimos dez índices com falha.

As possíveis transições de estado para índices criados em uma tabela existente são:

  • CREATING → ACTIVE → DELETING

  • CREATING → FAILED

Limitações no uso de índices de partição

Depois de criar um índice de partição, observe estas alterações na funcionalidade da tabela e da partição:

Criação de uma nova partição (após a adição do índice)

Depois que um índice de partição é criado em uma tabela, todas as novas partições adicionadas à tabela serão validadas para as verificações de tipo de dados para chaves indexadas. O valor da partição das chaves indexadas será validado para o formato do tipo de dados. Se a verificação do tipo de dados falhar, a operação de criação de partição falhará. Para a tabela sales_data, se um índice for criado para chaves (categoria, ano) em que a categoria é do tipo string e o ano do tipoint, a criação da nova partição com o valor “foo” falhará. YEAR

Depois que os índices estiverem habilitados, a adição de partições com valores de chave indexados com os caracteres U+0000, U+00001 e U+0002 passará a falhar.

Atualizações de tabelas

Depois que um índice de partição é criado em uma tabela, você não pode modificar os nomes de chave de partição para chaves de partição existentes e não pode alterar o tipo, ou ordem, das chaves registradas com o índice.

Usando índices para uma chamada otimizada GetPartitions

Quando você chama GetPartitions em uma tabela com um índice, pode incluir uma expressão e, se aplicável, o Data Catalog usará um índice, se possível. A primeira chave do índice deve ser inserida na expressão para os índices a serem usados na filtragem. A otimização de índice na filtragem é aplicada como um melhor esforço. O Data Catalog tenta usar a otimização de índice tanto quanto possível, mas no caso de um índice ausente, ou operador não suportado, ele volta para a implantação existente de carregamento de todas as partições.

Para a tabela dados_de_venda anterior, vamos adicionar o índice [País, Categoria, Ano]. Se “País” não for inserido na expressão, o índice registrado não poderá filtrar partições usando índices. Você pode adicionar até três índices para suportar vários padrões de consulta.

Vamos pegar algumas expressões de exemplo e ver como os índices funcionam nelas:

Expressões Como o índice será usado

País = 'EUA'

O índice será usado para filtrar partições.

País = 'EUA' and Categoria = 'Sapatos'

O índice será usado para filtrar partições.

Categoria = 'Sapatos'

Os índices não serão usados, pois “país” não foi fornecido na expressão. Todas as partições serão carregadas para retornar uma resposta.

País = 'EUA' and Categoria = 'Sapatos' and Ano > '2018'

O índice será usado para filtrar partições.

País = 'EUA' and Categoria = 'Sapatos' and Ano > '2018' and mês = 2

O índice será usado para buscar todas as partições com país = “EUA” e categoria = “sapatos” e ano > 2018. Em seguida, a filtragem com a expressão mês será realizada.

País = 'EUA' AND Categoria = 'Sapatos' OU Ano > '2018'

Os índices não serão usados, pois há um operador OR na expressão.

País = 'EUA' AND Categoria = 'Sapatos' AND (Ano = 2017 OU Ano = '2018')

O índice será usado para buscar todas as partições com país = “US” e categoria = “sapatos” e, em seguida, a filtragem com a expressão ano será realizada.

País na AND categoria ('EUA', 'Reino Unido') = 'Sapatos'

Os índices não serão usados para filtrar, pois o operador IN não é suportado no momento.

País = AND Categoria 'EUA' em ('Sapatos', 'Livros')

O índice será usado para buscar todas as partições com país = “EUA”. A filtragem com a expressão Categoria será realizada em seguida.

País = AND Categoria 'EUA' em ('Sapatos', 'Livros') AND (creationDate > '2023-9-01'

O índice será usado para buscar todas as partições com country = “US”, com creationDate > '2023-9-01' e, em seguida, a filtragem na expressão Category será executada.

Integração com mecanismos

Redshift Spectrum, Amazon EMR e AWS Glue ETL Spark podem utilizar índices para buscar partições depois que os índices DataFrames estão em um estado em. ACTIVE AWS Glue Os quadros Athena e AWS Glue ETL Dynamic exigem que você siga etapas adicionais para utilizar índices para aprimorar a consulta.

Habilitar filtragem de partições

Para ativar a filtragem de partições no Athena, é necessário atualizar as propriedades da tabela da seguinte forma:

  1. No AWS Glue console, em Catálogo de dados, escolha Tabelas.

  2. Escolha uma tabela.

  3. Em Ações, escolha Editar tabela.

  4. Em Propriedades da tabela, adicione o seguinte:

    • Chave: partition_filtering.enabled

    • Valor: true

  5. Selecione Apply (Aplicar).

Como alternativa, você pode definir esse parâmetro executando uma ALTERTABLESETPROPERTIESconsulta no Athena.

ALTER TABLE partition_index.table_with_index SET TBLPROPERTIES ('partition_filtering.enabled' = 'true')