Pré-requisitos
Crie uma tabela do MaxCompute
Use tabelas particionadas para simplificar o processamento de dados no MaxCompute.
O DataHub permite sincronizar dados de tópicos TUPLE e BLOB para tabelas do MaxCompute.
-
Em tópicos TUPLE, os tipos de dados da tabela de destino no MaxCompute devem ser compatíveis com o schema do tópico no DataHub. A tabela a seguir apresenta os mapeamentos de tipos de dados.
MaxCompute
DataHub
BIGINT
BIGINT
STRING
STRING
BOOLEAN
BOOLEAN
DOUBLE
DOUBLE
DATETIME
TIMESTAMP
DECIMAL
DECIMAL
TINYINT
TINYINT
SMALLINT
SMALLINT
INT
INTEGER
FLOAT
FLOAT
MAP
Não suportado
ARRAY
Não suportado
Ao criar o schema da tabela do MaxCompute, use apenas tipos de dados suportados pelo DataHub.
-
Para tópicos BLOB, o schema da tabela do MaxCompute deve conter apenas uma coluna STRING. O DataHub sincroniza os dados automaticamente para essa coluna.
DataHub
MaxCompute
BLOB
STRING
Para facilitar o rastreamento e a solução de problemas, adicione uma coluna chamada
__rowkey__ STRINGao criar a tabela do MaxCompute. O DataHub sincroniza automaticamente as informações de rastreamento para essa coluna, auxiliando na investigação dos dados.
Conta e permissões
Ao criar um conector para sincronizar dados com o MaxCompute, forneça credenciais válidas para a conta do MaxCompute. Na maioria dos casos, uma subconta do MaxCompute é suficiente.
-
Conceda a essa conta as permissões necessárias para acessar a tabela do MaxCompute, incluindo
CreateInstance,Describe,AltereUpdate.Gerencie as permissões da tabela do MaxCompute no console do DataWorks. Para mais informações, consulte Configure permissions for the MaxCompute compute engineConfigure permissions for the MaxCompute compute engine. Também é possível conceder permissões pela ferramenta de linha de comando do MaxCompute. Para mais detalhes, consulte MaxCompute User and Authorization Management.
Unidade de timestamp
O parâmetro TimestampUnit define a unidade usada para converter dados TIMESTAMP antes de gravá-los em um tipo de dado relacionado a data, como DATETIME, no sistema de destino.
Se a coluna TIMESTAMP contiver valores em segundos, selecione SECOND para TimestampUnit ao criar o conector. Caso os valores estejam em milissegundos, escolha MILLISECOND. Para valores em microssegundos, selecione MICROSECOND.
Devido aos padrões de gravação do MaxCompute, um número elevado de partições reduz a velocidade da sincronização de dados do DataHub. Ao criar uma tarefa de sincronização para o MaxCompute, limite ao máximo a quantidade de partições, especialmente no modo de sincronização USER_DEFINE.
Mantenha os dados dentro da mesma partição o mais contíguos possível e evite alternâncias frequentes entre partições.
Quando o modo de sincronização controlar a criação de partições, não crie um número excessivo delas.
Com o recurso de lista de permissões ativado em um projeto do MaxCompute, apenas dispositivos incluídos nessa lista podem acessar o projeto. Após ativar a lista de permissões de IP do MaxCompute, adicione o service à lista para garantir que o service de sincronização consiga acessar o projeto. Para mais detalhes, consulte Overview.
Modos de sincronização
Modo Append
Os dados são adicionados à tabela de destino. Este modo é ideal para cenários em que os dados precisam apenas ser inseridos, sem atualizações.
Modo Upsert
Upsert combina Update e Insert com a seguinte lógica:
Caso já exista um registro com a mesma chave primária na tabela de destino, o registro existente será atualizado.
Se não houver nenhum registro com a mesma chave primária na tabela de destino, um novo registro será inserido.
O modo upsert oferece uma forma flexível de lidar com atualizações e inserções, mantendo os dados da tabela de destino sempre atualizados.
Para mais informações sobre o recurso Upsert no MaxCompute, consulte Basic concepts.
Casos de uso
Atualização de dados com base em uma chave primária: Os dados podem mudar ao longo do tempo, exigindo a atualização dos registros existentes com base em suas chaves primárias.
Manutenção da unicidade dos dados na tabela de destino: Este modo evita duplicidades ao impor a unicidade dos registros na tabela de destino.
Tratamento de dados duplicados: Deduplica grandes volumes de dados com base em uma chave primária específica.
Configuração
Tipo de tópico do DataHub: Deve ser um tópico TUPLE.
-
Schema do tópico do DataHub: Dois tipos são suportados:
Formato DTS: Tipo de schema usado quando o DTS sincroniza dados para o DataHub.
Formato personalizado: Schema criado pelo usuário, no qual é necessário selecionar uma coluna do tipo String para funcionar como coluna de operação.
Tabela de destino ODPS: Deve ser uma tabela Transaction 2.0.
Regras de sincronização
Formato DTS
Para formatos de dados sincronizados do DTS para o DataHub, o sistema usa as colunas fixas operation_flag, before_flag e after_flag no schema para determinar como sincronizar os dados com a tabela de destino ODPS, seguindo as regras abaixo:
|
operation_flag |
before_flag |
after_flag |
Tipo de operação |
Ação |
|
I |
* |
* |
UPSERT |
Atualiza o registro na tabela de destino com base na chave primária. |
|
U |
Y |
N |
DELETE |
Exclui o registro da tabela de destino com base na chave primária. |
|
U |
N |
Y |
UPSERT |
Atualiza o registro na tabela de destino com base na chave primária. |
|
D |
* |
* |
DELETE |
Exclui o registro da tabela de destino com base na chave primária. |
Formato personalizado
Para dados criados pelo usuário, o DataHub usa a coluna de operação selecionada para definir como sincronizar os dados com a tabela de destino ODPS.
|
Valor da operação |
Tipo de operação |
Ação |
|
U |
UPSERT |
Atualiza o registro na tabela de destino com base na chave primária. |
|
D |
DELETE |
Exclui o registro da tabela de destino com base na chave primária. |
Crie um conector de sincronização
No console do DataHub, acesse a página de detalhes do seu tópico.
No canto superior direito da página de detalhes do tópico, clique em Sync para criar uma tarefa de sincronização.
-
Selecione o tipo de job MaxCompute para abrir a página Create Connector.
Parâmetros:
Parâmetro
Opção
Obrigatório
Descrição
Nome do projeto
/
Sim
Nome do projeto do MaxCompute. Selecione o projeto na lista suspensa. Caso não tenha permissão para obter a lista de projetos, insira o nome manualmente.
Schema
/
Não
Nome do schema do MaxCompute.
NotaPara usar o recurso Schema, ative o desenvolvimento de sintaxe de schema. Para saber como ativar e obter mais detalhes sobre schemas, consulte Operações de schema.
Tabela
/
Sim
Nome da tabela do MaxCompute. Selecione a tabela na lista suspensa. Se não tiver permissão para recuperar a lista de tabelas, insira o nome manualmente.
NotaAo usar o modo upsert, a tabela de destino deve ser uma tabela Transaction 2.0.
Modo de sincronização
Append
Sim
Adiciona dados à tabela de destino do MaxCompute.
Upsert
Atualiza ou exclui dados na tabela de destino do MaxCompute com base na chave primária.
Para mais detalhes, consulte a seção Modos de sincronização.
Método de autenticação
AK
Autentica usando um par de AccessKey.
DataHub Default Role
Ao selecionar esta opção, a função datahub__access__role é autorizada automaticamente para o projeto. A política de permissão desta função é:
{ "Statement": [ { "Action": [ "odps:CreateInstance", "odps:CreateTable", "odps:Describe", "odps:Alter", "odps:Update" ], "Effect": "Allow", "Resource": [ "*" ] } ], "Version": "1" }Custom Role
Função personalizada que pode ser criada e gerenciada no console do RAM.
Método de upsert
SYNC_CUSTOM
Obrigatório se o Modo de sincronização estiver definido como Upsert. Não aplicável se o Modo de sincronização estiver definido como Append.
Usa um campo de operação de upsert personalizado.
SYNC_NONE
Todos os dados são gravados na tabela de destino usando a operação de upsert.
SYNC_DTS
Aplicável a cenários onde os dados são gravados do DTS para o DataHub com as novas regras de coluna de anexo do DTS ativadas.
SYNC_DTS_OLD
Aplicável a cenários onde os dados são gravados do DTS para o DataHub com as antigas regras de coluna de anexo do DTS ativadas.
Campos de chave primária
/
Colunas de chave primária da tabela de destino. Obrigatório para sincronização via upsert.
Campo de operação de upsert
/
Obrigatório se o Método de upsert estiver definido como SYNC_CUSTOM .
Selecione uma coluna do tipo String para usar como campo Operation. Este campo indica se os dados atuais serão sincronizados com a tabela downstream como uma operação de Upsert ou Delete.
-
Para mais informações sobre o modo upsert, consulte a seção Modo Upsert neste tópico.
Campos a importar: Configure o DataHub para sincronizar apenas um subconjunto de colunas com a tabela do MaxCompute.
-
O modo de partição determina a partição do MaxCompute onde os dados serão gravados. O DataHub suporta os seguintes métodos de particionamento:
Modo de partição
Base da partição
Tipos de tópico
Descrição
USER_DEFINE
Valor da coluna de partição no registro. A coluna deve ter o mesmo nome do campo de partição no MaxCompute.
TUPLE
O schema do DataHub deve incluir os campos de partição do MaxCompute.
O valor da coluna deve ser uma
string UTF-8. O valor pode estar vazio, indicando que os dados não são particionados.
SYSTEM_TIME
Momento em que o registro é gravado no DataHub.
TUPLE / BLOB
Na configuração de partição, defina o formato de conversão de tempo para a partição do MaxCompute.
Defina as informações de fuso horário.
EVENT_TIME
Valor da coluna
event_time(TIMESTAMP)no registro.TUPLE
Na configuração de partição, defina o formato de conversão de tempo para a partição do MaxCompute.
Defina as informações de fuso horário.
META_TIME
Valor do campo de atributo
__dh_meta_time__no registro.TUPLE / BLOB
Na configuração de partição, defina o formato de conversão de tempo para a partição do MaxCompute.
Defina as informações de fuso horário.
Os modos
SYSTEM_TIME,EVENT_TIMEeMETA_TIMEconvertem timestamps para criar partições do MaxCompute com base na configuração de timestamp e fuso horário. A unidade padrão é microssegundos. -
A configuração de partição especifica como converter timestamps em partições do MaxCompute. O console usa um formato fixo padrão para as partições do MaxCompute, conforme abaixo:
Partição
Formato de hora
Descrição
ds
%Y%m%d
Dia
hh
%H
Hora
mm
%M
Minuto
Intervalo de partição: Intervalo de tempo para converter timestamps em partições do MaxCompute. O intervalo varia de
15 minutos a 1440 minutos (1 dia), com incrementos de15 minutos.As informações de fuso horário (TimeZone) determinam o fuso usado para converter partições do MaxCompute com base nos timestamps.
Delimitador: Ao sincronizar dados BLOB, especifique um delimitador hexadecimal para dividir os dados antes de sincronizá-los com o MaxCompute. Por exemplo,
0Arepresenta o caractere de nova linha (\n).Codificação Base64: O DataHub armazena dados BLOB como binários por padrão, enquanto a coluna correspondente no MaxCompute é do tipo STRING. Portanto, ao criar um conector de sincronização no console, os dados são codificados em Base64 por padrão. Para opções adicionais de personalização, use o SDK.
Visualize um conector de sincronização
Acesse a página de detalhes do conector para visualizar informações como status de execução e checkpoint. Nessa página, também é possível realizar operações como reiniciar e parar o conector.
Edite um conector de sincronização
Na página da tarefa de sincronização, clique em Edit para modificar o método de autenticação, campos importados, intervalo de partição, fuso horário e o valor de TimestampUnit.
Exemplos de sincronização
Modo USER_DEFINE
-
Crie um tópico no DataHub.
O schema do tópico deve incluir os campos de partição do MaxCompute, e o tipo deles deve ser STRING.
-
Grave dados no tópico do DataHub usando o SDK do DataHub.
Para testes, use o SDK para gravar alguns registros com valores [ds,hh,mm] de [20210304,01,15] e [20210304,02,15].
-
Crie um conector de sincronização.
No modo de partição USER_DEFINE, defina os campos de configuração de partição durante a sincronização. Se a tabela correspondente não existir no MaxCompute, ela poderá ser criada automaticamente. Na configuração de campos de importação, especifique que os campos f1 e f2 devem ser sincronizados e exclua o campo f3.
-
Confirme os dados sincronizados.
Visualize as informações de sincronização do conector no console do DataHub e consulte os resultados dos dados no MaxCompute.
No modo USER_DEFINE, o DataHub sincroniza os dados para a partição correspondente com base no
valor do campo de agrupamento do MaxCompute.
Modo SYSTEM_TIME
-
Crie um tópico no DataHub.
Como as partições são calculadas com base no momento em que os dados são gravados no DataHub, o schema do tópico precisa conter apenas campos de dados, não campos de partição.
-
Grave dados no tópico do DataHub usando o SDK do DataHub.
Para testes, use o SDK para gravar alguns registros. Suponha que o horário atual de gravação no DataHub seja
2021-03-04 14:02:45. -
Crie um conector de sincronização.
Certifique-se de que a configuração de partição corresponda às partições na tabela do MaxCompute.
-
Confirme os dados sincronizados.
Visualize informações de sincronização, como o DoneTime, para o conector no console do DataHub e consulte os resultados dos dados no MaxCompute.
No modo SYSTEM_TIME, o DataHub sincroniza os dados para a partição correspondente com base no
momento em que os dados foram gravados no DataHub.
Perguntas frequentes
-
Por que um campo de timestamp no MaxCompute exibe uma data como 1970-01-19 após a sincronização?
Causa: A unidade de tempo padrão para sincronização do DataHub para o MaxCompute é microssegundos, mas o timestamp gravado no DataHub estava em milissegundos.
Solução: Certifique-se de que os timestamps sejam gravados no DataHub em microssegundos.