O DataWorks permite configure uma tarefa de sincronização em lote no modo assistente ou no modo de script para sincronizar dados de bancos de dados e tabelas fragmentados para uma única tabela de destino. Este tópico apresenta um exemplo de sincronização de dados de bancos de dados MySQL fragmentados.
Pré-requisito
Prepare as fontes de dados para sincronização. Para mais informações, consulte Supported data sources and read/write plug-ins.
Visão geral
Use os métodos a seguir para crie uma tarefa de sincronização em lote para fragmentação. A tabela abaixo compara esses métodos.
Item | Sharded data source and codeless UI (recomendado) | ||
Suporte a interface sem código | Sim | Sim | Não |
Configuração de nome de tabela baseada em regras | Permite configure nomes de tabelas de origem usando expressões regulares. Em tempo de execução, a tarefa pesquisa e sincroniza as tabelas correspondentes. | Não compatível. | Permite configure nomes de tabelas usando um intervalo numérico, por exemplo, |
Exigência de schemas de tabela idênticos | Configure uma política de campos ausentes para permitir que algumas tabelas não tenham determinados campos. Esses campos são gerados como valores NULL. | Todas as tabelas devem ter schemas idênticos. | |
Referência de mapeamento de colunas | A primeira tabela correspondente na fonte de metadados da fonte de dados fragmentada. | A primeira tabela da primeira fonte de dados. | Escrito manualmente no modo de script. |
Número de fontes de dados compatíveis | Uma fonte de dados fragmentada comporta até 5.000 fontes de dados referenciadas. | Recomenda-se configure no máximo 50 fontes de dados por nó. | |
Necessidade de modifique e publicar o nó ao adicionar uma fonte de dados | Não é necessário modifique o nó. Após modifique a fonte de dados, a alteração entra em vigor nas instâncias em execução subsequentes. | Modifique a tarefa para adicionar a fonte de dados e configure o nome da tabela correspondente. | |
Tipos de fontes de dados compatíveis | MySQL, PolarDB, PolarDB-O, OceanBase | MySQL, PolarDB, AnalyticDB, OceanBase | MySQL, PolarDB, AnalyticDB, SQL Server, Oracle, PostgreSQL, DM, DB2, Oracle, OceanBase |
Fonte de dados fragmentada e interface sem código
-
Acesse o DataWorks console. Na região desejada, clique em no painel de navegação à esquerda. Selecione um workspace na lista suspensa e clique em Go to Data Integration.
No painel de navegação à esquerda, clique em Data Source, clique em Add Data Source e selecione um tipo de fonte de dados. Este método é compatível com MySQL, PolarDB e PolarDB-O.
-
Crie uma fonte de dados padrão para cada banco de dados fragmentado. Este tópico usa MySQL como exemplo. Para ver as etapas detalhadas, consulte Configure a MySQL data source.
Após a criação, visualize a fonte de dados MySQL de cada banco de dados fragmentado na página Data Source List. Por exemplo, o nome da fonte de dados é MySQL_20241114, correspondendo ao banco de dados
user_info_20241114. -
Crie uma Sharded Data Source para consolidar múltiplas fontes de dados padrão em uma única fonte a ser usada como source na sincronização de dados.
Clique em Add Data Source e selecione Sharded Data Source. Na caixa de diálogo Add Data Source, clique na aba Sharded Data Source. Os tipos de fonte de dados disponíveis incluem MySQL (sharded), PolarDB-O (sharded) e PolarDB (sharded).
-
Selecione o tipo de fonte de dados fragmentada conforme necessário e configure os parâmetros relevantes. Este tópico usa MySQL (sharded) como exemplo.
No campo Data Source Name, insira um nome como
Database_and_Table_Sharding_of_MySQL. Após concluir a configuração, clique em OK para crie a fonte de dados fragmentada.Descrição dos principais parâmetros:
Defina um nome personalizado em Data Source Name.
Select Data Sources: selecione as fontes de dados padrão criadas para cada banco de dados fragmentado.
-
Meta Data Source: na sincronização de fragmentação, todas as fontes de dados devem ter schemas de tabela idênticos. Selecione uma das fontes de dados como modelo de metadados padrão para recuperar o schema de tabela padrão ao configure uma tarefa de sincronização.
ImportanteSe os schemas de tabela entre as fontes de dados forem inconsistentes, as tarefas de sincronização subsequentes falharão.
-
Configure a tarefa de sincronização de fragmentação.
Para configure a fragmentação no modo assistente: em Data Source, selecione MySQL (sharded) e escolha a fonte de dados fragmentada criada anteriormente. Para ver as etapas completas de configuração da tarefa, consulte Configure a batch synchronization task in wizard mode.
NotaEste tópico usa MySQL (sharded) como exemplo. Selecione o tipo adequado conforme sua necessidade.
Na página de teste de conectividade de rede, o nome da fonte de dados de origem é Database_and_Table_Sharding_of_MySQL, o grupo de recursos é Serveless_Resource (China (Shanghai), pagamento conforme o uso, 0,5 CU) e o destino é MaxCompute(ODPS) com o nome de fonte de dados doc_test_project. Os resultados do teste de conectividade de rede indicam que os três estão conectados.
Clique em Next.
-
Selecione as tabelas a sincronizar, clique em Save e em Publish, e conclua as etapas restantes.
Na página Configure Source and Destination, na Etapa 2 Configure Task, a seção Source à esquerda está configurada da seguinte forma: a fonte de dados é MySQL (sharded), o método de seleção de tabela é Fixed Table, a tabela é user_info e a chave de divisão é id. (A fragmentação exige que todas as tabelas tenham schemas idênticos; caso contrário, ocorrem erros de execução.) A seção Destination à direita está configurada da seguinte forma: a fonte de dados é MaxCompute(ODPS), a tabela é user_info, as informações de partição são
pt=${bizdate}, o modo de escrita é Clear existing data before writing (Insert Overwrite) e a conversão de strings vazias para NULL está defina como No.
Fonte de dados padrão e interface sem código
Crie uma fonte de dados padrão para cada banco de dados fragmentado. Este tópico usa MySQL como exemplo. Para ver as etapas detalhadas, consulte Configure a MySQL data source.
-
Configure a tarefa de sincronização de fragmentação.
Para configure a fragmentação no modo assistente: na seção Data Source, clique em + Edit Source. No painel de seleção de fonte de dados exibido, selecione e adicione as fontes de dados correspondentes aos múltiplos bancos de dados fragmentados. Para ver as etapas completas de configuração da tarefa, consulte Configure a batch synchronization task in wizard mode.
Adicione múltiplas fontes de dados padrão em Selected Data Sources e clique em Confirm.
Clique em Next.
-
Selecione as tabelas a sincronizar de cada fonte de dados, clique em Save e em Publish, e conclua as etapas restantes.
ImportanteNessa configuração, a opção Data Sources for Sharded Databases Use Same Account and Password é selecionada por padrão. Isso significa que todas as fontes de dados fragmentadas usarão a conta e a senha configuradas na primeira fonte de dados para acessar os bancos de dados. Se os bancos de dados fragmentados usarem contas e senhas distintas, desmarque essa opção para que cada fonte de dados utilize suas próprias credenciais.
Na página Configure Source and Destination, a seção Source à esquerda contém três fontes de dados MySQL fragmentadas configuradas (como MySQL_20241112, MySQL_20241114 e MySQL_20241113), e cada fonte de dados seleciona a tabela user_info. A página exibe um aviso: "Sharding requires all tables to have identical schemas; otherwise, execution errors occur." A seção Destination à direita seleciona a fonte de dados MaxCompute(ODPS), a tabela é user_info, as informações de partição estão defina como
pt=${bizdate}e o modo de escrita é Clear existing data before writing (Insert Overwrite).
Editor de código
-
Configure a tarefa de sincronização de fragmentação.
Para configure a fragmentação no modo de script: veja a seguir um exemplo de script. Para ver as etapas completas de configuração da tarefa, consulte Configure a batch synchronization task in script mode.
ImportanteAntes de executar a tarefa, remova os comentários do código a seguir.
{ "type":"job", "version":"2.0", "steps":[ { "stepType":"mysql", "parameter":{ "envType":0, "column":[ "id", "name" ], "socketTimeout":3600000, "tableComment":"", "connection":[ //Configure connections based on the number of sharded databases { "datasource":"datasourceName1", //Data source 1 for sharded databases and tables "table":[ //Table list 1 for sharded databases and tables "tb1" ] }, { "datasource":"datasourceName2", //Data source 2 for sharded databases and tables "table":[ //Table list 2 for sharded databases and tables "tb2", "tb3" ] } ], "useSpecialSecret":true,//Each data source uses its own password "where":"", "splitPk":"id", "encoding":"UTF-8" }, "name":"Reader", "category":"reader" }, { "stepType":"odps", "parameter":{ "partition":"pt=${bizdate}", "truncate":true, "datasource":"odpsname", "envType":0, "isSupportThreeModel":false, "column":[ "id", "name" ], "emptyAsNull":false, "tableComment":"", "table":"t1", "consistencyCommit":false }, "name":"Writer", "category":"writer" } ], "setting":{ "executeMode":null, "errorLimit":{ "record":"" }, "speed":{ "concurrent":2, "throttle":false } }, "order":{ "hops":[ { "from":"Reader", "to":"Writer" } ] } }