Saltar para o conteúdo principal
Snowflake

Erros do exportador de Odoo para Snowflake: um caso do início ao fim

Muitas mensagens do Flexigo Odoo to Snowflake Snapshot Exporter dizem no próprio texto o que falta: um intervalo de pelo menos 15 minutos, um lote entre 100 e 50000, a chave privada sem frase-passe ou um esquema próprio para cada exportação. Aqui percorremo-las num caso de exemplo, pela ordem em que as poderá encontrar ao montar uma exportação, com o texto literal do módulo e o que fazer com cada uma.

FlexigoTech · Responsável: Víctor Gómez · Atualizado em 4 de novembro de 2026

O essencial

Módulo
Snowflake
Versões
Odoo 17, 18, 19 e 20
Verificado
no código do conector, versão 20.0 · nas fontes indicadas no fim
Leitura
7 min

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.

Lista de configurações de exportação para o Snowflake com quatro registos, caixa Active marcada e coluna Last Sync vazia
As configurações de exportação em 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

Lista de Model Lines com quatro linhas: configuração, modelo, tabela, modo de sincronização e caixa Active marcada
As linhas de modelo em 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 tem write_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 campo Model.

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 campo Field.
Lista de Field Lines com colunas de modelo, nome do campo, tipo, incluído, coluna, tipo de dados Snowflake e aviso de segurança
As linhas de campo nas Definições, com linhas de 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.

Percurso pela lista de configurações de exportação, pela de Model Lines e pela de Field Lines
Das configurações de exportação às linhas de modelo, de volta às configurações e, por fim, às linhas de campo.

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_date nã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

Como funciona o Flexigo Odoo to Snowflake Snapshot Exporter no Odoo, termo a termoMenus, tarefa agendada a cada 15 minutos e modelos do Flexigo Odoo to Snowflake Snapshot Exporter, explicados em glossário para quem já usa Odoo.Usa Snowflake e ainda não tem Odoo: um caso do início ao fim com o Snapshot ExporterCaso ilustrativo para quem já trabalha com Snowflake e ainda não usa Odoo: o que exporta o Flexigo Odoo to Snowflake Snapshot Exporter e por onde começar.Implementação da EU Digital Services Act Compliance Suite no Odoo: um caso do início ao fimCaso prático para pôr a funcionar a EU Digital Services Act Compliance Suite no Odoo: campos-chave, estados de cada registo e o que rever na primeira semana.
Verificado no código do conector (versão 20.0) e nas fontes indicadas

Fontes