View a markdown version of this page

Uso do Lake Formation com grupos de trabalho do Athena Spark - Amazon Athena

Uso do Lake Formation com grupos de trabalho do Athena Spark

Com a versão de lançamento do Apache Spark versão 3.5, você pode aproveitar o AWS Lake Formation com o Catálogo de Dados do AWS Glue, em que o perfil de execução da sessão tem permissões completas da tabela. Esse recurso permite que você leia e grave em tabelas protegidas pelo Lake Formation nas sessões interativas do Athena Spark. Consulte as seções a seguir para saber mais sobre o Lake Formation e como usá-lo com o Athena Spark.

Etapa 1: habilitar o acesso total à tabela no Lake Formation

Para usar o modo de acesso total à tabela (FTA), você precisa permitir que o Athena Spark acesse dados sem a validação das tags de sessão do IAM no AWS Lake Formation. Para habilitar, siga as etapas em Application integration for full table access.

Etapa 1.1: registrar os locais de dados no Lake Formation usando o perfil definido pelo usuário

Você deve usar um perfil definido pelo usuário para registrar locais de dados no AWS Lake Formation. Consulte Requisitos para perfis usados para registrar locais para obter detalhes.

Etapa 2: configurar as permissões do IAM para o perfil de execução da sessão

Para acesso de leitura ou gravação aos dados subjacentes, além das permissões do Lake Formation, o perfil de execução precisa da permissão lakeformation:GetDataAccess do IAM. Com essa permissão, o Lake Formation concede a solicitação de credenciais temporárias para acessar os dados.

Confira a seguir um exemplo de política de como fornecer permissões do IAM para acesso a um script no Amazon S3, upload de logs no S3, permissões da API do AWS Glue e permissão para acessar o Lake Formation.

Etapa 2.1: configurar as permissões do Lake Formation

  • Os trabalhos do Spark que leem dados do S3 precisam da permissão SELECT do Lake Formation.

  • Os trabalhos do Spark que gravam/excluem dados no S3 precisam da permissão ALL (SUPER) do Lake Formation.

  • Os trabalhos do Spark que interagem com o Catálogo de Dados do AWS Glue precisam das permissões DESCRIBE, ALTER e DROP, conforme apropriado.

Etapa 3: inicializar uma sessão do Spark para acesso total à tabela usando o Lake Formation

Pré-requisitos

O Catálogo de Dados do AWS Glue deve ser configurado como um metastore para acessar as tabelas do Lake Formation.

Defina as seguintes configurações para configurar o catálogo do AWS Glue como um metastore:

{ "spark.hadoop.glue.catalogid": "ACCOUNT_ID", "spark.hadoop.hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory", "spark.hadoop.hive.metastore.glue.catalogid": "ACCOUNT_ID", "spark.sql.catalogImplementation": "hive" }

Para acessar as tabelas registradas no AWS Lake Formation, é necessário definir as seguintes configurações durante a inicialização do Spark a fim de configurá-lo para usar credenciais do AWS Lake Formation.

Hive

{ "spark.hadoop.fs.s3.credentialsResolverClass": "com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver", "spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject": "true", "spark.hadoop.fs.s3.folderObject.autoAction.disabled": "true", "spark.sql.catalog.skipLocationValidationOnCreateTable.enabled": "true", "spark.sql.catalog.createDirectoryAfterTable.enabled": "true", "spark.sql.catalog.dropDirectoryBeforeTable.enabled": "true" }

Apache Iceberg

{ "spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension", "spark.sql.catalog.spark_catalog": "org.apache.iceberg.spark.SparkSessionCatalog", "spark.sql.catalog.spark_catalog.warehouse": "s3://your-bucket/warehouse/", "spark.sql.catalog.spark_catalog.client.region": "REGION", "spark.sql.catalog.spark_catalog.catalog-impl": "org.apache.iceberg.aws.glue.GlueCatalog", "spark.sql.catalog.spark_catalog.glue.account-id": "ACCOUNT_ID", "spark.sql.catalog.spark_catalog.glue.lakeformation-enabled": "true" }

Tabelas do Amazon S3

{ "spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension", "spark.sql.catalog.{catalogName}": "org.apache.iceberg.spark.SparkCatalog", "spark.sql.catalog.{catalogName}.warehouse": "arn:aws:s3tables:{region}:{accountId}:bucket/{bucketName}", "spark.sql.catalog.{catalogName}.catalog-impl": "org.apache.iceberg.aws.glue.GlueCatalog", "spark.sql.catalog.{catalogName}.glue.id": "{accountId}:s3tablescatalog/{bucketName}", "spark.sql.catalog.{catalogName}.glue.lakeformation-enabled": "true", "spark.sql.catalog.{catalogName}.client.region": "REGION", "spark.sql.catalog.{catalogName}.glue.account-id": "ACCOUNT_ID" }

Delta Lake

{ "spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension", "spark.sql.catalog.spark_catalog": "org.apache.spark.sql.delta.catalog.DeltaCatalog", "spark.hadoop.fs.s3.credentialsResolverClass": "com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver", "spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject": "true", "spark.hadoop.fs.s3.folderObject.autoAction.disabled": "true", "spark.sql.catalog.skipLocationValidationOnCreateTable.enabled": "true", "spark.sql.catalog.createDirectoryAfterTable.enabled": "true", "spark.sql.catalog.dropDirectoryBeforeTable.enabled": "true" }

Condições e limitações

  • O acesso total à tabela é compatível com as Tabelas do Amazon S3, Hive, Iceberg e Delta. As tabelas Hudi não oferecem suporte acesso total à tabela.

  • Para adicionar novos catálogos a uma sessão ativa, use spark.conf.set com novas configurações de catálogo.

  • As configurações do catálogo são imutáveis. Se você quiser atualizar uma configuração de catálogo, crie um novo catálogo usando spark.conf.set.

  • Adicione somente os catálogos necessários à sessão do Spark.

  • Para alterar o catálogo padrão: spark.catalog.setCurrentCatalog("s3tablesbucket")

  • Se você tiver caracteres especiais no nome do seu catálogo, como -, escape-os em sua consulta desta forma:

    SELECT sales_amount as nums FROM `my-s3-tables-bucket`.`s3namespace`.`daily_sales` LIMIT 100