curl --request POST \
--url https://api-dev.narrative.io/datasets/{dataset_id}/column-stats/recalculate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"from_snapshot": "<string>"
}
'import requests
url = "https://api-dev.narrative.io/datasets/{dataset_id}/column-stats/recalculate"
payload = { "from_snapshot": "<string>" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({from_snapshot: '<string>'})
};
fetch('https://api-dev.narrative.io/datasets/{dataset_id}/column-stats/recalculate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-dev.narrative.io/datasets/{dataset_id}/column-stats/recalculate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'from_snapshot' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-dev.narrative.io/datasets/{dataset_id}/column-stats/recalculate"
payload := strings.NewReader("{\n \"from_snapshot\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api-dev.narrative.io/datasets/{dataset_id}/column-stats/recalculate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"from_snapshot\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-dev.narrative.io/datasets/{dataset_id}/column-stats/recalculate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"from_snapshot\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"recalculation_id": "a81e1460-fbdc-4204-bd76-a9e496bf760d",
"snapshots": [
"4396758588236543"
],
"from_snapshot_timestamp": "2023-06-28T19:47:36.604706Z",
"until_snapshot_timestamp": "2023-06-28T19:47:36.604709Z"
}{
"error": "Unauthorized",
"error_description": "You are not authorized to use this endpoint."
}{
"error": "Unauthorized",
"error_description": "You are not authorized to use this endpoint."
}Submit recalculation
Recalculates the dataset’s column statistics.
Which path the request takes depends on the dataset:
- A dataset with a statistics configuration (see
PUT /datasets/{dataset_id}/statistics-configuration) is recalculated by a job. The body is ignored, and the response carries the job id inrecalculation_idwithsnapshotsempty and the timestamps null. - A dataset on the Narrative data plane with no statistics configuration is recalculated over a snapshot
range. The body is read here, and is required: send
{}to recalculate from the first snapshot. The response lists the snapshots in the range, or has every field empty when nothing needs recalculating. - A dataset on any other data plane with no statistics configuration is recalculated by a job from its
metrics configuration (see
PUT /datasets/{dataset_id}/stats-config). The body is ignored.
A job is only started for an API key bound to a user.
curl --request POST \
--url https://api-dev.narrative.io/datasets/{dataset_id}/column-stats/recalculate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"from_snapshot": "<string>"
}
'import requests
url = "https://api-dev.narrative.io/datasets/{dataset_id}/column-stats/recalculate"
payload = { "from_snapshot": "<string>" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({from_snapshot: '<string>'})
};
fetch('https://api-dev.narrative.io/datasets/{dataset_id}/column-stats/recalculate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api-dev.narrative.io/datasets/{dataset_id}/column-stats/recalculate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'from_snapshot' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api-dev.narrative.io/datasets/{dataset_id}/column-stats/recalculate"
payload := strings.NewReader("{\n \"from_snapshot\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api-dev.narrative.io/datasets/{dataset_id}/column-stats/recalculate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"from_snapshot\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-dev.narrative.io/datasets/{dataset_id}/column-stats/recalculate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"from_snapshot\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"recalculation_id": "a81e1460-fbdc-4204-bd76-a9e496bf760d",
"snapshots": [
"4396758588236543"
],
"from_snapshot_timestamp": "2023-06-28T19:47:36.604706Z",
"until_snapshot_timestamp": "2023-06-28T19:47:36.604709Z"
}{
"error": "Unauthorized",
"error_description": "You are not authorized to use this endpoint."
}{
"error": "Unauthorized",
"error_description": "You are not authorized to use this endpoint."
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Unique identifier for a dataset.
Body
Read only for a dataset on the Narrative data plane that has no statistics configuration, where it is required.
Id of the first snapshot to recalculate from, as a decimal string.
Response
OK
List of snapshots that should be included into statistics.
Unique recalculation id, or the id of the job doing the recalculation. Null when nothing needs recalculating.
Timestamp of the first snapshot from the range. Null when the recalculation runs as a job.
Timestamp of the last snapshot from the range. Null when the recalculation runs as a job.
Was this page helpful?

