[PYTHON] Problèmes lors de l'utilisation d'Elasticsearch comme source de données dans Redash

Il semble qu'Elasticsearch puisse être utilisé comme source de données pour Redash, donc quand je l'ai essayé, j'ai trouvé qu'il y avait divers problèmes.

environnement

Redash(v7.0.0) Elasticsearch(v7.3.2)

problème

** Les résultats des requêtes d'Elasticsearch ne peuvent pas être correctement tabulaires (attendus). ** **

Lorsque la requête est exécutée à partir de Redash, la requête est émise et le résultat est affiché via QueryRunner comme indiqué ci-dessous.

Exécuter la requête depuis l'écran → QueryRunner → Elasticsearch → QueryRunner → Afficher le résultat sous forme de tableau à l'écran

** J'ai pu confirmer que les résultats de la requête d'Elasticsearch étaient comme prévu, j'ai donc trouvé que le problème cette fois était que les résultats de la requête d'Elasticsearch ne pouvaient pas être analysés de manière tabulaire avec QueryRunner. ** **

Résultats de l'exécution de plusieurs requêtes d'agrégation

Exécutez une requête avec une agrégation imbriquée comme indiqué ci-dessous.

{
    "index": "Nom de l'index",
    "size": 1000,
    "aggs": {
        "1st": {
            "terms": {
                "field": "LogDate"
            },
            "aggs": {
                "2nd": {
                    "terms": {
                        "field": "SectionName"
                    }
                }
            }
        }
    }
}

En tant qu'image, nous allons regrouper par date et par département, alors attendez-vous aux résultats suivants.

LogDate SectionName nombre
29 octobre 2019 Département système 10
29 octobre 2019 Département des Ressources Humaines 20
29 octobre 2019 Département des affaires générales 30
30 octobre 2019 Département système 100
30 octobre 2019 Département des Ressources Humaines 200
30 octobre 2019 Département des affaires générales 300

Cependant, ce qui s'affiche à la suite de Table dans Redash est le suivant. → Je ne sais pas quel est le total et combien.

2nd doc_count
(Une valeur de SectionName) 110
(Une valeur de SectionName) 220
(Une valeur de SectionName) 330

Cas où la structure de JSON devient compliquée

Par exemple, lorsque Sum Bucket Aggregation est utilisé, le résultat de la requête d'Elasticsearch montre qu'un autre compartiment existe dans la même hiérarchie que la racine du compartiment, comme illustré ci-dessous.

{
・
・
・
   "aggregations": {
      "Nom du godet": {
         "buckets": [
            {
Résultat du godet
            }
         ]
      },
      "Nom du SUM BUCKET": {
          "value": 1000.0
      }
   }
}

Les résultats sont affichés sous forme de tableau uniquement pour le "nom du compartiment"

Comment répondre

Pour résoudre ces problèmes -Modifiez la source existante de Redash ou ajoutez un programme d'extension pour prendre en charge le programme. Pour le support du programme d'extension, veuillez vous référer à "Extending Redash's Query Runner". ・ Créez un PROBLÈME et attendez la mise à jour (ou déplacez-vous par vous-même)

Résumé

Peut-être que lorsque Elasticsearch est utilisé comme source de données, Kibana est souvent sélectionné, ou il est rarement utilisé en raison du comportement du problème qui s'est produit (qui sera certainement le modèle de requête).

"Si votre source de données est Elasticsearch, n'utilisez pas Redash." "Si vous utilisez Redash, ne créez pas la source de données Elasticsearch, si vous le faites, juste une simple requête."

J'ai senti qu'il serait plus efficace de le réaliser de cette manière.

De côté

Je me suis demandé si le résultat changerait si Kibana était utilisé comme source de données, mais le résultat était le même car il n'était traité que par la description de la requête pour Kibana.

La source de données n'était pas Kibana et la requête était uniquement pour Kibana.

Exécuter la requête depuis l'écran → QueryRunner → Kibana (Elasticsearch) → QueryRunner → Afficher le résultat sous forme de tableau sur l'écran

Recommended Posts

Problèmes lors de l'utilisation d'Elasticsearch comme source de données dans Redash
Conseils pour utiliser Elastic Search de manière efficace
Créer un bot de collecte de données en Python à l'aide de Selenium
Une note lors de la création d'un graphe dirigé à l'aide de Graphviz en Python
Obtenez les données de comptage OTU (microorganismes) sous forme de fichier texte à l'aide de QIIME2
Scribble ce que j'ai utilisé lors de l'utilisation d'ipython dans le formatage des données de position
J'obtiens un attribut impossible à définir lors de l'utilisation de @property en python
Comment mettre à jour une source de données de classeur packagée Tableau à l'aide de Python
Essayez d'utiliser Elasticsearch comme base de votre système de questions et réponses
Un mémorandum lors de l'utilisation d'une belle soupe
Précautions lors de l'utilisation de Pit avec Python
Lors de l'utilisation d'expressions régulières en Python
Lors de l'écriture d'un programme en Python
Vérifier les points lorsque MIDI ne fonctionne pas dans un programme utilisant SDL_mixer
Une note utile lors de l'utilisation de Python après une longue période
Connaissance lors de la création d'un bot en utilisant discord.py
Précautions lors du décapage d'une fonction en python
Précautions lors de l'utilisation de l'instruction for dans les pandas
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
Scraping de sites Web à l'aide de JavaScript en Python
Dessinez une structure arborescente en Python 3 à l'aide de graphviz
SELECT des données à l'aide de la bibliothèque cliente avec BigQuery
Un mémorandum de problème lors du formatage des données
Exécuter du SQL brut avec redash à l'aide de la source de données Python et afficher le résultat
Enregistrez les conditions de paramétrage sous forme de fichier CSV à l'aide de UDF Manager avec OCTA