Todos os produtos
Search
Central de documentação

Tablestore:Use Tablestore SDKs to deliver Tablestore data to OSS

Última atualização: Jul 03, 2026

Antes de usar os SDKs do Tablestore para entrega de dados, conheça as notas de uso e as operações disponíveis. Crie uma tarefa de entrega no console do Tablestore para transferir dados de uma tabela do Tablestore para um bucket do OSS.

Notas de uso

  • A entrega para data lake está disponível nas seguintes regiões: China (Hangzhou), China (Shanghai), China (Beijing), China (Zhangjiakou) e China (Shenzhen).

  • A entrega ignora operações de exclusão. Os dados excluídos no Tablestore não são removidos do bucket de destino no OSS.

  • Inicializar 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 permanece abaixo de 10 minutos.

    Nota

    A latência P99 representa o percentil 99 da latência, ou seja, 99% das requisições são mais rápidas que esse valor.

Pré-requisitos

  • Execute as seguintes operações no console do Object Storage Service (OSS):

    Ative o OSS e crie um bucket na mesma região da instância do Tablestore. Para mais informações, consulte Ativar o OSS.

    Nota

    A entrega de dados permite transferir informações de uma instância do Tablestore para um bucket do OSS localizado na mesma região. Para entregar dados em outros armazenamentos, como o MaxCompute, envie um ticket.

  • Realize as operações abaixo no console do Tablestore:

    • Obtenha o endpoint da instância do Tablestore na aba Instance Details da página Instance Management. Para mais detalhes, visualize Endpoints.

    • Crie uma tabela de dados. Consulte Operações em uma tabela de dados para orientações.

  • Configure os itens necessários no console do Resource Access Management (RAM):

    • Crie um usuário RAM e anexe a política AliyunOTSFullAccess a ele para conceder permissões de gerenciamento do Tablestore. Siga os passos em Criar um usuário RAM e Conceder permissões a um usuário RAM.

      Aviso

      Se o par de AccessKey da sua conta Alibaba Cloud for vazado, seus recursos ficarão expostos a riscos potenciais. Recomendamos o uso do par de AccessKey de um usuário RAM para realizar operações, evitando assim o comprometimento das credenciais da conta principal.

      Gere um par de AccessKey para o usuário RAM. Visualize Criar um par de AccessKey para instruções.

  • Defina as credenciais de acesso conforme descrito em Configurar credenciais de acesso.

Operações

Operação

Descrição

CreateDeliveryTask

Crie uma tarefa de entrega.

ListDeliveryTask

Lista informações sobre todas as tarefas de entrega criadas para uma tabela de dados.

DescribeDeliveryTask

Consulta as informações descritivas de uma tarefa de entrega.

DeleteDeliveryTask

Exclua uma tarefa de entrega.

Parâmetros

Parâmetro

Descrição

tableName

Nome da tabela de dados.

taskName

Nome da tarefa de entrega.

Deve ter entre 3 e 16 caracteres, contendo apenas letras minúsculas, dígitos e hifens (-). É obrigatório começar e terminar com uma letra minúscula ou dígito.

taskConfig

Configurações da tarefa de entrega, que incluem:

  • ossPrefix: prefixo do diretório no bucket do OSS onde os dados do Tablestore serão entregues. O caminho do diretório aceita as seguintes variáveis de tempo: $yyyy, $MM, $dd, $HH e $mm.

    • Ao utilizar variáveis de tempo no caminho, os diretórios do OSS são gerados dinamicamente com base no momento da gravação dos dados. Isso particiona os dados seguindo o estilo de nomenclatura de partição do Hive, organizando e distribuindo os objetos no OSS por tempo.

    • Caso o caminho não utilize variáveis de tempo, todos os arquivos serão entregues em um único diretório do OSS cujo nome contém o prefixo especificado.

  • ossBucket: nome do bucket do OSS.

  • ossEndpoint: endpoint da região onde o bucket do OSS está localizado.

  • ossStsRole: Alibaba Cloud Resource Name (ARN) da função vinculada ao serviço do Tablestore.

  • format: formato de armazenamento dos dados entregues. Valor padrão: Parquet.

    Por padrão, a codificação PLAIN é utilizada para todos os tipos de dados na entrega.

    Atualmente, apenas o formato Parquet é suportado, portanto não é necessário especificar este parâmetro.

  • eventTimeColumn: coluna de tempo do evento. Define que o particionamento dos dados deve ocorrer com base no tempo registrado nesta coluna específica. O valor consiste no nome da coluna e seu formato (EventTimeFormat). Valores válidos para EventTimeFormat: RFC822, RFC850, RFC1123, RFC3339 e Unix. Escolha o formato conforme sua necessidade.

    Se o parâmetro eventTimeColumn não for especificado, o particionamento usará o horário de gravação dos dados no Tablestore.

  • parquetSchema: campos a serem entregues. Inclui os campos de source, campos de destino e tipos dos campos de destino. A especificação deste parâmetro é obrigatória.

    É possível definir os nomes dos campos de source e destino, bem como a ordem de entrega dos campos de source no schema. Após a entrega no OSS, a distribuição dos dados seguirá a ordem dos campos definida no schema.

    Importante

    Os tipos dos campos de source devem corresponder aos tipos dos campos de destino. Caso contrário, os campos incompatíveis serão descartados como dados incorretos. Para mais detalhes, consulte Mapeamento de tipos de dados.

