Tous les produits
Search
Centre de documentation

Time Series Database:Interroger des données

Dernière mise à jour :Aug 10, 2026

Interroge les points de données d'une ou plusieurs séries temporelles sur une plage de temps spécifiée. Envoyez une requête POST vers /api/query avec un corps JSON qui définit la plage de temps et une ou plusieurs sous-requêtes.

Syntaxe de la requête

POST /api/query

Paramètres de la requête

Paramètre Type Obligatoire Valeur par défaut Description
start Long Oui Le début de la plage de temps. Unité : secondes ou millisecondes. TSDB détermine l'unité en fonction de la valeur numérique. Consultez Unités d'horodatage.
end Long Non Heure actuelle du serveur La fin de la plage de temps. Unité : secondes ou millisecondes. Par défaut, il s'agit de l'heure actuelle sur le serveur TSDB. Consultez Unités d'horodatage.
queries Array Oui Un tableau de sous-requêtes. Consultez Paramètres de sous-requête.
msResolution Boolean Non false Indique s'il faut renvoyer les horodatages en millisecondes. S'applique uniquement lorsque les points de données interrogés utilisent des horodatages à la précision de la seconde. Si true, tous les horodatages de la réponse sont convertis en millisecondes. Si false, l'unité d'origine est conservée. Les points de données stockés avec des horodatages en millisecondes sont toujours renvoyés en millisecondes, quel que soit ce paramètre.
hint Map Non Une indication de requête pour réduire le temps de réponse. Consultez Paramètre : hint.

Unités d'horodatage

TSDB détermine l'unité d'horodatage à partir de la valeur numérique :

Plage Unité Plage de dates
[4294968, 4294967295] Secondes 1970-02-20 01:02:48 – 2106-02-07 14:28:15
[4294967296, 9999999999999] Millisecondes 1970-02-20 01:02:47.296 – 2286-11-21 01:46:39.999
(-∞, 4294968) ou (9999999999999, +∞) Invalide
Ces règles s'appliquent à la fois à /api/put (écriture) et /api/query (requête).

Pour interroger les points de données à un instant précis, définissez start et end sur la même valeur, par exemple 1356998400.

Paramètres de sous-requête

Chaque objet du tableau queries prend en charge les paramètres suivants :

Paramètre Type Obligatoire Valeur par défaut Description
aggregator String Oui La fonction d'agrégation. Consultez Paramètre : aggregator. Exemple : sum.
metric String Oui Le nom de la métrique. Exemple : sys.cpu0.
rate Boolean Non false Indique s'il faut calculer le taux de croissance entre les valeurs consécutives. Formule : (Vt − Vt-1) / (t − t-1).
delta Boolean Non false Indique s'il faut calculer la différence entre les valeurs consécutives. Formule : Vt − Vt-1. Consultez Paramètre : delta.
limit Integer Non 0 Le nombre maximal de points de données à renvoyer par série temporelle et par page. 0 signifie qu'il n'y a aucune limite.
offset Integer Non 0 Le nombre de points de données à ignorer par série temporelle et par page. 0 signifie qu'aucun point de données n'est ignoré.
dpValue String Non Filtre les points de données renvoyés par valeur. Opérateurs pris en charge : >, <, =, <=, >=, !=. Si la valeur est une chaîne, seuls = et != sont pris en charge. Appliqué après l'agrégation.
preDpValue String Non Filtre les points de données bruts lors de l'analyse avant l'agrégation. Mêmes opérateurs que pour dpValue. Les points de données qui ne passent pas ce filtre sont exclus de tous les calculs.
downsample String Non La configuration de sous-échantillonnage. Consultez Paramètre : downsample. Exemple : 60m-avg.
tags Map Non Conditions de filtrage basées sur les tags. Mutuellement exclusif avec filters. Si les deux sont spécifiés, celui qui apparaît en dernier dans le JSON prend effet.
filters List Non Conditions de filtrage au format JSON. Mutuellement exclusif avec tags. Si les deux sont spécifiés, celui qui apparaît en dernier dans le JSON prend effet. Consultez Paramètre : filters.
hint Map Non Une indication de requête au niveau de la sous-requête. Consultez Paramètre : hint.
forecasting String Non Prédit les futurs points de données à l'aide de l'entraînement IA. Consultez Paramètre : forecasting.
abnormaldetect String Non Détecte les anomalies dans une série temporelle à l'aide de l'entraînement IA. Consultez Paramètre : abnormaldetect.
Une seule requête prend en charge un maximum de 200 sous-requêtes.
Si tags et filters sont tous deux spécifiés, le paramètre qui apparaît en dernier dans le JSON prend effet.

