Crie uma tarefa de entrega no console do Tablestore para enviar dados de uma tabela do Tablestore para um bucket do OSS.
Pré-requisitos
Ative o serviço OSS e crie um bucket na mesma região da sua instância do Tablestore. Para mais informações, consulte Ativar o OSS.
A entrega de dados permite enviar dados para qualquer bucket do OSS na mesma região da instância do Tablestore. Para entregar dados em outros data warehouses, como o MaxCompute, envie um ticket para solicitar esse recurso.
Observações de uso
O envio para data lake está disponível nas seguintes regiões: China (Hangzhou), China (Shanghai), China (Beijing), China (Zhangjiakou) e China (Shenzhen).
A entrega de dados ignora operações de exclusão. Os dados excluídos no Tablestore não são removidos do bucket do OSS de destino.
A inicialização de uma nova tarefa de entrega pode levar até um minuto.
-
Com uma taxa de gravação estável, a latência de sincronização geralmente fica dentro de 3 minutos. A latência P99 é inferior a 10 minutos.
NotaA latência P99 representa o percentil 99 da latência, o que significa que 99% das requisições são mais rápidas que esse valor.
Criar uma tarefa de entrega
-
Acesse a página Instance Management.
Faça login no console do Tablestore.
Na barra de navegação superior, selecione um grupo de recursos e uma região. Clique no nome da instância ou clique em Manage Instance na coluna Actions.
Na página Instance Management, clique em Deliver Data to OSS.
-
(Opcional) Crie a função vinculada ao serviço AliyunServiceRoleForOTSDataDelivery.
Na primeira vez que você configurar a entrega de dados, será necessário criar a função vinculada ao serviço Tablestore chamada AliyunServiceRoleForOTSDataDelivery. Essa função concede ao Tablestore permissão para gravar dados em um bucket do OSS. Para mais informações, consulte Função vinculada ao serviço Tablestore.
NotaPara mais detalhes sobre funções vinculadas ao serviço, consulte Funções vinculadas ao serviço.
Na página Deliver Data to OSS, clique em [Role for Delivery Service].
Na caixa de diálogo Role Details, revise as informações e clique em OK.
-
Crie uma tarefa de entrega.
Na página Deliver Data to OSS, clique em Create Task.
-
Na caixa de diálogo Create Task, configure os parâmetros.
Parâmetro
Descrição
Task Name
Nome da tarefa de entrega.
O nome deve ter entre 3 e 16 caracteres e pode conter apenas letras minúsculas (a-z), dígitos e hifens (-). Deve começar e terminar com uma letra minúscula ou dígito.
Destination Region
Região onde estão localizados a instância do Tablestore e o bucket do OSS.
Source Table
Nome da tabela de origem do Tablestore.
Destination Bucket
Nome do bucket do OSS.
ImportanteO bucket do OSS já deve existir e estar na mesma região da instância do Tablestore.
Destination Prefix
Prefixo de diretório no bucket do OSS para os dados entregues do Tablestore. O prefixo de destino aceita cinco variáveis de tempo: $yyyy, $MM, $dd, $HH e $mm. Para mais informações, consulte particionamento por tempo.
-
Incluir variáveis de tempo no prefixo de destino gera dinamicamente diretórios no OSS com base no horário de gravação dos dados. Isso particiona os dados por tempo em um estilo semelhante à nomenclatura de partições do Hive.
-
Se você não incluir variáveis de tempo no prefixo de destino, todos os arquivos serão entregues no prefixo de diretório estático especificado.
Synchronization Mode
Tipo da tarefa de entrega. Valores válidos:
-
Incremental: Sincroniza apenas dados incrementais.
-
Full: Executa uma sincronização única de toda a tabela.
-
Differential: Após concluir a sincronização completa dos dados, a tarefa passa a sincronizar dados incrementais.
Para sincronização de dados incrementais, é possível visualizar o horário da última entrega e o status atual da entrega.
Destination Object Format
Os dados entregues são armazenados no formato colunar Parquet. Por padrão, a entrega de dados usa codificação PLAIN, que suporta dados de qualquer tipo.
Schema Generation Type
É possível selecionar quais campos de origem gravar no arquivo de destino, especificar sua ordem e atribuir novos nomes a eles. A ordem das colunas na configuração do schema determina o layout final dos dados no OSS.
Configure o schema de entrega com base no tipo de geração de schema selecionado.
-
Se você definir Schema Generation Type como Manual, será necessário configurar manualmente o campo de origem, o nome do campo de destino e o tipo do campo de destino para cada campo de entrega.
-
Se você definir Schema Generation Type como Auto Generate, o sistema identificará e corresponderá automaticamente os campos para entrega.
ImportanteO tipo de dado de um campo entregue deve corresponder ao tipo de dado do campo de origem correspondente. Caso contrário, o campo será descartado como dado inconsistente. Para mais informações sobre mapeamentos de tipos de dados, consulte Mapeamento de tipos de dados.
Ao configurar o schema de entrega, você pode executar as seguintes operações:
-
Clique em Add Field para adicionar um novo campo de entrega.
-
Na coluna Actions, clique no ícone de seta para cima
ou seta para baixo
para ajustar a ordem dos campos de entrega. -
Na coluna Actions, clique no ícone de exclusão
para remover um campo de entrega.
Schema Configurations
-
-
Clique em OK.
Na caixa de diálogo View Statement to Create Table, visualize a instrução de criação de tabela gerada automaticamente para uma tabela externa do EMR. Copie essa instrução para criar rapidamente uma tabela externa no EMR e acessar os dados no OSS.
Após criar a tarefa de entrega, execute as seguintes operações:
Visualize detalhes da entrega, como nome da tarefa, nome da tabela, bucket de destino, prefixo de destino, horário da última sincronização e status.
-
Visualize ou copie a instrução de criação de tabela.
Na coluna Actions, clique em View Statement to Create Table para visualizar ou copiar a instrução usada para criar uma tabela externa em um mecanismo de computação, como o EMR. Para mais informações, consulte Usar o EMR.
-
Verifique mensagens de erro de entrega.
Se o bucket do OSS ou as permissões de entrega estiverem configurados incorretamente, a entrega de dados falhará. Nesse caso, visualize as mensagens de erro relevantes na página de status da tarefa. Para mais informações sobre como lidar com erros, consulte Tratamento de erros.
-
Exclua a tarefa de entrega.
Na coluna Actions, clique em Delete para excluir a tarefa de entrega. Se você tentar excluir uma tarefa que esteja no estágio de inicialização, o sistema retornará um erro. Nesse caso, tente novamente mais tarde.
Visualizar dados no OSS
Depois que a tarefa de entrega for inicializada e os dados forem entregues, visualize os dados no OSS usando o console do OSS, uma API ou SDK, ou um mecanismo de computação como o EMR. Para mais informações, consulte Visão geral de arquivos.
O formato de endereço para um objeto do OSS é o seguinte:
oss://BucketName/TaskPrefix/TaskName_ConcurrentID_TaskPrefix__SequenceID
Esse formato consiste nos seguintes componentes: BucketName é o nome do bucket. TaskPrefix é o prefixo do diretório, que também está incluído no nome do arquivo. TaskName é o nome da tarefa de entrega. ConcurrentID é um ID de concorrência interno que começa em 0. O sistema de entrega aumenta automaticamente a concorrência conforme o throughput aumenta. SequenceID é o número de sequência do arquivo, que incrementa a partir de 1.
Particionamento por tempo
A entrega de dados pode extrair o horário em que os dados foram gravados no Tablestore. Use as seguintes variáveis para converter o horário de gravação dos dados em um prefixo de diretório para o bucket do OSS: $yyyy (ano com quatro dígitos), $MM (mês com dois dígitos), $dd (dia com dois dígitos), $HH (hora com dois dígitos) e $mm (minuto com dois dígitos).
Para obter desempenho ideal, recomendamos que os arquivos no OSS tenham pelo menos 4 MB. Quando um mecanismo de computação carrega dados do OSS, um número maior de partições resulta em tempos de execução de transação mais longos. Portanto, a granularidade do particionamento por tempo não deve ser muito fina. Na maioria dos cenários de gravação em tempo real, o particionamento por dia ou hora é suficiente, sendo o particionamento por minuto geralmente desnecessário.
Por exemplo, considere dados gravados no Tablestore às 16:03 em 31 de agosto de 2020. A tabela a seguir mostra os caminhos de objeto resultantes no OSS para diferentes configurações de prefixo de destino.
|
Bucket do OSS |
TaskName |
Prefixo de destino |
Caminho do objeto no OSS |
|
myBucket |
testTask |
myPrefix |
oss://myBucket/myPrefix/testTask_0_myPrefix__1 |
|
myBucket |
testTaskTimeParitioned |
myPrefix/$yyyy/$MM/$dd/$HH/$mm |
oss://myBucket/myPrefix/2020/08/31/16/03/testTaskTimeParitioned_0_myPrefix_2020_08_31_16_03__1 |
|
myBucket |
testTaskTimeParitionedHiveNamingStyle |
myPrefix/year=$yyyy/month=$MM/day=$dd |
oss://myBucket/myPrefix/year=2020/month=08/day=31/testTaskTimeParitionedHiveNamingStyle_0_myPrefix_year=2020_month=08_day=31__1 |
|
myBucket |
testTaskDs |
ds=$yyyy$MM$dd |
oss://myBucket/ds=20200831/testTaskDs_0_ds=20200831__0 |
Mapeamento de tipos de dados
|
Tipo lógico do Parquet |
Tipo de dado do Tablestore |
|
Boolean |
Boolean |
|
Int64 |
Int64 |
|
Double |
Double |
|
UTF8 |
String |
Tratamento de erros
|
Mensagem de erro |
Causa |
Solução |
|
UnAuthorized |
O Tablestore não possui as permissões necessárias. |
Verifique se a função vinculada ao serviço AliyunServiceRoleForOTSDataDelivery existe no RAM. Se a função não existir, crie-a na página Deliver Data to OSS. Ao iniciar a criação de uma tarefa de entrega, o console solicitará a criação da função necessária. |
|
InvalidOssBucket |
O bucket do OSS especificado não existe. |
Após a criação do bucket do OSS, o sistema tentará automaticamente gravar dados nele e atualizará o progresso da entrega. |
Para mais informações sobre o motivo de nenhum dado ser entregue ao OSS após a criação de uma tarefa de entrega, consulte Dados não entregues ao OSS após a criação da tarefa.