Sobre a Openflow Connector for MySQL

Nota

O conector está sujeito aos Termos do conector Snowflake.

Este tópico descreve os conceitos básicos do Openflow Connector for MySQL, seu fluxo de trabalho e suas limitações.

Sobre Openflow Connector for MySQL

O Openflow Connector for MySQL conecta uma instância do banco de dados MySQL ao Snowflake e replica os dados de tabelas selecionadas quase em tempo real ou em um cronograma específico. O conector também cria um registro de todas as alterações de dados, que fica disponível junto com o estado atual das tabelas replicadas.

Casos de uso

Use esse conector se quiser fazer o seguinte:

  • Replicação de CDC das tabelas MySQL no Snowflake para gerar relatórios abrangentes e centralizados

Versões MySQL compatíveis

A tabela a seguir lista as versões testadas e oficialmente compatíveis de MySQL.

8,0

8,4

Padrão

Sim

Sim

AWS RDS

Sim

Sim

Amazon Aurora

Sim, como a versão 3

Não aplicável. Atualmente, o Aurora 8.4 não é compatível.

GCP Cloud SQL

Sim

Sim

Banco de dados do Azure

Sim

Sim

Requisitos do Openflow

  • O tamanho do tempo de execução deve ser pelo menos médio. Use um tempo de execução maior ao replicar grandes volumes de dados, especialmente quando o tamanho das linhas for grande.

  • O conector não oferece suporte a tempos de execução do Openflow de vários nós. Configure o tempo de execução para esse conector com Min nodes e Max nodes definidos como 1.

Limitações

  • O conector é compatível com MySQL versão 8 ou posterior.

  • O conector é compatível apenas com a autenticação de nome de usuário e senha com MySQL.

  • Somente as tabelas do banco de dados com chaves primárias podem ser replicadas.

  • O conector não replica valores individuais maiores que 16 MB. Por padrão, o processamento de tal valor faz com que a tabela associada seja marcada como falha permanente. Para impedir falhas na tabela, modifique o parâmetro de destino Oversized Value Strategy.

  • O conector não replica tabelas com dados que excedam as limitações de tipo do Snowflake.

  • O conector não replica colunas dos tipos GEOMETRY, GEOMETRYCOLLECTION, LINESTRING, MULTILINESTRING, MULTIPOINT, MULTIPOLYGON, POINT e POLYGON.

  • O conector tem as Limitações de replicação de grupo MySQL. Isso significa que uma única transação deve caber em uma mensagem de log binário de até 4 GB.

  • O conector não oferece suporte à replicação de tabelas de uma instância de leitor no Amazon Azure, pois as instâncias de leitor do Azure não mantêm seus próprios logs binários.

  • O conector oferece suporte a alterações no esquema da tabela de origem, com exceção da alteração das definições de chave primária e da alteração da precisão ou da escala de uma coluna numérica.

  • O conector não oferece suporte à nova adição de uma coluna depois que ela é descartada.

  • Para os tipos DATE e DATETIME, todos os valores com mês ou dia zero são mapeados para a época Unix («1970-01-01» ou «1970-01-01T00:00»). A data zero («0000-00-00») também é mapeada para a época Unix. Valores com ano zero são convertidos para ano um, por exemplo, «0000-05-30 7:59:59» torna-se «0001-05-30T7:59:59». Os componentes restantes de data e hora permanecem inalterados.

  • Para o tipo TIMESTAMP, o valor «0000-00-00 00:00:00» é mapeado para a EPOCH Unix («1970-01-01T00:00Z»).

Nota

As limitações que afetam determinadas colunas da tabela podem ser contornadas com a exclusão dessas colunas específicas da replicação.