Exemple de requête

POST /api/query
{
  "start": 1356998400,
  "end": 1356998460,
  "queries": [
    {
      "aggregator": "sum",
      "metric": "sys.cpu.0"
    },
    {
      "aggregator": "sum",
      "metric": "sys.cpu.1"
    }
  ]
}

Éléments de la réponse

Une requête réussie renvoie un code HTTP 200 avec un tableau JSON. Chaque élément correspond au résultat d'une sous-requête.

Paramètre Description
metric Le nom de la métrique.
tags Les tags dont les valeurs n'ont pas été agrégées.
aggregateTags Les tags dont les valeurs ont été agrégées.
dps Les points de données sous forme de paires horodatage-valeur.

Exemple de réponse

[
  {
    "metric": "tsd.hbase.puts",
    "tags": {"appName": "hitsdb"},
    "aggregateTags": ["host"],
    "dps": {
      "1365966001": 25595461080,
      "1365966061": 25595542522,
      "1365966062": 25595543979,
      "1365973801": 25717417859
    }
  }
]

Paramètre : limit et offset

Utilisez limit et offset conjointement pour paginer les résultats au sein d'une sous-requête.

  • limit : le nombre maximal de points de données à renvoyer par série temporelle. La valeur par défaut 0 signifie qu'il n'y a aucune limite.

  • offset : le nombre de points de données à ignorer par série temporelle. La valeur par défaut 0 signifie qu'aucun point de données n'est ignoré.

Important

Ni limit ni offset ne peuvent être définis sur un nombre négatif.

Pour récupérer les points de données classés de 1001 à 1500, définissez limit sur 500 et offset sur 1000 :

{
  "start": 1346046400,
  "end": 1347056500,
  "queries": [
    {
      "aggregator": "avg",
      "downsample": "2s-sum",
      "metric": "sys.cpu.0",
      "limit": "500",
      "offset": "1000",
      "tags": {
        "host": "localhost",
        "appName": "hitsdb"
      }
    }
  ]
}

Paramètre : dpValue

Filtre les points de données par valeur après l'agrégation. Opérateurs pris en charge : >, <, =, <=, >=, !=.

Important

Lorsque la valeur du filtre est une chaîne, seuls = et != sont pris en charge.

Exemple

{
  "start": 1346046400,
  "end": 1347056500,
  "queries": [
    {
      "aggregator": "avg",
      "downsample": "2s-sum",
      "metric": "sys.cpu.0",
      "dpValue": ">=500",
      "tags": {
        "host": "localhost",
        "appName": "hitsdb"
      }
    }
  ]
}

Paramètre : delta

Lorsque delta est défini sur true, chaque valeur de la réponse dps représente la différence calculée entre les points de données consécutifs. Si le résultat original contient n paires clé-valeur, le résultat delta contient n−1 paires ; la première paire est supprimée car aucune valeur précédente n'existe pour le calcul. L'opérateur delta s'applique également aux valeurs après le sous-échantillonnage.

deltaOptions

Configurez deltaOptions dans la sous-requête pour contrôler le calcul des différences.

Paramètre Type Obligatoire Valeur par défaut Description
counter Boolean Non false Traite les valeurs de métrique comme des comptes cumulatifs monotones croissants ou décroissants (similaire à un compteur). Le serveur ne valide pas les valeurs de la métrique.
counterMax Integer Non Le seuil pour les valeurs delta lorsque counter est true. Si la valeur absolue du delta dépasse ce seuil, le delta est considéré comme anormal. Lorsqu'il n'est pas défini, aucun seuil n'est appliqué.
dropReset Boolean Non false Contrôle le comportement pour les deltas anormaux lorsque counterMax est défini. Si true, les deltas anormaux sont ignorés. Si false, les deltas anormaux sont réinitialisés à 0.

Exemple

{
  "start": 1346046400,
  "end": 1347056500,
  "queries": [
    {
      "aggregator": "none",
      "downsample": "5s-avg",
      "delta": true,
      "deltaOptions": {
        "counter": true,
        "counterMax": 100
      },
      "metric": "sys.cpu.0",
      "dpValue": ">=50",
      "tags": {
        "host": "localhost",
        "appName": "hitsdb"
      }
    }
  ]
}

