Skip to main content

Carol App com o uso de Service Account da Google

A plataforma Carol possui aceleradores para permitir a geração de uma Service Account da Google Cloud Provider e efetuar o treinamento de um modelo de Machine Learning através do BigQuery.

Os seguintes passos devem ser seguidos:

  • Obter uma sessão autenticada na Carol. Data Apps/Carol Apps recebem automaticamente um token autenticado da Carol que permitem obter um token Autorization da Carol.

  • Através da sessão autenticada, efetuar a geração de uma Service Account da GCP, através da seguinte linha:

tokenManager = TokenManager(carol, None, False)

A linha acima permite obter uma instância do TokenManager no pyCarol que permite efetuar a geração de um Token para execução de comandos no BigQuery.

Com isso, podemos executar a geração do token:

tokenGcp = tokenManager.get_token()
  • Com a Service Account GCP gerada, deveremos carregar a service account e instancias a biblioteca cliente do BigQuery:
credentials = service_account.Credentials.from_service_account_info(tokenGcp.to_dict()['service_account'])
client = bigquery.Client(credentials=credentials)
  • O próximo passo é executar o código SQL que efetua a criação de um modelo no BigQuery. Abaixo mostramos um exemplo obtido da documentação do BigQuery:
envId = tokenGcp.to_dict()['env']['env_id']
projectId = tokenGcp.to_dict()['service_account']['project_id']

sql_query = f'''
#standardSQL
CREATE OR REPLACE MODEL `{projectId}.{envId}.sample_model`
OPTIONS(model_type='logistic_reg') AS
SELECT
IF(totals.transactions IS NULL, 0, 1) AS label,
IFNULL(device.operatingSystem, "") AS os,
device.isMobile AS is_mobile,
IFNULL(geoNetwork.country, "") AS country,
IFNULL(totals.pageviews, 0) AS pageviews
FROM
`bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
_TABLE_SUFFIX BETWEEN '20160801' AND '20170630'
'''
  • O Job do BigQuery vai executar por aproximadamente 3 minutos e o modelo estará disponível no dataset da tenant que executou o Carol App.

Este é o código completo do aplicativo para referência. O código completo pode ser encontrado em: https://github.com/totvslabs/carolapp-samples/tree/master/mastering-carol/data-app-bq-ml

# Import necessary libraries
import pandas as pd

from google.cloud import bigquery
from google.oauth2 import service_account

from dotenv import load_dotenv
from pycarol.apps import Apps
from pycarol.bigquery import TokenManager
from pycarol import Carol

load_dotenv(".env")

carol = Carol()
tokenManager = TokenManager(carol, None, False)

tokenGcp = tokenManager.get_token()
credentials = service_account.Credentials.from_service_account_info(tokenGcp.to_dict()['service_account'])
client = bigquery.Client(credentials=credentials)

envId = tokenGcp.to_dict()['env']['env_id']
projectId = tokenGcp.to_dict()['service_account']['project_id']

sql_query = f'''
#standardSQL
CREATE OR REPLACE MODEL `{projectId}.{envId}.sample_model`
OPTIONS(model_type='logistic_reg') AS
SELECT
IF(totals.transactions IS NULL, 0, 1) AS label,
IFNULL(device.operatingSystem, "") AS os,
device.isMobile AS is_mobile,
IFNULL(geoNetwork.country, "") AS country,
IFNULL(totals.pageviews, 0) AS pageviews
FROM
`bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
_TABLE_SUFFIX BETWEEN '20160801' AND '20170630'
'''

dataJob = client.query(sql_query)

print(dataJob)

print('done query')

print(len(dataJob.to_dataframe()))

print('done')