Fluxo de trabalho

  1. Um administrador de banco de dados MySQL executa as seguintes tarefas:

    • Configure as definições de replicação MySQL

    • Crie credenciais para o conector

    • (Opcionalmente) Forneça o certificado SSL.

  2. Um administrador de conta Snowflake executa as seguintes tarefas:

    1. Cria um usuário de serviço para o conector, um warehouse para o conector e um banco de dados de destino para os dados replicados.

    2. Instala o conector.

    3. Especifica os parâmetros necessários para o modelo de fluxo.

    4. Executa o fluxo. O conector realiza as seguintes tarefas quando executado no Openflow:

      1. Cria um esquema para tabelas de diários.

      2. Cria os esquemas e as tabelas de destino que correspondem às tabelas de origem configuradas para replicação.

      3. Começa a replicar as tabelas. Para obter detalhes sobre o processo de replicação, consulte Como as tabelas são replicadas.

Como o conector funciona

As seções a seguir descrevem como o conector funciona em vários cenários, incluindo replicação, alterações no esquema e retenção de dados.

Como as tabelas são replicadas

As tabelas são replicadas nos seguintes estágios:

  1. Introspecção de esquema: o conector descobre as colunas na tabela de origem, incluindo os nomes e tipos de coluna, e as valida em relação às limitações do Snowflake e do conector. As falhas de validação fazem com que esse estágio falhe, e o ciclo se complete. Após a conclusão bem-sucedida desse estágio, o conector cria uma tabela de destino vazia.

  2. Carga de instantâneo: o conector copia todos os dados disponíveis na tabela de origem para a tabela de destino. Se esse estágio falhar, nenhum outro dado será replicado. Após a conclusão bem-sucedida, os dados da tabela de origem ficam disponíveis na tabela de destino.

  3. Carga incremental: o conector rastreia as alterações na tabela de origem e aplica essas alterações à tabela de destino. Esse processo continua até que a tabela seja removida da replicação. A falha nesse estágio interrompe permanentemente a replicação da tabela de origem, até que o problema seja resolvido.

    Nota

    Este conector pode ser configurado para iniciar imediatamente a replicação de alterações incrementais para tabelas recém-adicionadas, ignorando a fase de carregamento de instantâneos. Essa opção costuma ser útil ao reinstalar o conector em uma conta em que já existem dados replicados e você deseja continuar a replicação sem precisar criar novos instantâneos das tabelas.

    Para obter detalhes sobre como ignorar o carregamento de instantâneos e usar o processo de carregamento incremental, consulte Replicação incremental.

Importante

Falhas temporárias, como erros de conexão, não impedem a replicação das tabelas. Falhas permanentes, como tipos de dados incompatíveis, impedem a replicação das tabelas. Se uma falha permanente impedir a replicação de uma tabela, remova-a da lista de tabelas replicadas. Depois de resolver o problema que causou a falha, você pode adicionar a tabela de volta à lista de tabelas replicadas.

Status da replicação da tabela

Falhas temporárias, como erros de conexão, não impedem a replicação das tabelas. Entretanto, falhas permanentes, como tipos de dados incompatíveis, impedem a replicação das tabelas.

Para solucionar problemas de replicação ou verificar se uma tabela foi removida com êxito do fluxo de replicação, consulte o armazenamento de estado de tabela:

  1. Na tela do tempo de execução do Openflow, clique com o botão direito do mouse em um grupo de processadores e escolha Controller Services. Uma tabela que lista os serviços do controlador é exibida.

  2. Localize a linha chamada Table State Store, clique no botão More Três pontos verticais indicando mais opções à direita da linha e escolha View State.

Uma lista de tabelas e os respectivos estados atuais é exibida. Digite na caixa de pesquisa para filtrar a lista por nome da tabela. Os estados possíveis são:

  • NEW: a tabela está agendada para replicação, mas a replicação não foi iniciada.

  • SNAPSHOT_REPLICATION: o conector está copiando os dados existentes. Esse status é exibido até que todos os registros sejam armazenados na tabela de destino.

  • INCREMENTAL_REPLICATION: o conector está replicando as alterações ativamente. Esse status é exibido após o término da replicação do instantâneo e continua a ser exibido indefinidamente até que uma tabela seja removida da replicação ou a replicação falhe.

  • FAILED: a replicação foi interrompida permanentemente devido a um erro.

