Conexões BigQuery - 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á.

Conexões BigQuery

Você pode usar o AWS Glue for Spark para ler e gravar tabelas no Google BigQuery no AWS Glue 4.0 e versões posteriores. Você pode ler no BigQuery com uma consulta do Google SQL. Você se conecta ao BigQuery usando credenciais armazenadas AWS Secrets Manager por meio de uma conexão AWS Glue.

Para obter mais informações sobre o Google BigQuery, consulte o site do Google Cloud BigQuery.

Configurar conexões BigQuery

Para se conectar ao Google BigQuery a partir do AWS Glue, você precisará criar e armazenar suas credenciais do Google Cloud Platform em um segredo e, em seguida, associar esse AWS Secrets Manager segredo a uma conexão do Google BigQuery AWS Glue.

Para configurar uma conexão com o BigQuery:
  1. No Google Cloud Platform, crie e identifique recursos relevantes:

  2. No Google Cloud Platform, crie e exporte as credenciais da conta de serviço:

    Você pode usar o assistente de credenciais do BigQuery para acelerar essa etapa: criar credenciais.

    Para criar uma conta de serviço no GCP, siga o tutorial disponível em Criar contas de serviço.

    • Ao selecionar o projeto, selecione o projeto que contém sua tabela do BigQuery.

    • Ao selecionar perfis do IAM do GCP para sua conta de serviço, adicione ou crie um papel que conceda permissões apropriadas para executar jobs do BigQuery para ler, gravar ou criar tabelas do BigQuery.

    Para criar credenciais para a sua conta de serviço, siga o tutorial disponível em Criar uma chave da conta de serviço.

    • Ao selecionar o tipo de chave, selecione JSON.

    Agora você deve ter baixado um arquivo JSON com credenciais para sua conta de serviço. A aparência deve ser semelhante à seguinte:

    { "type": "service_account", "project_id": "*****", "private_key_id": "*****", "private_key": "*****", "client_email": "*****", "client_id": "*****", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "*****", "universe_domain": "googleapis.com" }
  3. base64 codifica seu arquivo de credenciais baixado. Em uma AWS CloudShell sessão ou similar, você pode fazer isso na linha de comando executando cat credentialsFile.json | base64 -w 0. Mantenha a saída desse comando, credentialString.

  4. Nos AWS Secrets Manager, crie um segredo usando suas credenciais do Google Cloud Platform. Para criar um segredo no Secrets Manager, siga o tutorial disponível em Criar uma AWS Secrets Manager segredo na documentação do AWS Secrets Manager. Depois de criar o segredo, guarde o nome secreto, SecretName, para a próxima etapa.

    • Ao selecionar pares de chave/valor, crie um par para a chave credentials com o valor credentialString.

  5. No catálogo de dados do AWS Glue, crie uma conexão seguindo as etapas em Adicionar uma conexão do AWS Glue. Depois de criar a conexão, guarde o nome da conexão, connectionName, para a próxima etapa.

    • Ao selecionar um tipo de conexão, selecione Google BigQuery.

    • Ao selecionar um Segredo da AWS, forneça o secretName.

  6. Conceda ao perfil do IAM associada ao seu trabalho do AWS Glue permissão para ler secretName.

  7. Na configuração do trabalho do AWS Glue, forneça connectionName como uma conexão de rede adicional.

Ler das tabelas do BigQuery

Pré-requisitos:

  • Uma tabela do BigQuery que você deseja ler. Você precisará dos nomes da tabela e do conjunto de dados do BigQuery no formulário [dataset].[table]. Vamos chamar isso de tableName.

  • O projeto de faturamento da tabela do BigQuery. Você precisará do nome do projeto, ParentProject. Se não houver um projeto principal de cobrança, use o projeto que contém a tabela.

  • Informações de autenticação do BigQuery. Conclua as etapas para gerenciar suas credenciais de conexão com o AWS Glue para configurar suas informações de autenticação. Você precisará do nome da conexão AWS Glue, ConnectionName.

Por exemplo:

