2017-04-14 1 views
0

J'ai configuré un cluster Druid pour importer des données en temps réel à partir de Kafka.Druide - Données de commande par colonne d'horodatage

Question

  1. Est-ce que la récupération des données Druid support qui est triée par timestamp? Par exemple, disons que j'ai besoin de récupérer les 10 dernières entrées d'un Datasource X. Puis-je le faire en utilisant un LimitSpec (dans le Query JSON) qui inclut le champ d'horodatage? Ou y a-t-il une autre meilleure option supportée Druid?

Merci d'avance.

Répondre

0

à obtenir des lignes non agrégées

Pour obtenir des lignes non agrégées, vous pouvez faire une requête avec "queryType: "select".

Les requêtes de sélection sont également utiles lorsque la pagination est nécessaire. Elles permettent de définir une taille de page et de renvoyer automatiquement un identificateur de pagination pour une utilisation ultérieure.

Dans cet exemple, si nous voulons simplement les 10 premières lignes, nous pouvons passer en "pagingSpec": { "pageIdentifiers": {}, "threshold": 10 }.

Trier par horodatage

Pour commander ces lignes par « horodatage », vous pouvez passer "descending": "true". Apparemment, la plupart des types de requête Druid prennent en charge la propriété descending.

Exemple de requête:

{ 
    "queryType": "select", 
    "dataSource": "my_data_source", 
    "granularity": "all", 
    "intervals": [ "2017-01-01T00:00:00.000Z/2017-12-30T00:00:00.000Z" ], 
    "descending": "true", 
    "pagingSpec": { "pageIdentifiers": {}, "threshold": 10 } 
} 

Docs on "select" type queries

0

Vous pouvez utiliser un groupe par requête pour cela, donc group by __time en tant que extraction function puis définissez la granularité à tous et utilisez limitSpec pour trier/limiter cela fonctionnera. Maintenant, si vous voulez utiliser une requête de timeséries, il est plus difficile d'obtenir la dernière version 10. Une façon de le faire est de définir la granularité à celle souhaitée, soit Hour, puis de définir l'intervalle à 10H à partir du point le plus récent temps. Cela semble plus facile à dire qu'à atteindre. Je vais aller à la première étape, sauf si vous avez un problème de performance majeur.

{ 
    "queryType": "groupBy", 
    "dataSource": "wikiticker", 
    "granularity": "all", 
    "dimensions": [ 
    { 
     "type": "extraction", 
     "dimension": "__time", 
     "outputName": "extract_time", 
     "extractionFn": { 
     "type": "timeFormat" 
     } 
    }, 
    ], 
    "limitSpec": { 
    "type": "default", 
    "limit": 10, 
    "columns": [ 
     { 
     "dimension": "extract_time", 
     "direction": "descending" 
     } 
    ] 
    }, 
    "aggregations": [ 
    { 
     "type": "count", 
     "name": "$f2" 
    }, 
    { 
     "type": "longMax", 
     "name": "$f3", 
     "fieldName": "added" 
    } 
    ], 
    "intervals": [ 
    "1900-01-01T00:00:00.000/3000-01-01T00:00:00.000" 
    ] 
} 
+0

Slim peut vous écrire une requête par exemple? –