Nota

A tela de tempo de execução do Openflow não exibe alterações de status de tabela, apenas o status atual da tabela. No entanto, as alterações de status de tabela são registradas em logs quando ocorrem. Procure a seguinte mensagem de log:

Replication state for table <database_name>.<schema_name>.<table_name> changed from <old_state> to <new_state>
Copy

Se uma falha permanente impedir a replicação da tabela, remova a tabela da replicação. Depois de resolver o problema que causou a falha, você poderá adicionar a tabela de volta à replicação. Para obter mais informações, consulte Reiniciar a replicação da tabela.

Entendendo a retenção de dados

O conector segue uma filosofia de retenção de dados na qual os dados do cliente nunca são excluídos automaticamente. Você mantém total propriedade e controle sobre seus dados replicados, e o conector preserva as informações históricas em vez de removê-las permanentemente.

Essa abordagem tem as seguintes implicações:

  • As linhas excluídas da tabela de origem sofrem exclusão lógica na tabela de destino, em vez de serem removidas fisicamente.

  • As colunas descartadas da tabela de origem são renomeadas na tabela de destino em vez de serem descartadas.

  • As tabelas de diário são mantidas indefinidamente e não são limpas de maneira automática.

Colunas de metadados da tabela de destino

Cada tabela de destino inclui as seguintes colunas de metadados que rastreiam informações de replicação:

Nome da coluna

Tipo

Descrição

_SNOWFLAKE_INSERTED_AT

TIMESTAMP_NTZ

O carimbo de data/hora em que a linha foi inserida originalmente na tabela de destino.

_SNOWFLAKE_UPDATED_AT

TIMESTAMP_NTZ

O carimbo de data/hora em que a linha foi atualizada pela última vez na tabela de destino.

_SNOWFLAKE_DELETED

BOOLEAN

Indica se a linha foi excluída da tabela de origem. Quando é true, a linha foi excluída e não existe mais na origem.

Linhas excluídas logicamente

Quando uma linha é excluída da tabela de origem, o conector não a remove fisicamente da tabela de destino. Em vez disso, a linha é marcada como excluída definindo a coluna de metadados _SNOWFLAKE_DELETED como true.

Essa abordagem permite:

  • Reter dados históricos para fins de auditoria ou conformidade.

  • Consultar registros excluídos quando necessário.

  • Decidir quando e como remover dados permanentemente com base em suas necessidades.

Para consultar apenas linhas ativas (não excluídas), filtre pela coluna _SNOWFLAKE_DELETED:

SELECT * FROM my_table WHERE _SNOWFLAKE_DELETED = FALSE;
Copy

Para consultar linhas excluídas:

SELECT * FROM my_table WHERE _SNOWFLAKE_DELETED = TRUE;
Copy

Colunas descartadas

Quando uma coluna é descartada da tabela de origem, o conector não descarta a coluna correspondente da tabela de destino. Em vez disso, a coluna é renomeada anexando o sufixo __SNOWFLAKE_DELETED para preservar os valores históricos.

Por exemplo, se uma coluna chamada EMAIL for descartada da tabela de origem, ela será renomeada para EMAIL__SNOWFLAKE_DELETED na tabela de destino. As linhas que existiam antes do descarte da coluna mantêm os valores originais, enquanto as linhas adicionadas após o descarte terão NULL nessa coluna.

Você ainda pode consultar os valores históricos da coluna renomeada:

SELECT EMAIL__SNOWFLAKE_DELETED FROM my_table;
Copy

Colunas renomeadas

Devido às limitações nos mecanismos de captura de dados de alteração (Change Data Capture, CDC), o conector não consegue distinguir entre uma coluna renomeada e uma coluna descartada seguida da adição de uma nova coluna. Como resultado, quando você renomeia uma coluna na tabela de origem, o conector trata isso como duas operações separadas: descartar a coluna original e adicionar uma nova coluna com o novo nome.

