Carol In Memory
O Carol In Memory é uma aplicação de extração e envio de dados da plataforma Carol para o MotherDuck, utilizando BigQuery e Cloud Storage. O projeto é encapsulado como um Carol App, permitindo agendamento de execuções e facilitando a distribuição para clientes da plataforma TOTVS Carol. A utilização do MotherDuck foi escolhida pela facilidade em prover alternativas de Analytics aos usuários.
Fluxo do Processo
A seguir, é apresentado o fluxo geral da aplicação Carol In Memory:
- BigQuery Entities – As entidades (queries) configuradas são executadas diretamente no projeto em que o app está instalado.
- GCS Export Job – O resultado das queries é exportado como arquivos
.parquet
para um bucket do Google Cloud Storage. - MotherDuck – Os arquivos parquet são importados para o Motherduck utilizando
CREATE TABLE AS SELECT FROM parquet
. - MotherDuck – Os dados são persistidos no banco de dados configurado no MotherDuck.
Parâmetros de Configuração
Load Strategy (STRING)
Define a estratégia de carga:
FULL_LOAD
: Executa uma carga completa, removendo todo o histórico de dados e carregando novamente.INCREMENTAL
: Executa a carga completa, porém não removendo todo o histórico de dados. A lógica incremental deve ser implementada na query no parâmetroentities
.
Slack Webhook URL (STRING)
Webhook para notificação de falhas ou erros de execução via Slack. Exemplo:
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
Use Flight Server (BOOLEAN)
Define se será utilizado o Flight Server embutido do Carol App para conexão com ferramentas como o Looker Studio:
true
: ativa o servidor para exposição dos dados.false
: padrão, não utiliza o Flight Server.
Observação: Este recurso ainda está em desenvolvimento!
Data Entities
Entities (STRING)
JSON com as queries que serão exportadas. Exemplo:
{
"shd_ViewsAnalytics": "SELECT * FROM shd_ViewsAnalytics WHERE date >= CURRENT_DATE() - 7",
"shd_Orders": "SELECT id, total, customer FROM shd_Orders"
}
Cada chave representa o nome da entidade no destino MotherDuck, e o valor é a query SQL executada no BigQuery.
Load All Tables (BOOLEAN)
Se ativado (true
), ignora o campo Entities
e extrai todas as tabelas do projeto Carol, incluindo:
- Tabelas de ingestão (staging)
- Tabelas de datamodels
- Tabelas compartilhadas e personalizadas
MotherDuck
MotherDuck Database (STRING)
Nome do banco de dados padrão para conexão no MotherDuck. Exemplo:
meu_banco_padrao
Em todos os casos de implementação, o banco de dados padrão deve existir. Porém, os dados sempre serão exportados para um banco de dados que será criado em tempo de execução, de nome o Id da tenant que está executando o processo.
MotherDuck Token (STRING)
Token com permissão de leitura e escrita no MotherDuck. Deve ser gerado na interface do MotherDuck e informado no campo. Exemplo (truncado):
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Observação: É necessário possuir uma conta e instância ativas no MotherDuck para utilizar esse recurso.
Execução remota via API e acionamento sob demanda
É possível realizar uma execução remota do Processo do Carol App, podendo dinâmicamente apontar tabelas ou queries a serem exportadas para o MotherDuck. Esse procedimento é útil quando queremos sincronizar parte das tabelas de um ambiente, não precisando ajustar o parâmetro entities
ou load all tables
.
Para isso, é necessário utilizar a API da plataforma Carol abaixo, com método POST.
curl -X 'POST' \
'https://api.carol.ai/api/v3/tasks/new' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer TOKEN' \
-d '{[...]}'
O body a ser enviado é o abaixo, onde está sinalizado o que deve ser alterado para cada execução. Os Ids informados na requisição são obtíveis por meio da interface da plataforma Carol ou pelas API disponibilizadas.
{
"mdmData": {
"mdmResourcesCleanUp": false,
"mdmAiAlgorithmName": "inmemoryexport",
"mdmAiProcessName": "Carol_In_Memory_Export",
"mdmAppSettingsOverride": {
"MOTHERDUCK_TOKEN": "XYZ", <-- Adicionar o seu token MotherDuck.
"entities": "{\"TEST\": \"SELECT * FROM `carol-XYZ.XYZXPTO`.`minha_tabela`\"}" <-- Adicionar as entidades a serem exportadas.
},
"mdmAiProcessId": "7959d113dc0f419dbb286z85878603a7", <-- Inserir o AI Process Id real da tenant que irá processar a requisição.
"mdmTenantId": "3c79b6af74e4481db019b32e1a3bfbt6", <-- Inserir Tenant Id real da tenant que irá processar a requisição.
"mdmName": "carolinmemory",
"mdmAiProcessType": "BATCH",
"mdmTenantAppId": "129eb2dc9d514f40a5bd7891dff374c6" <-- Inserir o App Id real da tenant que irá processar a requisição.
},
"mdmEntityType": "mdmTask",
"mdmTaskLevel": "mdmTenant",
"mdmTaskType": "AI_PROCESS",
"mdmTenantId": "3c79b6af74e4481db019b32e1a3bfbt6" <-- Inserir Tenant Id real da tenant que irá processar a requisição.
}