taskType

Tipo da tarefa de entrega. Valor padrão: BASE_INC. Valores válidos:

  • INC: entrega de dados incrementais. Sincroniza apenas os dados novos.

  • BASE: entrega completa de dados. Varre e sincroniza todos os dados da tabela.

  • BASE_INC: entrega diferencial de dados. Após a sincronização completa, o Tablestore passa a sincronizar apenas os dados incrementais.

    Durante a sincronização incremental, é possível visualizar o horário da última entrega e o status atual da tarefa.

Usar SDKs do Tablestore

Utilize o SDK do Tablestore para Java ou o SDK do Tablestore para Go para entregar dados no OSS. O exemplo abaixo utiliza o SDK do Tablestore para Java.

O código a seguir demonstra como criar uma tarefa de entrega para uma tabela de dados:

import com.alicloud.openservices.tablestore.ClientException;
import com.alicloud.openservices.tablestore.SyncClient;
import com.alicloud.openservices.tablestore.TableStoreException;
import com.alicloud.openservices.tablestore.model.delivery.*;
public class DeliveryTask {

        public static void main(String[] args) {
            // Specify the name of the instance.
            final String instanceName = "yourInstanceName";
            // Specify the endpoint of the instance.
            final String endPoint = "yourEndpoint";
            // Obtain the AccessKey ID and AccessKey secret from the environment variables.
            final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");            
            final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");

            SyncClient client = new SyncClient(endPoint, accessKeyId, accessKeySecret, instanceName);
            try {
                createDeliveryTask(client);
                System.out.println("end");
            } catch (TableStoreException e) {
                System.err.println("The operation failed. Details:" + e.getMessage() + e.getErrorCode() + e.toString());
                System.err.println("Request ID:" + e.getRequestId());
            } catch (ClientException e) {
                System.err.println("The request failed. Details:" + e.getMessage());
            } finally {
                client.shutdown();
            }
        }

        private static void createDeliveryTask(SyncClient client){
            String tableName = "sampleTable";
            String taskName = "sampledeliverytask";
            OSSTaskConfig taskConfig = new OSSTaskConfig();
            taskConfig.setOssPrefix("sampledeliverytask/year=$yyyy/month=$MM");
            taskConfig.setOssBucket("datadeliverytest");
            taskConfig.setOssEndpoint("oss-cn-hangzhou.aliyuncs.com");
            taskConfig.setOssStsRole("acs:ram::17************45:role/aliyunserviceroleforotsdatadelivery");
            // The eventColumn parameter is optional. If you specify this parameter, data is partitioned based on the time of the data in the column that is specified by this parameter. If you do not specify this parameter, data is partitioned based on the time at which the data is written to Tablestore. 
            EventColumn eventColumn = new EventColumn("Col1", EventTimeFormat.RFC1123);
            taskConfig.setEventTimeColumn(eventColumn);
            taskConfig.addParquetSchema(new ParquetSchema("PK1", "PK1", DataType.UTF8));
            taskConfig.addParquetSchema(new ParquetSchema("PK2", "PK2", DataType.BOOL));
            taskConfig.addParquetSchema(new ParquetSchema("Col1", "Col1", DataType.UTF8));
            CreateDeliveryTaskRequest request = new CreateDeliveryTaskRequest();
            request.setTableName(tableName);
            request.setTaskName(taskName);
            request.setTaskConfig(taskConfig);
            request.setTaskType(DeliveryTaskType.BASE_INC);
            CreateDeliveryTaskResponse response = client.createDeliveryTask(request);
            System.out.println("resquestID: "+ response.getRequestId());
            System.out.println("traceID: " + response.getTraceId());
            System.out.println("create delivery task success");
        }
}