Por exemplo, se você renomear uma coluna de A para B na tabela de origem, a tabela de destino conterá:

  • A__SNOWFLAKE_DELETED: contém valores de antes da renomeação. As linhas adicionadas após a renomeação têm NULL nesta coluna.

  • B: Contém valores posteriores à renomeação. As linhas que existiam antes da renomeação têm NULL nessa coluna.

Consultando colunas renomeadas

Para recuperar dados de colunas originais e renomadas como uma única coluna unificada, use uma expressão COALESCE ou CASE.

SELECT
    COALESCE(B, A__SNOWFLAKE_DELETED) AS A_RENAMED_TO_B
FROM my_table;
Copy

Também é possível usar uma expressão CASE:

SELECT
    CASE
        WHEN B IS NOT NULL THEN B
        ELSE A__SNOWFLAKE_DELETED
    END AS A_RENAMED_TO_B
FROM my_table;
Copy

Criando uma exibição para colunas renomeadas

Em vez de modificar a tabela de destino manualmente, é possível criar uma exibição que apresenta a coluna renomeada como uma única coluna unificada. Essa abordagem é recomendada porque preserva os dados originais e evita possíveis problemas com a replicação contínua.

CREATE VIEW my_table_unified AS
SELECT
    *,
    COALESCE(B, A__SNOWFLAKE_DELETED) AS A_RENAMED_TO_B
FROM my_table;
Copy

Importante

A modificação manual da estrutura da tabela de destino (como remover ou renomear colunas) não é recomendada, pois pode interferir na replicação em andamento e causar inconsistências de dados.

Tabelas de diário

Durante a replicação incremental, as alterações do banco de dados de origem são gravadas primeiro em tabelas de diário antes de serem mescladas às tabelas de destino. O conector não remove automaticamente os dados das tabelas de diário, pois esses dados podem ser úteis para fins de auditoria, depuração ou reprocessamento.

As tabelas de diário são criadas no mesmo esquema que as respectivas tabelas de destino e seguem esta convenção de nomenclatura:

<TABLE_NAME>_JOURNAL_<timestamp>_<number>

Onde:

  • <TABLE_NAME> é o nome da tabela de destino.

  • <timestamp> é o carimbo de data/hora da criação no formato de época Unix (segundos desde 1º de janeiro de 1970), garantindo a exclusividade.

  • <number> começa em 1 e incrementa sempre que o esquema da tabela de destino muda, seja devido a alterações de esquema na tabela de origem ou modificações nos filtros de coluna.

Por exemplo, se a tabela de destino for SALES.ORDERS, a tabela de diário poderá ter o nome SALES.ORDERS_JOURNAL_1705320000_1.

Importante

Não descarte as tabelas de diário durante a replicação. A remoção de uma tabela de diário ativa pode causar perda de dados ou falhas na replicação. Descarte tabelas de diário somente depois que a tabela de origem correspondente tiver sido completamente removida da replicação.

Gerenciando o armazenamento de tabelas de diário

Se você precisar gerenciar os custos de armazenamento removendo dados de diário antigos, poderá criar uma tarefa do Snowflake que limpe periodicamente as tabelas de diário para tabelas que não estão mais sendo replicadas.

Antes de implementar a limpeza de diários, verifique se:

  • As tabelas de origem correspondentes foram totalmente removidas da replicação.

  • Os dados do diário não são mais necessários para fins de auditoria ou processamento.

Para obter informações sobre como criar e gerenciar tarefas para limpeza automatizada, consulte Introdução às tarefas.

Próximos passos

Consulte Openflow Connector for MySQL: Mapeamento de dados para entender como o conector mapeia tipos de dados para tipos de dados do Snowflake.

Consulte Configure o Openflow Connector for MySQL para configurar o conector.