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:
No Google Cloud Platform, crie e identifique recursos relevantes:
Crie ou identifique um projeto do GCP contendo tabelas do BigQuery às quais você gostaria de se conectar.
Ative a API BigQuery. Para obter mais informações, consulte Use the BigQuery Storage Read API to read na tabela
.
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" }
-
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
. Mantenha a saída desse comando,credentialsFile.json
| base64 -w 0credentialString
.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.
-
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
.
Conceda ao perfil do IAM associada ao seu trabalho do AWS Glue permissão para ler
secretName
.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 detableName
. -
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 detableName
. -
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 datable
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 aoproject
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 quandoviewsEnabled
for verdadeiro. Uma consulta DQL do GoogleSQL. -
temporaryGcsBucket
— Usado para escrever. Obrigatório quandowriteMethod
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:
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.-
Carregue seu arquivo JSON de credenciais em um local do Amazon S3 adequadamente seguro. Guarde o caminho para o arquivo,
s3secretpath, para futuras etapas
. -
Edite
SecretName
, adicionando aspark.hadoop.google.cloud.auth.service.account.json.keyfile
chave. Defina o valor comos3secretpath
. -
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
", } )