Um caso para percorrer as mensagens
Exemplo Caso ilustrativo: a empresa e os seus dados são inventados para explicar o fluxo.
A Ferragens Rialto (empresa inventada) trabalha com Odoo e quer levar uma cópia dos seus dados para o Snowflake com o módulo. A administradora, Marta, cria a primeira exportação e vai encontrando os avisos um a um. A ordem exata não interessa: o que conta é o que diz cada mensagem e o que ela faz para avançar. Se antes quiser ver como o módulo está montado, tem o artigo sobre como funciona por dentro.

Settings › Snowflake Export › Snowflake Export Configurations, com a coluna Last Sync ainda vazia.A chave do Snowflake na FlexigoTech Cloud
A Marta escolhe que a exportação passe pela FlexigoTech Cloud e cola a chave. O primeiro aviso é este:
Before saving the key, an administrator has to accept that the Snowflake key and the exported data go through FlexigoTech Cloud. Nothing was sent.
Significa que, antes de guardar a chave, um administrador tem de aceitar que a chave do Snowflake e os dados exportados passam pela FlexigoTech Cloud. A mensagem deixa claro que nada foi enviado. O que a Marta faz: um administrador aceita e ela volta a guardar.
Na segunda tentativa cola a chave tal como a tinha, protegida com frase-passe:
Paste the unencrypted private key (PEM, without a passphrase): FlexigoTech Cloud keeps it encrypted. Nothing was sent.
O módulo pede a chave privada não cifrada, em formato PEM e sem frase-passe; segundo a própria mensagem, é a FlexigoTech Cloud que a guarda cifrada. A Marta cola a versão sem frase-passe.
Um colega tinha criado antes outra exportação de teste pela nuvem na mesma base de dados, e aparece isto:
Another Snowflake export of this database already goes through FlexigoTech Cloud, which holds one Snowflake key per database. Nothing was sent.
A FlexigoTech Cloud guarda uma única chave do Snowflake por base de dados e outra exportação já passa pela nuvem. Também aqui nada foi enviado.
E se tentar avançar sem ter a chave guardada, o módulo trava-a com Save the Snowflake key in FlexigoTech Cloud first.: primeiro é preciso guardar a chave na FlexigoTech Cloud.
Frequência e tamanho do lote
Para testar depressa, a Marta define um intervalo muito curto e um lote pequeno. Surgem dois avisos de validação:
Cron interval must be at least 15 minutes.: o intervalo tem de ser de 15 minutos ou mais.Batch size must be between 100 and 50000.: o tamanho do lote tem de estar entre 100 e 50000.
A Marta ajusta os valores a esses limites e guarda.
Modelos e campos que não se deixam exportar

Settings › Snowflake Export › Model Lines, cada uma com o seu modo, Full refresh ou Incremental.Ao adicionar modelos aparecem estas mensagens:
This model is protected and cannot be exported.: o modelo está protegido e o módulo não o deixa exportar.Only concrete database-backed models can be exported.: só se exportam modelos concretos suportados pela base de dados.This model does not have write_date; incremental mode is not supported.: o modelo não temwrite_date, por isso não admite o modo incremental.The model of an export line is chosen with its Model field.: o modelo de uma linha de exportação escolhe-se com o seu campoModel.
Com os campos passa-se algo parecido:
This field is excluded by default for security.: o campo fica excluído por predefinição por segurança.The field of an export line is chosen with its Field field.: o campo de uma linha de exportação escolhe-se com o seu campoField.

res.users, res.partner e res.company e a respetiva coluna de aviso de segurança.A primeira sincronização
A Marta lança a sincronização e, sem esperar, lança-a outra vez:
Sync already in progress for this configuration.
Já há uma sincronização em curso para essa configuração, por isso espera que termine a que está a decorrer.
Depois duplica a exportação para outra empresa do grupo, com a mesma conta, base de dados, esquema e modelo:
Another export, archived ones too, sends to this Snowflake table (same account, database, schema and model): a full refresh would delete its rows. Give each export a schema of its own.
Outra exportação, e aqui contam também as arquivadas, envia para essa mesma tabela; uma atualização completa apagaria as suas linhas. A saída é a que a mensagem indica: um esquema próprio para cada exportação.
Mais tarde, uma sincronização devolve:
Schema mismatch for field %s: expected %s. Run a full refresh or update Snowflake manually. %s
A mensagem indica o campo que não bate certo e o que se esperava. As duas saídas são as do próprio texto: uma atualização completa ou atualizar o Snowflake manualmente.