Paramètre : downsample

Le sous-échantillonnage agrège les données sur un intervalle de temps spécifié, ce qui est utile lors de l'interrogation de données sur de longues plages de temps. La plage de temps est divisée en fenêtres de l'intervalle spécifié, et chaque horodatage renvoyé marque le début d'une fenêtre.

Format

<interval><units>-<aggregator>[-<fill policy>]
Important

Lorsque downsample est spécifié, TSDB étend automatiquement la plage de requête d'un intervalle de chaque côté. Par exemple, une plage de [1346846401, 1346846499] avec un intervalle de 5 minutes devient [1346846101, 1346846799].

Champs

interval

Une valeur numérique telle que 5 ou 60. Utilisez 0all pour agréger tous les points de données de la plage en une seule valeur.

units

Valeur Unité
s Secondes
m Minutes
h Heures
d Jours
n Mois
y Années
Par défaut, les horodatages sont alignés par troncature modulo : Aligned timestamp = Data timestamp − (Data timestamp % Time interval) .
Pour un alignement sur un intervalle calendaire (par exemple, de 00:00 à 00:00 le jour suivant), ajoutez c à l'unité : 1dc .

aggregator

Opérateur Description
avg Valeur moyenne
count Nombre de points de données
first Première valeur
last Dernière valeur
min Valeur minimale
max Valeur maximale
median Valeur médiane
sum Somme des valeurs
zimsum Somme des valeurs (avec interpolation par zéro)
rfirst Identique à first, mais renvoie l'horodatage d'origine au lieu de l'horodatage aligné
rlast Identique à last, mais renvoie l'horodatage d'origine au lieu de l'horodatage aligné
rmin Identique à min, mais renvoie l'horodatage d'origine au lieu de l'horodatage aligné
rmax Identique à max, mais renvoie l'horodatage d'origine au lieu de l'horodatage aligné
Les opérateurs rfirst , rlast , rmin et rmax ne peuvent pas être utilisés avec une politique de remplissage dans la même expression de sous-échantillonnage.

Politiques de remplissage

Les politiques de remplissage définissent la manière dont TSDB comble les valeurs manquantes dans les résultats de sous-échantillonnage. Lorsqu'aucune donnée n'existe dans une fenêtre temporelle, TSDB applique la politique de remplissage pour produire une valeur.

Politique de remplissage Remplit les valeurs manquantes avec
none Aucun remplissage (par défaut)
nan null
null null
zero 0
linear Une valeur calculée par interpolation linéaire
previous La valeur précédente
near La valeur adjacente la plus proche
after La valeur suivante
fixed Une valeur fixe spécifiée par l'utilisateur

Politique de remplissage fixe

Pour remplir les valeurs manquantes avec un nombre fixe, utilisez le format suivant :

<interval><units>-<aggregator>-fixed#<number>

La valeur fixe peut être positive ou négative. Exemples : 1h-sum-fixed#6, 1h-avg-fixed#-8.

Exemples de sous-échantillonnage

1m-avg, 1h-sum-zero, 1h-sum-near

Important

Le paramètre downsample est facultatif. Pour désactiver explicitement le sous-échantillonnage, définissez-le sur null ou sur une chaîne vide : {"downsample": null} ou {"downsample": ""}.

Paramètre : aggregator

Après le sous-échantillonnage, TSDB fusionne plusieurs séries chronologiques en une seule en agrégeant les valeurs à chaque horodatage aligné. L'agrégation est ignorée lorsqu'une seule série chronologique correspond à la requête.

Interpolation

Lors de l'agrégation de plusieurs séries chronologiques, si une série ne possède pas de valeur à un horodatage donné, elle reçoit une valeur interpolée, à condition qu'aucune politique de remplissage ne soit spécifiée et qu'au moins une autre série ait une valeur à cet horodatage.

Par exemple, lors de la fusion de deux séries chronologiques avec {"downsample": "10s-avg", "aggregator": "sum"} :

  • La série chronologique 1 possède des valeurs aux horodatages t+0, t+10, t+20 et t+30.

  • La série chronologique 2 possède des valeurs aux horodatages t+0, t+20 et t+30.

Avant l'agrégation, TSDB interpole une valeur pour la série chronologique 2 à l'horodatage t+10. La méthode d'interpolation dépend de l'agrégateur :

