Ao usar o modelo TimeSeries com os SDKs do Tablestore, crie uma tabela de séries temporais, grave dados nessa tabela e, em seguida, recupere as séries temporais e consulte os dados correspondentes.
Pré-requisitos
Instância do modelo TimeSeries criada. Para mais informações, consulte Criar uma instância para o modelo TimeSeries.
Cliente inicializado. Para mais informações, consulte Inicializar um cliente do Tablestore.
Notas de uso
O modelo TimeSeries está disponível nas seguintes regiões: China (Hangzhou), China (Shanghai), China (Pequim), China (Zhangjiakou), China (Ulanqab), China (Shenzhen), China (Chengdu), China (Hong Kong), Japão (Tóquio), Malásia (Kuala Lumpur), Alemanha (Frankfurt), Indonésia (Jacarta), Reino Unido (Londres), EUA (Vale do Silício), EUA (Virgínia), Arábia Saudita (Riade - Região Parceira), e Singapura.
Usar SDKs do Tablestore
Use os SDKs do Tablestore listados abaixo para começar a trabalhar com o modelo TimeSeries. Este tópico usa o Tablestore SDK for Java como exemplo.
Etapa 1: Criar uma tabela de séries temporais
Chame a operação CreateTimeseriesTable para criar uma tabela de armazenamento de dados de séries temporais.
Para armazenar dados de séries temporais com baixo custo e consultar e analisar esses dados rapidamente, crie um analytical store na tabela de séries temporais. Esse recurso serve para armazenamento de longo prazo e análise de dados. Para mais informações, consulte Analytical store para séries temporais.
O código de exemplo a seguir mostra como criar uma tabela de séries temporais chamada test_timeseries_table, na qual os dados nunca expiram:
private static void createTimeseriesTable(TimeseriesClient client) {
String tableName = "test_timeseries_table";
TimeseriesTableMeta timeseriesTableMeta = new TimeseriesTableMeta(tableName);
int timeToLive = -1;
timeseriesTableMeta.setTimeseriesTableOptions(new TimeseriesTableOptions(timeToLive));
CreateTimeseriesTableRequest request = new CreateTimeseriesTableRequest(timeseriesTableMeta);
// Specify that the default analytical store is not created.
request.setEnableAnalyticalStore(false);
client.createTimeseriesTable(request);
}
Etapa 2: Gravar dados de séries temporais
Após criar a tabela de séries temporais, chame a operação PutTimeseriesData para gravar vários registros de dados simultaneamente.
O exemplo de código a seguir ilustra a gravação de múltiplas linhas de dados em uma tabela chamada test_timeseries_table:
private static void putTimeseriesData(TimeseriesClient client) {
List<TimeseriesRow> rows = new ArrayList<TimeseriesRow>();
for (int i = 0; i < 10; i++) {
Map<String, String> tags = new HashMap<String, String>();
tags.put("region", "hangzhou");
tags.put("os", "Ubuntu16.04");
// Specify the measurement name, data source, and tags of a time series to construct the identifiers of the time series.
TimeseriesKey timeseriesKey = new TimeseriesKey("cpu", "host_" + i, tags);
// Specify the timeseriesKey and timeInUs parameters to create a row of time series data.
TimeseriesRow row = new TimeseriesRow(timeseriesKey, System.currentTimeMillis() * 1000 + i);
// Add data values.
row.addField("cpu_usage", ColumnValue.fromDouble(10.0));
row.addField("cpu_sys", ColumnValue.fromDouble(5.0));
rows.add(row);
}
String tableName = "test_timeseries_table";
PutTimeseriesDataRequest putTimeseriesDataRequest = new PutTimeseriesDataRequest(tableName);
putTimeseriesDataRequest.setRows(rows);
// Write multiple rows of time series data at the same time.
PutTimeseriesDataResponse putTimeseriesDataResponse = client.putTimeseriesData(putTimeseriesDataRequest);
// Check whether all data is written to the time series table.
if (!putTimeseriesDataResponse.isAllSuccess()) {
for (PutTimeseriesDataResponse.FailedRowResult failedRowResult : putTimeseriesDataResponse.getFailedRows()) {
System.out.println(failedRowResult.getIndex());
System.out.println(failedRowResult.getError());
}
}
}
Etapa 3: Recuperar séries temporais
Se não tiver certeza sobre as informações da série temporal que deseja consultar, como nome da métrica ou fonte de dados, use a operação QueryTimeseriesMeta. Defina condições específicas para recuperar apenas as séries temporais que atendam aos critérios estabelecidos.
O código a seguir mostra como buscar todas as séries temporais em uma tabela cujo nome da métrica seja cpu e que possuam a tag os com valor iniciado por Ubuntu.
private static void queryTimeseriesMeta(TimeseriesClient client) {
// Specify the name of the time series table.
String tableName = "<TIME_SERIES_TABLE>";
QueryTimeseriesMetaRequest queryTimeseriesMetaRequest = new QueryTimeseriesMetaRequest(tableName);
// Query all time series whose metric name is cpu and that have the os tag whose value is prefixed with Ubuntu. measurement_name="cpu" and have_prefix(os, "Ubuntu")
CompositeMetaQueryCondition compositeMetaQueryCondition = new CompositeMetaQueryCondition(MetaQueryCompositeOperator.OP_AND);
compositeMetaQueryCondition.addSubCondition(new MeasurementMetaQueryCondition(MetaQuerySingleOperator.OP_EQUAL, "cpu"));
compositeMetaQueryCondition.addSubCondition(new TagMetaQueryCondition(MetaQuerySingleOperator.OP_PREFIX, "os", "Ubuntu"));
queryTimeseriesMetaRequest.setCondition(compositeMetaQueryCondition);
queryTimeseriesMetaRequest.setGetTotalHits(true);
// Specify the maximum number of time series metadata entries that can be returned for a single request.
queryTimeseriesMetaRequest.setLimit(100);
// Initiate the query.
QueryTimeseriesMetaResponse queryTimeseriesMetaResponse = client.queryTimeseriesMeta(queryTimeseriesMetaRequest);
// Display the total number of time series that meet the query conditions.
System.out.println(queryTimeseriesMetaResponse.getTotalHits());
// Save the request results.
List<TimeseriesMeta> timeseriesMetas = new ArrayList<TimeseriesMeta>();
timeseriesMetas.addAll(queryTimeseriesMetaResponse.getTimeseriesMetas());
// If NextToken is included in the response, you can initiate a new request to obtain the remaining results.
while (queryTimeseriesMetaResponse.getNextToken() != null) {
queryTimeseriesMetaRequest.setNextToken(queryTimeseriesMetaResponse.getNextToken());
queryTimeseriesMetaResponse = client.queryTimeseriesMeta(queryTimeseriesMetaRequest);
timeseriesMetas.addAll(queryTimeseriesMetaResponse.getTimeseriesMetas());
// Specify the maximum number of time series that can be returned.
if (timeseriesMetas.size() >= 1000) {
break;
}
}
System.out.println(timeseriesMetas.size());
for (TimeseriesMeta timeseriesMeta : timeseriesMetas) {
System.out.println(timeseriesMeta.getTimeseriesKey().getMeasurementName());
System.out.println(timeseriesMeta.getTimeseriesKey().getDataSource());
System.out.println(timeseriesMeta.getTimeseriesKey().getTags());
System.out.println(timeseriesMeta.getAttributes());
System.out.println(timeseriesMeta.getUpdateTimeInUs());
}
}
Etapa 4: Consultar dados de séries temporais
Chame a operação GetTimeseriesData para obter os dados de séries temporais que correspondam às condições especificadas em uma série.
Perguntas frequentes
Referências
Você também pode começar a usar o modelo TimeSeries pelo console do Tablestore ou pelo Tablestore CLI. Para mais detalhes, consulte Usar o modelo TimeSeries no console do Tablestore e Usar o modelo TimeSeries no Tablestore CLI.