bigquery_read = glueContext.create_dynamic_frame.from_options( connection_type="bigquery", connection_options={ "connectionName": "connectionName", "parentProject": "parentProject", "sourceType": "table", "table": "tableName", }

Você também pode fornecer uma consulta para filtrar os resultados retornados ao seu DynamicFrame. Você precisará configurar query, sourceType, viewsEnabled e materializationDataset.

Por exemplo:

Pré-requisitos adicionais

Você precisará criar ou identificar um conjunto de dados do BigQuery, MaterializationDataset, em que o BigQuery possa escrever visualizações materializadas para suas consultas.

Você precisará conceder as permissões apropriadas do GCP IAM à sua conta de serviço para criar tabelas no MaterializationDataset.

glueContext.create_dynamic_frame.from_options( connection_type="bigquery", connection_options={ "connectionName": "connectionName", "materializationDataset": materializationDataset, "parentProject": "parentProject", "viewsEnabled": "true", "sourceType": "query", "query": "select * from bqtest.test" } )

Gravar em tabelas do BigQuery

Este exemplo grava diretamente no serviço BigQuery. O BigQuery também é compatível com o método de escrita “indireto”. Para obter mais informações sobre como configurar gravações indiretas, consulte Usar gravação indireta com o Google BigQuery.

Pré-requisitos:

  • Uma tabela do BigQuery na qual você gravar. Você precisará dos nomes da tabela e do conjunto de dados do BigQuery no formulário [dataset].[table]. Você também pode fornecer um novo nome de tabela que será criado automaticamente. Vamos chamar isso de tableName.

  • O projeto de faturamento da tabela do BigQuery. Você precisará do nome do projeto, ParentProject. Se não houver um projeto principal de cobrança, use o projeto que contém a tabela.

  • Informações de autenticação do BigQuery. Conclua as etapas para gerenciar suas credenciais de conexão com o AWS Glue para configurar suas informações de autenticação. Você precisará do nome da conexão AWS Glue, ConnectionName.

Por exemplo:

bigquery_write = glueContext.write_dynamic_frame.from_options( frame=frameToWrite, connection_type="bigquery", connection_options={ "connectionName": "connectionName", "parentProject": "parentProject", "writeMethod": "direct", "table": "tableName", } )

Referência de opções de conexão BigQuery

  • project — Padrão: conta de serviço padrão do Google Cloud. Usado para leitura/gravação. O nome de um projeto do Google Cloud associado à sua tabela.

  • table: (obrigatório) usado para leitura/gravação. O nome da sua tabela do BigQuery no formato [[project:]dataset.].

  • dataset — Obrigatório quando não definido por meio da table opção. Usado para leitura/gravação. O nome do conjunto de dados que contém sua tabela do BigQuery.

  • parentProject — Padrão: conta de serviço padrão do Google Cloud. Usado para leitura/gravação. O nome de um projeto do Google Cloud associado ao project usado para faturamento.

  • sourceType - Usado para leitura. Obrigatório ao ler. Valores válidos: table, query informa ao AWS Glue se você lerá por tabela ou por consulta.

  • materializationDataset - Usado para leitura. Valores válidos: strings. O nome de um conjunto de dados do BigQuery usado para armazenar materializações para visualizações.

  • viewsEnabled - Usado para leitura. Padrão: falso. Valores válidos: true, false Configura se o BigQuery usará visualizações.

  • query - Usado para leitura. Usado quando viewsEnabled for verdadeiro. Uma consulta DQL do GoogleSQL.

  • temporaryGcsBucket — Usado para escrever. Obrigatório quando writeMethod estiver definido como padrão (indirect). Nome de um bucket do Google Cloud Storage usado para armazenar uma forma intermediária dos seus dados ao gravar no BigQuery.

  • writeMethod: padrão: indirect. Valores válidos: direct, indirect. Usado para gravação. Especifica o método usado para gravar seus dados.

    • Se definido como direct, seu conector gravará usando a API BigQuery Storage Write.

    • Se definido como indirect, seu conector gravará no Google Cloud Storage e o transferirá para o BigQuery usando uma operação de carregamento. Sua conta de serviço do Google Cloud precisará das permissões apropriadas do GCS.

Usar gravação indireta com o Google BigQuery

Este exemplo usa gravação indireta, que grava dados no Google Cloud Storage e os copia para o Google BigQuery.

Pré-requisitos:

Você precisará de um bucket temporário do Google Cloud Storage, TemporaryBucket.

O papel do GCP IAM para a conta de serviço do GCP do AWS Glue precisará das permissões apropriadas do GCS para acessar o TemporaryBucket.

Configuração adicional

Para configurar a gravação indireta com o BigQuery:
  1. Avalie Configurar conexões BigQuery e localize ou baixe novamente seu arquivo JSON de credenciais do GCP. Identifique secretName, o AWS Secrets Manager segredo da conexão do Google BigQuery AWS Glue usada em seu trabalho.

  2. Carregue seu arquivo JSON de credenciais em um local do Amazon S3 adequadamente seguro. Guarde o caminho para o arquivo, s3secretpath, para futuras etapas.

  3. Edite SecretName, adicionando a spark.hadoop.google.cloud.auth.service.account.json.keyfile chave. Defina o valor como s3secretpath.

  4. Conceda ao seu trabalho do AWS Glue permissões do Amazon S3 IAM para acessar s3secretpath.

Agora você pode fornecer a localização temporária do bucket do GCS ao seu método de gravação. Você não precisa fornecer writeMethod, pois historicamente indirect é o padrão.

bigquery_write = glueContext.write_dynamic_frame.from_options( frame=frameToWrite, connection_type="bigquery", connection_options={ "connectionName": "connectionName", "parentProject": "parentProject", "temporaryGcsBucket": "temporaryBucket", "table": "tableName", } )