Opérateur Description Méthode d'interpolation
avg Valeur moyenne Interpolation linéaire
count Nombre de points de données 0 interpolé
mimmin Valeur minimale Valeur maximale interpolée
mimmax Valeur maximale Valeur minimale interpolée
min Valeur minimale Interpolation linéaire
max Valeur maximale Interpolation linéaire
none Ignore l'agrégation 0 interpolé
sum Somme des valeurs Interpolation linéaire
zimsum Somme des valeurs 0 interpolé

Paramètre : filters

Le paramètre filters accepte une liste d'objets filtre JSON pour le filtrage basé sur les tags. Il est mutuellement exclusif avec le paramètre tags.

Paramètres de l'objet filtre

Paramètre Type Obligatoire Par défaut Description
type String Oui Le type de filtre. Consultez la section Types de filtres. Exemple : literal_or.
tagk String Oui La clé de tag sur laquelle appliquer le filtre. Exemple : host.
filter String Oui L'expression de filtre. Exemple : `web01

web02`.

groupBy Boolean Non false Indique s'il faut effectuer une opération GROUP BY sur les valeurs de tag correspondantes.

Vous pouvez également utiliser des expressions de tag abrégées directement dans la sous-requête :

  • tagk = * : effectue un GROUP BY sur toutes les valeurs de la clé de tag.

  • tagk = tagv1|tagv2 : agrège séparément les valeurs tagv1 et tagv2.

Types de filtres

Type de filtre Exemple Description
literal_or `web01 web02`

Correspond aux valeurs de tag exactes séparées par `

