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.
NotaA 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.
NotaA 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.
AvisoSe 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:
|
taskType | Tipo da tarefa de entrega. Valor padrão: BASE_INC. Valores válidos:
|
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");
}
}