Quem alterou a exportação e com que utilizador se leem os registos
Meses depois, a pessoa que tinha alterado a exportação pela última vez passa para outra empresa do grupo, e aparece este aviso:
%(user)s, who last changed this export, does not belong to %(company)s.
Quem alterou a exportação pela última vez não pertence à empresa indicada na mensagem. O texto real traz o nome da pessoa e o da empresa, por isso sabe a quem e o que verificar.
Noutro momento, a Marta depara-se com uma mensagem diferente, que não fala de empresas:
This export has no active user to read the records with: an administrator has to save it again.
A única coisa que diz é que a exportação não tem um utilizador ativo com o qual ler os registos. A saída é a do próprio texto: um administrador tem de voltar a guardá-la.
Ligação direta ou pela nuvem
A Marta experimenta mudar o tipo de ligação de uma exportação e o módulo não deixa em nenhum sentido:
A Snowflake export through FlexigoTech Cloud does not go back to a direct connection.: uma exportação que passa pela FlexigoTech Cloud não volta a uma ligação direta.A Snowflake export with a direct connection keeps it: it does not move to FlexigoTech Cloud.: uma exportação com ligação direta mantém-na e não passa para a FlexigoTech Cloud.
Outras duas mensagens falam do conector de Python e da autenticação por par de chaves:
Snowflake Python connector not found. Install via: pip install snowflake-connector-python: o conector de Python do Snowflake não foi encontrado; a mensagem dá o comando para o instalar,pip install snowflake-connector-python.Private key path or pasted key content is required for key-pair auth.: a autenticação por par de chaves precisa do caminho da chave privada ou do conteúdo da chave colado.
O que aprender com o caso
- Leia a mensagem inteira: em boa parte delas, a segunda frase já é o que tem de fazer.
- Quando o texto termina em
Nothing was sent., o próprio módulo está a dizer que nada foi enviado. - Dê a cada exportação o seu próprio esquema se partilharem conta, base de dados e modelo, e tenha também em conta as arquivadas.
- Um modelo sem
write_datenão admite o modo incremental. - O tipo de ligação de uma exportação, direta ou pela FlexigoTech Cloud, não se muda depois em nenhum sentido.
Como a FlexigoTech ajuda
A FlexigoTech implementa Odoo 17, 18, 19 e 20 e desenvolve conectores e integrações à medida. Com a ligação pela FlexigoTech Cloud, o serviço guarda as credenciais cifradas, vigia a sincronização e avisa por e-mail se falhar. O módulo custa 9 € por versão de Odoo na Odoo Apps (pagamento único, sem IVA), para 17, 18, 19 e 20, e o plano Conector custa 49 €/mês ou 490 €/ano sem IVA. Tem os detalhes na página do módulo e na sua ficha da Odoo Apps.
Continue a ler
Verificado no código do conector (versão 20.0) e nas fontes indicadas
Fontes
- Código do módulo: flexigo_odoo_to_snowflake_snapshot_exporter 20.0 (289554a6): models/config.py
- Código do módulo: flexigo_odoo_to_snowflake_snapshot_exporter 20.0 (289554a6): models/field_line.py
- Código do módulo: flexigo_odoo_to_snowflake_snapshot_exporter 20.0 (289554a6): models/model_line.py
- apps.odoo.com/apps/modules/20.0/flexigo_odoo_to_snowflake_snapshot_exporter
- apps.odoo.com/apps/modules/17.0/flexigo_odoo_to_snowflake_snapshot_exporter
- apps.odoo.com/apps/modules/18.0/flexigo_odoo_to_snowflake_snapshot_exporter
- apps.odoo.com/apps/modules/19.0/flexigo_odoo_to_snowflake_snapshot_exporter
- flexigotech.com/en/services.html
- flexigotech.com/precios.html
