É uma Plataforma de Dados e Aplicativos Inteligentes (Inteligência Artificial).
Processamento e transformação dos dados realizados pela Carol.
Pipeline dos dados na Carol representados pela funcionalidade Data Journey.
Organization (Organização) Ambiente principal, pode conter diversos Tenants;
Tenant (Locatário): Ambiente definido pelo Cliente na Carol;
Carol Data Storage (CDS): Armazenamento de dados primário na Carol, baixo custo;
Real Time (Elasticsearch); Armazenamento de dados na camada Golden Record com maior performance, porém o custo é maior;
Assistam o vídeo! https://vimeo.com/404587121/35dc882845
Golden Records (Dados de Ouro): Dados limpos e tratados que serão utilizados pela Carol ou sistemas de terceiros;
Staging Tables (Tabelas de Preparo): Tabelas para entradas de dados na Carol;
Data Models (Modelos de Dados): Estrutura e regras de dados que transformam Staging tables em Golden Records;
Insights (Visões): Gráficos e dimensões geradas a partir das Golden Records;
NLP (Programação de Linguagem Natural): Interação via escrita ou voz com a Carol;
ETL (Extração, Transformação, Carregamento): Usado para combinar dados de diversas fontes;
MDM (Gerenciamento de Dados Mestre): Prover processos para coletar, agregar, combinar, consolidar, garantir a qualidade, persistir e distribuir dados;
API (Interface de Programação de Aplicativos): Conjunto de rotinas, protocolos e ferramentas para construir aplicações;
Endpoint (Ponto de Extremidade): É a URL onde seu serviço pode ser acessado por uma aplicação cliente;
Named Query (Consulta Nomeada): São as "views" criadas na Carol;
Data Access Level (Privacidade de Dados): Restrição de acessos aos dados dentro da Carol.
Fazer o download dos seguintes arquivos para os exercícios do treinamento.
Pessoas.xlsx
Cidades.xlsx
Organization é o ambiente do administrador geral dos ambientes Carol.
Total Storage Used: Armazenamento total utilizado pela Organization;
Largest Tenant: Ambiente que está consumindo mais armazenamento de dados;
Total users: Toda de usuários criados na Organization;
Storage: Total de armazenamento por Ambiente;
Tenants: Ambientes criados na Organization;
JupyterLab instances: Instâncias do Jupyter Lab criadas na Organization;
Manage: Gerenciamento da Organization.
Allow all domains: Cadastro dos domínios liberados para acessar a Carol;
Locale: Localidade como os dados serão formatados: inglês (EUA), português (Brasil), espanhol;
Email: endereço de email que será enviado o convite;
Tenant: ambiente que o usuário será convidado;
User Role: permissão que será atribuída para o usuário convidado.
Label: Descrição de exibição do ambiente;
Name: Nome do ambiente;
Allow all domains: Cadastro dos domínios liberados para acessar a Carol;
Locale: Localidade como os dados serão formatados: inglês (EUA), português (Brasil), espanhol;
Activate login by SMS: Ativar login por SMS;
Send a copy of the SMS by email for login: Enviar cópia do SMS por e-mail.
Active: Ativar ou desativar acesso do usuário na organization;
Role: Regra de acesso:
Locale: Configuração de localidade por usuário: inglês (EUA), português (Brasil), espanhol;
Invite a colleague: Enviar convite para um novo participante;
Re-send invite: Reenviar o convite;
Lixeira: Excluir o convite.
Área de gerenciamento do ambiente
Allow all domains: Cadastro dos domínios liberados para acessar a Carol;
Locale: Localidade como os dados serão formatados: inglês (EUA), português (Brasil), espanhol;
Activate login by SMS: Ativar login por SMS;
Send a copy of the SMS by email for login: Enviar cópia do SMS por e-mail.
Active: Ativar ou desativar acesso do usuário na tenant;
Role: Regra de acesso:
Locale: Configuração de localidade por usuário: inglês (EUA), português (Brasil), espanhol;
Invite a colleague: Enviar convite para um novo participante;
Re-send invite: Re-enviar o convite;
Lixeira: Excluir o convite.
Token é um código gerado pela Carol para autenticação na plataforma.
Revoke Token: Exclusão do token gerado, se efetuado essa operação será necessário criar um novo token de acesso no Connector.
Clicar no botão "Create group" localizado no canto direito superior e preencher as seguintes informações:
Selecionar o DM no qual precisamos fazer a restrição.
Selecionar o tipo de ação que queremos restringir no DM.
Criar a regra de restrição conforme os campos x funções x valores desejados.
Clicar no botão "Users" para apresentar a tela de inclusão de usuários, clicar no botão "Add user" localizado no canto direito superior e então selecionar o(s) usuário(s) que deverão respeitar a regra criada para o referido grupo.
Levenstein: O quão permissivo ele vai ser com erros ortográficos. Por exemplo considerar "Rafael" e "Raphael" a mesma coisa;
Case Sensitive: Se "FELIPE" e "felipe" devem ser considerados como coisas diferentes pra match de entidade;
External Parser: Temos um carol app que faz algumas funções de nlp extras como procurar ranges de data na sua sentença;
Self Entity: A entidade que refere ao usuário que está falando. Por exemplo "Quantos pedidos em aberto eu tenho?". Se existir uma self-entity, a engine vai entender que o usuário está perguntando sobre o usuário que está fazendo a pergunta. Aí você consegue passar informações dele no named query model. Por exemplo, passar [[userid]] como parâmetro para uma query;
Initial Skill: A skill que vai ativar quando o usuário abre o app;
Stemming: É uma otimização agressiva que olha só pra raiz da palavra. Então ele vai considerar "desenvolvimento", "desenvolvido", e "desenvolto" como a mesma coisa.
Área de gerenciamento da conta do usuário logado na Carol.
Account Email: Não é possível alterar;
User name: Nome do usuário;
Locale: Localidade do usuário: inglês (EUA), português (Brasil), espanhol;
Phone: Número do telefone para envio do SMS de validação para login;
Opção 1: Receber e-mails quando convites são enviados;
Opção 2: Receber emails quando convites são aceitos;
Change password: Aba para alteração da senha;
Logout: Finalizar a sessão.
É a porta de entrada na Carol e os serviços disponíveis precisam do "Connector Id" para validação e integração com a plataforma.
No menu principal selecionar "Connectors", opção "All" e em seguida no botão "Add a Connector" canto direito superior.
Passo 1 - Selecionar ou criar um novo projeto.
Passo 2 - Selecionar um dos diversos tipos de "Connectors" que podemos utilizar para sincronizar dados para dentro da plataforma.
Passo 3: Configurar o "Connector" escolhido, cada connector possui sua particularidade para configurar, a seguir explicaremos os mais utilizados.
Podemos importar dados a partir dos seguintes tipos de arquivos csv, json e xls, desde que o tamanho do arquivo seja inferior a 100mb.
Configuração de importação:
Importar a planilha Pessoas.xlsx
Importar a planilha Cidades.xlsx
Serão criadas as Staging Tables com os dados contidos nos respectivos arquivos carregados.
Selecionar "View Staging Data" para exibir os dados importados.
Pessoas
Cidades
Baixar o zip de instalação {+}https://github.com/totvslabs/2c/releases+ conforme o sistema operacional do servidor.
Extrair os arquivos no diretório de destino desejado.
Executar o prompt de comando com permissão de administrador.
Entrar no diretório de instalação e executar a .bat de instalação
Inicializar o serviço Carol2CService no Windows (run services.msc)
Acessar via navegador a URL {+}http://localhost:8880+ (porta padrão de instalação)
Importante: Caso a porta 8880 ou 8881 estiverem em uso, podemos alterar a porta padrão abrindo o arquivo app.config.yml no diretório raiz e alterando as portas padrões.
wget
yum install wget
download 2c
wget https://github.com/totvslabs/2c/releases/download/2.25.4/CarolConnectorLinux.tar.gz
unzip
tar -xvzf CarolConnectorLinux.tar.gz
diretório
mover para pasta sugerida para instalação
mv 2c /opt
entrar na pasta
cd /opt/2c
editar serviço (VIM)
abrir: vi carolconnector.service
sair: :wq!
User = Usuário Linux (root);
WorkingDirectory = Diretório de Instalação (/opt/2c);
ExecStart = Ajustar o caminho de execução.
remover serviço
sudo systemctl disable /opt/2c/carolconnector.service
instalar serviço
sudo systemctl enable /opt/2c/carolconnector.service
inicializar serviço
sudo systemctl start carolconnector
parar serviço
sudo systemctl stop carolconnector
log serviço
systemctl status carolconnector
Instalar JDK na máquina. https://www.oracle.com/technetwork/java/javase/downloads/jdk13-downloads-5672538.html
Localizar o caminho do Java executando a seguinte instrução.
comando: which java
resultado: /usr/bin/java
Alterar arquivo 2c.sh substituindo o novo caminho do java no início da linha de comando.
resultado: /usr/bin/java -Dfile.encoding=UTF-8..
Executar o arquivo 2c.sh
comando: ./2c.sh
No arquivo app.config.yml localizado no diretório raiz de instalação do 2c, as principais chaves são:
syncThreads: Número de threads para conexão com o banco de dados;
ignoreQueueTable: Ignora a criação da tabela de fila do 2c no banco de dados do cliente;
enableReSync: Habilitar a sincronização por ReSync;
generateScriptsOnly: Não é criada as triggers no banco de dados do cliente;
server / maxThreads: Número de threads internas do 2c;
applicationConnectors / port: Porta padrão de instalação;
adminConnectors / port: Porta padrão de instalação;
syncbyresync: Schedule para sync ReSync;
syncbytimestamp: Schedule para sync Value;
syncbyfullload: Schedule para Full Load
Para atualizar o 2c é bem simples basta seguir o seguinte passo-a-passo:
Ao concluir a instalação do 2C, precisamos autenticar o serviço na Carol e selecionar o tipo de banco de dados para criar uma conexão de dados.
A sincronização de dados padrão do 2c é por TRIGGER, se houver restrição na utilização consulte o capítulo 2.3.5 Configuração por schedule.
Exemplo utilizando MS SQL SERVER.
importante: Ativar o protocolo TCP para comunicação. https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/configure-a-server-to-listen-on-a-specific-tcp-port
Se for uma ambiente TOTVS Protheus
Se a configuração for concluída com sucesso, será exibida a tela de gerenciamento de sincronização e para sincronizar uma tabela precisamos selecionar o botão "configure entities".
Será exibida a tela de configuração de entidades
Com as seguintes funcionalidades:
Pesquisador de objetos;
Lista de objetos (tabelas ou views) disponíveis no banco de dados configurado;
Campo(s) que sera(ão) usado(s) para PK;
Filtro SQL para restrição de dados;
Botão de teste da restrição SQL configurada;
Sync por Valor: Opção de selecionar e formatar campos a partir de valores definidos para sincronização dos dados;
Sync por Resync: Opção de sincronizar os dados confrontando as PKs que estão na tabela com as PKs que estão na Carol, motivo o qual esse processo é muito mais demorado;
Sync Full Load: Sempre será enviado uma carga completa para a Carol e ela fará o tratamento do que é inclusão ou edição de dados.
Sync por Trigger: Sincronização padrão do 2c, se nenhuma das syncs anteriores Valor, ReSync e Full Load, não forem configuradas será ativada a integração por Trigger.
Opção de enviar os dados diretamente para a Storage da Carol sem passar pelo elasticsearch;
Controle das operações de sincronização
Enable: Ativa a sincronização dos dados para a Carol, se trigger será criada automaticamente no BD;
Disable: Desativa a sincronização dos dados para a Carol, se trigger será excluída do BD;
Pause: Pausa a sincronização;
Resend all data: Força a carga completa dos dados na Carol;
ReSync: Força o sync por Resync;
ReSync report: Efetua todos os processamentos do Resync, porém não envia dos dados para a Carol;
View report: Ao término do ReSync report o relatório ficará disponível para visualização.
Botões para ativar ou desativar a sincronização em lote das tabelas selecionadas na lista de objetos;
Anonimização de Dados, selecionar o tipo de anonimização que será aplicada. Para mais detalhes acessar a documentação do 2c, https://docs.carol.ai/docs/carol-connect-2c#section-data-anonymization
Ao finalizar o processo de configuração, o 2c começará a enviar os dados das tabelas do banco de dados para a referida Staging Table na Carol.
Para adicionar arquivos na Carol pelo 2c precisamos adicionar um database do tipo Directory (Diretório)
Com as seguintes configurações:
Ao concluir a configuração será criada uma nova conexão no 2c para o conector selecionado.
Na configuração de entidades o diretório selecionado será tratado como se fosse uma tabela, onde podemos aplicar filtros nos arquivos através de condições SQL (dados), para isso, precisamos informar para a conexão de arquivos qual é a conexão de dados.
Adicionando na campo de restrição SQL o seguinte comando: NOME_CONEXAO_DADOS#SELECT
Exemplo: Totvs Protheus#select A.ACB_OBJETO from ACB990 A inner join AC9990 B on B.AC9_CODOBJ = A.ACB_CODOBJ where B.AC9_ENTIDA = 'SRA'
Importante! O resultado do select precisa conter os nomes dos arquivos que serão enviados para a Carol.
Temos três tipos de Jobs / Schedule no 2c:
Esse tipo de sincronização é mais custoso e demorado.
Na sync são 9 fases de processamento para enviar os dados para a Carol, sendo as principais fases:
1) Valida registros locais;
2) Valida os dados na Staging Table;
3) Valida os dados na Golden Record;
4) Válida os dados rejeitados;
5) Diferença dados x carga payload;
9) Limpeza dos dados.
Importante! As fases 6,7 e 8 são processos internos do 2c.
Para configurarmos JOB no 2c precisamos informar o tempo de execução utilizando a expressão Cron. Para montar a expressão utilize o seguinte website: https://www.freeformatter.com/cron-expression-generator-quartz.html
Criada a expressão em Cron, o próximo passo é alterar os respectivos valores das referidas chaves dentro do arquivo app.config.yml conforme o tipo de sync desejado.
Na página de gerenciamento do Connector é possível consultar o log de sincronização entre o 2c e o referido connector da Carol.
https://docs.carol.ai/docs/carol-connect-2c
Entrar na Staging Table e selecionar a opção ETL.
Duplicar uma Staging Table em duas Stagings Tables exatamente com os mesmos dados.
Juntar duas Stagings Tables em uma Staging Table a partir de uma regra de junção.
Separar uma Staging Table em duas ou mais Stagings Tables com os dados distribuídos a partir de condições configuradas.
No menu principal selecionar "Data Models", opção "All" e clicar no botão "Add a Data Model" no canto direito superior.
Passo 1: Escolher ou criar um projeto para o DM
Passo 2: Escolher ou criar um DM
São cinco tipos de Data Models:
Localização: modelo de dados relacionado à localização;
Organização: modelo de dados relacionado a empresas. Por exemplo: empresa, transportadores, empresas de transporte, etc;
Pessoa: modelo de dados relacionado a uma pessoa. Por exemplo: estudante, funcionário, etc;
Produto: modelo de dados que descreve produtos. Por exemplo: produtos, serviços, etc;
Transação: modelo de dados relacionado a dados transacionais, normalmente relacionados a uma data / hora específica. Por exemplo: recibos, tickets, eventos, pedidos, etc.
Passo 3: Escolher o segmento do negócio do DM
Passo 4: Informar o nome do DM
Passo 5: Confirmar a criação do DM
Boolean: Lógico;
Data: Data;
Long: Numérico Inteiro;
Nested: Várias instâncias de objetos;
String: Caracter;
Binary: Arquivo;
Enum: Classificação;
Object: Uma única instância de objeto;
Geopoint:Geo-localização (Longitude e latitude).
Oldest Value: Valor mais antigo;
Most Recent Value: Valor mais atual;
Most Frequently Updated: Valor atualizado frequentemente;
Survive File: Valor carregado por arquivo.
Estrutura final do Data Model Pessoas
Após criar todos os campos no Data Model precisamos configurar as regras e permissões de como os dados serão tratados no referido Data Model.
Reorder Fields: Ordenar os campos.
Profile Title: Campo(s) para visualização principal do dado quando explorado dentro da Carol.
Tags = Palavras-chaves para identificar o Data Model.
Rejection Rules: Regra(s) em que o Data Model irá rejeitar os dados.
Condição "E"
(+ Add Rule) Condição "OU"
Merge Rules: Regra(s) para unificação dos dados e porcentagem (%) da proximidade e semelhança que será aplicado para a comparação.
Condição "E"
(+ Add Rule) Condição "OU"
Relationship: Relacionamento entre dois Data Models.
Fazer o upload novamente da planilha Cidades, porém criando a Staging Table de Estados.
Criar o Data Model de Estados
Efetuar o mapeamento entre a Staging e DM de Estados.
Resultado. As 5.507 Cidades foram agrupadas dentro dos respectivos 26 Estados rejeitando o DF.
Finalizar a criação de todos campos e as referidas regras o próximo passo é publicar o Data Model.
Enable: Habilita a gravação dos dados do DM no CDS;
Delete: Delete o armazenamento no CDS;
Export: Exporta os dados para o CDS
Habilita o registro de transações por timestamp.
Cuidado! Só é possível excluir um DM mediante confirmação.
Podemos visualizar todos os relacionamentos entre os DMs.
Para sincronizar os dados da Staging Table para o Data Model precisamos acessar a opção "Map & Cleanse" localizado dentro das opções da Staging Table.
Passo 1: Escolher o Data Model.
Passo 2: Carregar ou criar as regras de mapeamento.
Passo 3: Confirmar a criação do mapeamento.
Fields: São os campos do Data Model;
Functions: Funções Carol para tratamento e/ou transformação dos dados;
Add Source: Campo(s) da Staging Table que será mapeado com o campo do DM;
Data Profiler: Visualizar o "valor" ou "tamanho" do dados após o mapeamento
Map Summary: Resumo e publicação do mapeamento efetuado.
Funções Carol: Selecionar e arrastar a função na área correspondente para manipulação do dado.
Concatenação: adicionar os campos nome e sobrenome separados por "espaço em branco ", resultado da fórmula é apresentado no painel do lado direito.
Comparação, Condição e Atribuição de Valores: Se nascido até 1990 considerado "idoso" caso contrário "jovem".
Lookup: Buscar informações de outras fontes de dados (Staging ou Data Model) para mapeamento local.
Premissa a fonte externa precisa ser configurada como "lookup table".
Função Javascript: Caso não exista uma função Carol que atenda a necessidade de mapeamento é possível criar funções em javascript, para isso é preciso correlacionar os campos da Staging com os parâmetros de entradas da função e o return da função será o resultado final do mapeamento.
Importante! Toda vez que for adicionado ou alterado uma regra de mapeamento é preciso reprocessar os dados no DM para que a nova modificação seja aplicada.
Ao finalizar o mapeamento é preciso revisar e publicar o conteúdo. Então os dados serão transformados em Golden Records e poderão ser explorados.
No menu principal selecionar "Explorer", opção "All" para visualizar todos os Data Models ou acessar diretamente um DM clicando no referido nome.
Importante: a exportação respeita o filtro realizado no explorer e limite máximo de 200 mil registros.
Quando finalizar a exportação dos dados o arquivo ficará disponível para download na central de atividades da Carol.
Clicar no botão "create a golden record" ao explorar um determinado DM.
Na página de detalhe do registros clicar no botão de "edit record" (lápis)
Na página de detalhe do registros clicar no botão de "delete record" (lixeira)
Pausar o processamento de dados na Staging que alimentar o referido DM.
Aplicar filtro para buscar os dados que serão excluídos.
Cuidado! Se não aplicar filtro todos os dados serão excluídos.
Clicar no botão "reprocess records" na opção "reprocess by moving to staging".
Ao reprocessar o dado será reenviado para a Staging
Na Staging que está pausada clicar no botão "drop table or delete records" (lixeira)
Será exibido as opções de exclusão da Staging, selecionar a opção "delete all realtime records".
Cuidado! Não selecionar a opção "drop staging table", pois será deletada a Staging e consequentemente será "quebrado" o Carol App Instalado na Carol.
Após exclusão dos dados é preciso reiniciar o processamento de dados na Staging.
Então, os dados serão apagados corretamente desde a sua origem.
No menu principal selecionar "Insights", opção "All" e clicar no botão "Create a New Dashboard" no canto direito superior.
Passo 1: Identificar o Dashboard com um nome.
Passo 2: Configurar as permissões.
Passo 3: Revisar e confirmar a criação.
Ao Finalizar os passos acima o widget do Dashboard será criado.
Acessar o Dashboard criado clicar no botão "Add a new Insight" no canto direito superior.
Podemos adicionar no dashboard insights já criados ou criar novos.
Selecionar o Data Model responsável em fornecer as informações para o insight.
Configurar as propriedades do insight.
Dimensions: Dimensões são campos do tipo caracter;
Measures: Medidas são campos numéricos ou datas;
Filters: Filtro para exibição dos dados;
Chart Properties: Propriedades para exibição dos dados;
Show: Limitação para exibição das informações;
Order by: Ordenação dos dados;
Publish: Publicação do gráfico.
Exemplo de Dashboard com insights criados.
Três pontinhos: Opções de gerenciamento do insight;
Detalhe no Insight: Seleção dos dados para exibição no "matching record list";
Filter: Filtro aplicado na exibição dos dados;
Matching Record List: Acesso rápido para explorar o dados selecionado.
Ferramentas para projetar, criar, documentar e consumir serviços da Web via RESTful.
Toda Organization na Carol possui sua instância no swagger, adicionando o caminho /swagger-ui/ após a raiz da URL. Exemplo: {+}https://trainingcarol.carol.ai/swagger-ui/+
Access Token: Campo para inserir o token de autenticação gerado;
Organization ID: Campo para inserir o nome da organização para redirecionar a autenticação;
Tenant ID: Campo para inserir o nome do ambiente para redirecionar a autenticação.
A requisição 'oauth2/token' gera o token de validação e sua autenticação é pelo login na Carol
O token de acesso será enviado na resposta da requisição.
Copiar e colar o token gerado na área de autenticação e sair do campo com o "tab" e se validado o semáforo mudará para a cor verde.
Recuperando token de acesso gerado pela plataforma usando o devtools (F12) do navegador.
Requisição.
Resposta.
Selecionar o indexType = STAGING.
<span style="color: #ff0000"><strong>Importante!</strong></span> o nome da tabela é composta por: ConnectorId+"_"+NameStagingTable
Exemplo: "select * from pessoas_user"
{
"mustList": [
{
"mdmFilterType": "TYPE_FILTER",
"mdmValue": "a6c76e1aa5dc429496cd0d293b928f44_pessoas_user"
}
]
}
Selecionar o indexType = MASTER.
Importante! o nome da tabela é composta por: DataModelName+"Golden"
"select * from people"
{
"mustList": [
{
"mdmFilterType": "TYPE_FILTER",
"mdmValue": "pessoasGolden"
}
]
}
"select * from people where name like '%lucinda%'"
{
"mustList":[
{
"mdmFilterType":"TYPE_FILTER",
"mdmValue":"pessoasGolden"
},
{
"mdmFilterType":"MATCH_FILTER",
"mdmKey":"mdmGoldenFieldAndValues.name.folded",
"mdmValue":"lucinda"
}
]
}
"select a.* from pessoasGolden a inner join cidadesGolden b on b.code = a.citycode where b.code >= 5481"
{
"mustList":[
{
"mdmFilterType":"TYPE_FILTER",
"mdmValue":"pessoasGolden"
},
{
"mdmFilterType":"TERMS_FILTER",
"mdmKey":"mdmGoldenFieldAndValues.citycode",
"mdmValuesField":"mdmGoldenFieldAndValues.code",
"mdmValuesQuery":{
"mustList":[
{
"mdmFilterType":"TYPE_FILTER",
"mdmValue":"cidadesGolden"
},
{
"mdmFilterType":"TERMS_FILTER",
"mdmKey":"mdmGoldenFieldAndValues.code",
"mdmValue":5481
}
]
}
}
]
}
"select a.* from pessoasGolden a inner join cidadesGolden b on b.code = a.citycode where a.citycode = 5481"
{
"mustList":[
{
"mdmFilterType":"TYPE_FILTER",
"mdmValue":"pessoasGolden"
},
{
"mdmFilterType":"TERM_FILTER",
"mdmKey":"mdmGoldenFieldAndValues.citycode",
"mdmValue":5481
}
],
"resolver":[
{
"type":"FETCH",
"fieldSource":"mdmGoldenFieldAndValues.citycode",
"fieldTarget":"mdmGoldenFieldAndValues.code",
"targetType":"cidadesGolden",
"resolvedName":"pessoascidades"
}
]
}
"select a.* from pessoasGolden a inner join cidadesGolden b on b.code = a.citycode where a.citycode = 5481"
{
"mustList":[
{
"mdmFilterType":"TYPE_FILTER",
"mdmValue":"pessoasGolden"
},
{
"mdmFilterType":"TERM_FILTER",
"mdmKey":"mdmGoldenFieldAndValues.citycode",
"mdmValue":5481
}
],
"resolveRelationships": true
}
"select * from pessoasGolden a where not exists (select 1 from cidades b where b.code = a.citycode and b.state = 'TO')
{
"mustList":[
{
"mdmFilterType":"TYPE_FILTER",
"mdmValue":"pessoasGolden"
}
],
"mustNotList":[
{
"mdmFilterType":"TERMS_FILTER",
"mdmKey":"mdmGoldenFieldAndValues.citycode",
"mdmValuesField":"mdmGoldenFieldAndValues.code",
"mdmValuesQuery":{
"mustList":[
{
"mdmFilterType":"TYPE_FILTER",
"mdmValue":"cidadesGolden"
},
{
"mdmFilterType":"TERM_FILTER",
"mdmKey":"mdmGoldenFieldAndValues.state",
"mdmValue":"TO"
}
]
}
}
]
}
{
"mustList":[
{
"mdmFilterType":"TYPE_FILTER",
"mdmValue":"pessoasGolden"
}
],
"aggregationList":[
{
"type":"TERM",
"name":"anos",
"size":1000,
"sortBy": "_term",
"sortOrder": "ASC",
"params":[
"mdmGoldenFieldAndValues.year.raw"
],
"subAggregations":[
{
"type":"SUM",
"name":"pessoas",
"params":[
"mdmGoldenFieldAndValues.code"
]
},
{
"type":"SUM",
"name":"cidades",
"params":[
"mdmGoldenFieldAndValues.citycode"
]
}
]
}
]
}
Named queries (NQ) são views com passagem de parâmetros dinâmicos criadas na Carol.
"select * from people where name like '%parametro_name%' and city like '%parametro_city%'"
{
"excludeMergePending": false,
"filtering": true,
"indexType": "MASTER",
"minimumShouldMatch": 1,
"mustList": [
{
"mdmFilterType": "TYPE_FILTER",
"mdmValue": "pessoasGolden"
},
{
"mdmFilterType": "MATCH_FILTER",
"mdmKey": "mdmGoldenFieldAndValues.name.folded",
"mdmValue": "name
"
}
],
"resolveRelationships": false
}
Endpoint.
Requisição.
"select * from people where name like '%parametro_name%'"
{
"excludeMergePending": false,
"filtering": true,
"minimumShouldMatch": 1,
"mustList": [
{
"mdmFilterType": "TYPE_FILTER",
"mdmValue": "pessoasGolden"
},
{
"mdmFilterType": "MATCH_FILTER",
"mdmKey": "mdmGoldenFieldAndValues.name.folded",
"mdmValue": "name
"
}
],
"resolveRelationships": false
}
<span style="color: #ff0000"><strong>Importante! Para obter apenas o resultado da agregação é preciso passar o valor 0 (zero) no parâmetro pagesize.</strong></span>
"select year, count from people where year = {yearbirth} group by year having count > 1"
{
"mdmType":"pessoasGolden",
"mdmQueryName":"nqpessoasporanos",
"mdmQueryDescription":"",
"mdmQueryFields":{
},
"mdmFilterQuery":{
"mustList":[
{
"mdmFilterType":"TYPE_FILTER",
"mdmValue":"pessoasGolden"
}
],
"aggregationList":[
{
"type":"TERM",
"name":"groupByYear",
"params":[
"mdmGoldenFieldAndValues.year.raw"
],
"minDocCount":2
}
],
"minimumShouldMatch":1,
"resolveRelationships":false,
"excludeMergePending":false
}
}
<span style="color: #ff0000"><strong>Importante! Executar a configuração explicada no próximo capítulo.</strong></span>
"select [Campos_Source], [Campos_Target] from data_model_view where campo_source_customercode = customercode
and campo_target_mdmname = mdmname
"
{
"mdmQueryName":"nqordersofcustomer",
"mdmQueryDescription":"",
"mdmQueryFields":{
},
"mdmFilterQuery":{
"mustList":[
{
"mdmFilterType":"TYPE_FILTER",
"mdmValue":"ordersofcustomer"
},
{
"mdmFilterType":"TERM_FILTER",
"mdmKey":"mdmGoldenFieldAndValues.customercode.raw",
"mdmValue":"customercode
"
},
{
"mdmFilterType":"TERM_FILTER",
"mdmKey":"mdmGoldenFieldAndValues.ordersofcustomer.mdmname.folded",
"mdmValue":"mdmname
"
}
]
}
}
Endpoint.
Requisição para a passagem de parâmetro.
Endpoint para criação.
Endpoint para buscar "Mapping Id"
{
"mdmActions":[
{
"inputFieldname":"code",
"operation":"SUM",
"outputFieldname":"total"
}
],
"mdmName":"pessoasanos",
"mdmRelationshipMappingId":"302ae61123f142f9b3540be8386e6cb1",
"mdmRelationshipViewSourceEntityInputField":[
"code",
"name",
"year"
],
"mdmRelationshipViewTargetEntityInputField":[
"mdmcity",
"mdmstate"
]
}
mdmActions: Executa operação a partir de um campo do Data Model Source;
mdmName: Nome da view;
mdmRelationshipMappingId: Id do mapeamento, é como a view executa o join;
mdmRelationshipViewSourceEntityInputField: Campos do Data Model Source;
mdmRelationshipViewTargetEntityInputField: Campos do Data Model Target.
Qualquer alteração na estrutura da DM View é preciso reprocessar os dados.
Endpoint para execução.
Endpoint.
Selecionar o indexType = VIEW.
{
"mustList": [
{
"mdmFilterType": "TYPE_FILTER",
"mdmValue": "pessoasanos"
},
{
"mdmFilterType": "TERM_FILTER",
"mdmKey": "mdmGoldenFieldAndValues.name.folded",
"mdmValue": "lucinda"
},
{
"mdmFilterType": "TERM_FILTER",
"mdmKey": "mdmGoldenFieldAndValues.pessoas_cidades.mdmstate.raw",
"mdmValue": "MG"
}
]
}
No menu principal selecionar "NLP" opção "All".
Entidade é o input da informação que será enviada pelo usuário através de texto ou voz.
Entidade com valor pré-definido
Entidade com valor dinâmico (DM)
Onde a magia acontece, como fazemos a Carol nos entender.
Param: Nome do parâmetro na Named Query;
Value: Nome da Entidade criada para input.
NQ Param: Variável criada para receber o valor de retorno;
Value: Como o valor será buscado na Named Query;
Idx: Índice de retorno começando por 0 (zero).
Área de conversação com a Carol a partir das Entidades e Skills criados.
Toda interação com a Carol via NLP é gravado no histórico de perguntas e respostas.
Interessante! Ao clicar no registro o texto da pergunta é copiado para a área de transferência.
No menu principal selecionar "Carol Apps", opção "All" e clicar no botão "Create an App".
Preencher as informações necessárias para identificação do app.
Label: Descrição de exibição do App.
Name: Nome do App.
Version: Versionamento do App.
Description: Descrição do App;
Revisão de todos os componentes que compõe o Carol App.
Monitoramento das tarefas de processamento incluídas no Carol App.
Criação de parâmetros para configurar o comportamento do Carol App
Área de upload de arquivos para o Carol App, os arquivos podem ser dos seguintes tipo:
Página para criar os pacotes de instalação do Carol App. Exemplo: Se o Carol Clock-in App será instalado para o ambiente Totvs Protheus ou Outro ERP.
No menu principal selecionar "Carol Apps", opção "All" e clicar no botão "Available Apps".
Será apresentado os Carol Apps disponíveis para instalação / atualização
Próximo passo é selecionar o grupo de conectores que será instalado no Carol App.
Ao finalizar será apresentada da página de confirmação da instalação do Carol App.
Ao clicar no botão "go to app" podemos acompanhar a instalação.
Depois da instalação é necessário publicar o Carol App.
Para gerenciar um Carol App podemos acessar via o botão "your apps" ou "carol apps" no menu principal.
Aba "Overview" na seção "Process Management"
Podemos executar manualmente a tarefa clicando no botão "run" exibido ao passar o mouse sobre ela.
É possível agendar as execução da tarefa clicando no botão "edit" exibido ao passar o mouse sobre ela.
Starts after: Data e Hora inicial que a tarefa será executada.
Repeats: Recorrência que será executada a tarefa.
Timezone: Em qual fuso horário a tarefa será executada.
Run as: Qual login será executada a tarefa.
Run schedule: Resumo das 5 próximas execuções.
Quando uma tarefa é executada podemos acompanhar o log de execução das seguintes formas:
Página principal de monitoramento.
Podemos acessar o detalhe da execução ao clicar na referida tarefa.
Acompanhar os processamentos internos da tarefa na seção "logs"
Aplicar filtro de pesquisas para buscar o log desejado.
Aba "Settings" é possível parametrizar o comportamento do Carol App no ambiente do cliente.
Os arquivos gerados pelo Carol App serão disponibilizados nessa seção.
Se o Carol App possuir uma interface / página web podemos acessar através dos seguintes caminhos.
Para ter acesso ao ambiente de desenvolvimento da Carol é preciso ter permissão "dev" no ambiente.
É o ambiente oficial da Carol para desenvolvimento, pois a mesma foi adotada pela comunidade dos cientistas de dados. {+}https://jupyter.org/+
Pela Carol podemos gerenciar a VM do Jupyter Lab com as seguintes ações:
Manage Resource: Gerenciamento de recurso (máquina)
Start / Resume Instance: Cria ou inicia uma VM
Terminate Instance: Elimina a VM criada
Iniciar um Python 3 Notebook
No menu de componentes selecionar o componente desejado e com o botão direito do mouse selecionar as funcionalidades pré-definidas pela Carol. Como exemplo vamos utilizar o employee DM (Funcionários)
Primeiro passo: Fazer o login dentro do ambiente.
Será criado o código fonte para efetuar o login na Carol, na variável "password" colocar sua senha registrada na Carol. Pressionar as teclas "Shift" + "Enter" para executar o comando.
Segundo passo: Fazer uma query nos dados de funcionários.
Será criado o código fonte para pesquisar os dados do employee DM. Pressionar as teclas "Shift" + "Enter" para executar o comando, se o comando for executado com sucesso o número de funcionários encontrado será exibido.
Terceiro passo: Formatar e exibir o resultado, para isso vamos transformar um resultado num DataFrame.
Biblioteca de APIs da Totvs Carol escritas em Python.
https://pycarol.readthedocs.io/en/latest/index.html