`. Sensible à la casse.

wildcard *.example.com Correspond aux valeurs de tag à l'aide d'un modèle générique. Sensible à la casse.

Exemple sans filtres

{
  "start": 1356998400,
  "end": 1356998460,
  "queries": [
    {
      "aggregator": "sum",
      "metric": "sys.cpu.0",
      "rate": "true",
      "tags": {
        "host": "*",
        "dc": "lga"
      }
    }
  ]
}

Exemple avec filtres

{
  "start": 1356998400,
  "end": 1356998460,
  "queries": [
    {
      "aggregator": "sum",
      "metric": "sys.cpu.0",
      "rate": "true",
      "filters": [
        {
          "type": "wildcard",
          "tagk": "host",
          "filter": "*",
          "groupBy": true
        },
        {
          "type": "literal_or",
          "tagk": "dc",
          "filter": "lga|lga1|lga2",
          "groupBy": false
        }
      ]
    }
  ]
}

Paramètre : hint

Un indice de requête réduit le temps de réponse en contrôlant les index de clés de tag que TSDB utilise lors de l'exécution de la requête. Par exemple, si les séries temporelles correspondant à l'ensemble de tags B constituent un sous-ensemble de celles correspondant à l'ensemble A, vous pouvez indiquer à TSDB d'utiliser uniquement l'index pour B, évitant ainsi la surcharge liée à la lecture de A.

Le paramètre hint peut être défini au niveau supérieur (s'applique à l'ensemble de la requête) ou dans une sous-requête (s'applique uniquement à cette sous-requête).

La version actuelle de TSDB prend uniquement en charge le paramètre tagk dans un indice.

Format

Dans la map tagk, définissez chaque clé de tag sur 1 pour utiliser son index, ou sur 0 pour l'ignorer. Toutes les valeurs doivent être soit 0 soit 1 ; mélanger les deux dans le même indice provoque une erreur.

Version requise : TSDB V2.6.1 et versions ultérieures.

Indice appliqué à une sous-requête

{
  "start": 1346846400,
  "end": 1346846400,
  "queries": [
    {
      "aggregator": "none",
      "metric": "sys.cpu.nice",
      "tags": {
        "dc": "lga",
        "host": "web01"
      },
      "hint": {
        "tagk": {
          "dc": 1
        }
      }
    }
  ]
}

Indice appliqué à l'ensemble de la requête

{
  "start": 1346846400,
  "end": 1346846400,
  "queries": [
    {
      "aggregator": "none",
      "metric": "sys.cpu.nice",
      "tags": {
        "dc": "lga",
        "host": "web01"
      }
    }
  ],
  "hint": {
    "tagk": {
      "dc": 1
    }
  }
}

Cas d'erreur

Mélange de valeurs 0 et 1

La requête suivante génère une erreur, car la valeur de dc est 1 et celle de host est 0 :

{
  "start": 1346846400,
  "end": 1346846400,
  "queries": [
    {
      "aggregator": "none",
      "metric": "sys.cpu.nice",
      "tags": {
        "dc": "lga",
        "host": "web01"
      }
    }
  ],
  "hint": {
    "tagk": {
      "dc": 1,
      "host": 0
    }
  }
}

Réponse d'erreur :

{
  "error": {
    "code": 400,
    "message": "The value of hint should only be 0 or 1, and there should not be both 0 and 1",
    "details": "TSQuery(start_time=1346846400, end_time=1346846400, subQueries[TSSubQuery(metric=sys.cpu.nice, filters=[filter_name=literal_or, tagk=dc, literals=[lga], group_by=true, filter_name=literal_or, tagk=host, literals=[web01], group_by=true], tsuids=[], agg=none, downsample=null, ds_interval=0, rate=false, rate_options=null, delta=false, delta_options=null, top=0, granularity=null, granularityDownsample=null, explicit_tags=explicit_tags, index=0, realTimeSeconds=-1, useData=auto, limit=0, offset=0, dpValue=null, preDpValue=null, startTime=1346846400000, endTime=1346846400000, Query_ID=null)] padding=false, no_annotations=false, with_global_annotations=false, show_tsuids=false, ms_resolution=false, options=[])"
  }
}

Valeur différente de 0 ou 1

{
  "start": 1346846400,
  "end": 1346846400,
  "queries": [
    {
      "aggregator": "none",
      "metric": "sys.cpu.nice",
      "tags": {
        "dc": "lga",
        "host": "web01"
      }
    }
  ],
  "hint": {
    "tagk": {
      "dc": 100
    }
  }
}

Réponse d'erreur :

{
  "error": {
    "code": 400,
    "message": "The value of hint can only be 0 or 1, and it is detected that '100' is passed in",
    "details": "TSQuery(start_time=1346846400, end_time=1346846400, subQueries[TSSubQuery(metric=sys.cpu.nice, filters=[filter_name=literal_or, tagk=dc, literals=[lga], group_by=true, filter_name=literal_or, tagk=host, literals=[web01], group_by=true], tsuids=[], agg=none, downsample=null, ds_interval=0, rate=false, rate_options=null, delta=false, delta_options=null, top=0, granularity=null, granularityDownsample=null, explicit_tags=explicit_tags, index=0, realTimeSeconds=-1, useData=auto, limit=0, offset=0, dpValue=null, preDpValue=null, startTime=1346846400000, endTime=1346846400000, Query_ID=null)] padding=false, no_annotations=false, with_global_annotations=false, show_tsuids=false, ms_resolution=false, options=[])"
  }
}

Paramètre : forecasting

Ce paramètre utilise l'apprentissage automatique sur des données de séries temporelles historiques pour prédire les points de données futurs. TSDB s'appuie sur les données existantes afin d'identifier les tendances et les cycles, puis projette les valeurs à venir.

Format

<AlgorithmName>-<ForecastPointCount>[-<ForecastPolicy>]

Algorithmes pris en charge

  • arima — Modèle ARIMA (AutoRegressive Integrated Moving Average). Le paramètre ForecastPolicy pour ARIMA comprend deux champs :

    • delta : ordre de différenciation. Valeur par défaut : 1. Augmentez cette valeur pour réduire les fluctuations des données.

    • seasonality : longueur du cycle exprimée en nombre de points de données. Valeur par défaut : 1. Définissez ce paramètre en fonction du cycle naturel des données (par exemple, 10 si les données fluctuent tous les 10 points).

  • holtwinters — Lissage exponentiel de Holt-Winters. Le paramètre ForecastPolicy pour Holt-Winters comprend un champ :

    • seasonality : identique à ARIMA. Valeur par défaut : 1.

Exemples : arima-1, arima-48-1-48, holtwinters-1-1

Exemple

Considérez les données existantes de la série suivantes :

[
  {
    "metric": "sys.cpu.nice",
    "tags": {"dc": "lga", "host": "web00"},
    "aggregateTags": [],
    "dps": {
      "1346837400": 1,
      "1346837401": 2,
      "1346837402": 3,
      "1346837403": 4,
      "1346837404": 5,
      "1346837405": 6,
      "1346837406": 7,
      "1346837407": 8,
      "1346837408": 9,
      "1346837409": 10,
      "1346837410": 11,
      "1346837411": 12
    }
  }
]

Requête :

{
  "start": 1346837400,
  "end": 1346847400,
  "queries": [
    {
      "aggregator": "none",
      "metric": "sys.cpu.nice",
      "forecasting": "arima-1"
    }
  ]
}

Résultat de la prévision (un point de données supplémentaire est ajouté) :

[
  {
    "metric": "sys.cpu.nice",
    "tags": {"dc": "lga", "host": "web00"},
    "aggregateTags": [],
    "dps": {
      "1346837400": 1,
      "1346837401": 2,
      "1346837402": 3,
      "1346837403": 4,
      "1346837404": 5,
      "1346837405": 6,
      "1346837406": 7,
      "1346837407": 8,
      "1346837408": 9,
      "1346837409": 10,
      "1346837410": 11,
      "1346837411": 12,
      "1346837412": 13
    }
  }
]

Paramètre : abnormaldetect

Ce paramètre utilise l'algorithme STL (Seasonal-Trend decomposition using Loess) pour détecter les anomalies dans une série temporelle. TSDB analyse les données existantes afin d'identifier les modèles, puis signale les points de données qui s'écartent significativement de la plage attendue.

Format

<AlgorithmName>[-<Sigma>-<NP>-<NS>-<NT>-<NL>]

Seul l'algorithme STL est pris en charge. Si vous ne maîtrisez pas le réglage des paramètres STL, utilisez les valeurs par défaut en omettant les champs de paramètres.

Paramètres

Paramètre Description
AlgorithmName Nom de l'algorithme. Utilisez stl.
Sigma Seuil d'anomalie. Un point de données est signalé comme anormal si la différence absolue entre sa valeur et la moyenne de la série dépasse Sigma × écart type. Valeur typique : 3.0.
NP Nombre de points de données par cycle.
NS Paramètre de lissage saisonnier.
NT Paramètre de lissage de la tendance.
NL Paramètre de lissage du filtre passe-bas.

Exemples

"abnormaldetect": "stl"
"abnormaldetect": "stl-5-5-7-0-0"

Exemple de requête

{
  "start": 1346836400,
  "end": 1346946400,
  "queries": [
    {
      "aggregator": "none",
      "metric": "sys.cpu.nice",
      "abnormaldetect": "stl-5-5-7-0-0",
      "filters": [
        {
          "type": "literal_or",
          "tagk": "dc",
          "filter": "lga",
          "groupBy": false
        },
        {
          "type": "literal_or",
          "tagk": "host",
          "filter": "web00",
          "groupBy": false
        }
      ]
    }
  ]
}

Sortie de la détection d'anomalies

Chaque valeur dans dps est un tableau au format suivant :

[srcValue, upperValue, lowerValue, predictValue, isAbnormal]
Champ Description
srcValue Valeur du point de données d'origine.
upperValue Limite supérieure de la plage attendue.
lowerValue Limite inférieure de la plage attendue.
predictValue Valeur prédite par l'algorithme STL.
isAbnormal 0 — normal. 1 — anormal.

Exemple de sortie

[
  {
    "metric": "sys.cpu.nice",
    "tags": {"dc": "lga", "host": "web00"},
    "aggregateTags": [],
    "dps": {
      "1346837400": [1, 1.0000000000000049, 0.9999999999999973, 1.0000000000000013, 0],
      "1346837401": [2, 2.0000000000000036, 1.9999999999999958, 1.9999999999999998, 0],
      "1346837402": [3, 3.0000000000000036, 2.9999999999999956, 3, 0],
      "1346837403": [4, 4.0000000000000036, 3.9999999999999956, 4, 1],
      "1346837404": [5, 5.0000000000000036, 4.9999999999999964, 5, 0],
      "1346837405": [6, 6.000000000000002, 5.999999999999995, 5.999999999999998, 0],
      "1346837406": [7, 7.0000000000000036, 6.9999999999999964, 7, 1],
      "1346837407": [8, 8.000000000000004, 7.9999999999999964, 8, 0],
      "1346837408": [9, 9.000000000000004, 8.999999999999996, 9, 0],
      "1346837409": [10, 10.000000000000004, 9.999999999999996, 10, 0],
      "1346837410": [11, 11.000000000000005, 10.999999999999998, 11.000000000000002, 0],
      "1346837411": [12, 12.000000000000004, 11.999999999999996, 12, 0]
    }
  }
]