Discourse Data Explorer

:discourse2: Summary Discourse Data Explorer allows you to make SQL queries against your live database, allowing for up-to-the-minute stats reporting.
:open_book: Install Guide This plugin is bundled with Discourse core. There is no need to install the plugin separately.

:information_source: If you’re looking for examples or support for any custom queries, you can find lots of topics in our Data & reporting category under the sql-query tag. If there’s not one to suit your particular needs, please feel free to create a new topic to ask the community for some help. :memo: Query Help

:discourse2: Hosted by us? This plugin is available on our Business and Enterprise plans. Data Explorer | Discourse - Civilized Discussion

After installing the plugin, head to /admin/plugins .

de1

Click on the “Settings” button, and turn on data explorer enabled, then return and reload the page.
There should now be a tab in the stacked nav called “ Data Explorer ”. Select it or head to /admin/plugins/explorer , then use the + , Import or Run buttons to get started.

Default queries

On a fresh install, the data explorer now ships with several queries that can help you draw insights from your forum’s activity. Open any query and click Run to try it out.

Here's what the stock queries look like.

Note: Default queries are picked up from this file: discourse-data-explorer/lib/discourse_data_explorer/queries.rb at main · discourse/discourse-data-explorer · GitHub

If you have an awesome query that you want everyone to have, make a PR just like this one.

Default queries cannot be edited, feel free to copy the sql and paste it into a new query if you’d like to modify them.

Writing queries

When you click any of the Edit buttons on a query view, or start a new Explorer Query, you are presented with a screen like the one below:

The top two boxes are the name and description of the query. The name is what you’re selecting in the dropdown box, and the description should be used for things like explaining what to put in the query parameters or to describe what data is being queried.

The left pane is where you write the SQL query. Minor syntax highlighting and checking is provided.

Automatically running queries

While you can always run a query by clicking the Run button, you can save time when loading a query by adding the run parameter to the URL.

For example: /admin/plugins/explorer/queries/123?run

When this parameter is added to the URL, the query will run as soon as you load the page, so you don’t need to click the Run button to see the results. This is especially helpful for queries you run frequently, allowing you to bookmark them or add them to your sidebar with the run parameter included for a one-click report.

Importing queries

For an example, let’s import one that I wrote. Download this file, then open the import dialog and select the file to be uploaded or paste the query in the text box. Click Import to save it and then click Run to see the results.

most-common-likers.dcquery (1).json (442 Bytes)

Looks like all of the Discourse developers like each other quite a bit :heart:

Searching for queries

If you’ve accumulated too many awesome queries, no problem! The search bar can help you filter through titles and descriptions.

Allow non-staff groups to run queries

You can add specific groups (including moderators) to a query to grant them access to it:

After saving, you can find it from the Groups page for that particular group on the Reports tab:

Click any query to open it and then the Run button to see the results. You can also bookmark group reports by clicking the Bookmark button.

Sharing queries with predefined parameters

If you have included user-defined parameters in your query, you can share a link to the query and include the parameters in the URL so they will be pre-filled when the page loads.

You must include parameters in the URL in this format params={"parameter_name":"value"}. Separate multiple parameters with commas. For example:

discourse.example.com/g/my-group/reports/6?params={"param1":"value1","param2":"value2"}

Couple with the run parameter mentioned above, you can share a report with predefined parameters that runs automatically when loaded.

Result limits and exporting queries

With large queries, you may notice that there is a limit on the number of rows that the Data Explorer will display. By default, the limit is set to 1000 rows. This is to prevent excessively large queries from slowing down or disrupting the performance of your Discourse instance.

If you want to bypass this limit, you have a few of options:

  1. Pagination: You can paginate your results. Instead of trying to return all results at once, you can write your query to return a specific range of results. You can then adjust this range to view different sections of your data. This won’t increase the limit, but it will allow you to view all your data in sections.
  2. Increase the limit: If you have access to the Discourse server and are comfortable making changes to Discourse settings, you can increase the limit. However, this should be done with caution. Increasing the limit can put a lot of load on your server if you’re not careful, especially if multiple users are running large queries at the same time.
  3. Download the Results: You also have the option to download the query results instead of viewing them directly in Discourse by clicking either the JSON or CSV button after running the query. Data downloaded from a query in JSON or CSV format will have a much higher results limit of 10,000 rows. For programmatic purposes, you want want to opt for the Json format, or if you’d like to work on the data in a spreadsheet application, the CSV format might be more convenient.

It’s generally a good idea to try and write more efficient queries, or to filter your data so that you’re only retrieving what you need, rather than trying to bypass the limit.

You can also export the SQL query itself in .JSON format by clicking the Export button. Queries that are exported using this method can then be imported into other Discourse sites, or used with third party applications.

Query plan

The “Include query plan” checkbox can be used for better understanding and optimizing your SQL queries.

When you check this box and run a query, Discourse will display the sequence of operations used to access data in the Discourse database. This can include operations like scans, joins, sorts, and other database actions. By examining the query plan, you can see exactly how the database is executing your query.

The Data Explorer tutorial series

We also have a dedicated sql-tutorial series about the Data Explorer! If you’re interested in learning more about writing SQL queries in Discourse, we highly recommend reading through the topics in this series:

Last edited by @hugh 2025-09-03T00:45:12Z

Last checked by @hugh 2025-09-03T00:45:21Z

Check documentPerform check on document:
119 « J'aime »

Bonjour ! :slight_smile:

J’ai donc demandé dans ce fil de discussion comment copier les liens de tous les sujets d’une requête de recherche. On m’a dirigé ici. J’ai donc demandé au responsable de notre forum si nous avions ce plugin installé, ce qui est le cas. Cependant, nous ne savons pas comment l’utiliser pour copier tous les liens d’une requête de recherche dans un fichier CSV à l’aide de ce plugin. Quelqu’un a-t-il déjà effectué cette action et pourrait nous indiquer la bonne direction ? :sweat_smile:

Notez que je suis un utilisateur régulier du forum, je n’ai pas de pouvoirs de staff. Cependant, je transmets cette information au responsable du site qui en a, et qui peut le faire pour moi. :slight_smile:

Merci d’avance !

Bonjour Preston !

Le plugin Data Explorer vous permet de créer des requêtes SQL.

Vous voulez en créer une nouvelle qui liste les sujets que vous recherchez.

Ensuite, lorsque vous exécutez la requête, vous verrez un bouton CSV pour exporter le résultat dans un fichier CSV.

J’espère que cela vous aidera !

Faites-nous savoir si vous avez besoin d’aide supplémentaire pour créer la requête !

3 « J'aime »

Merci ! Je vais transmettre : câlins :

3 messages ont été déplacées vers un nouveau sujet : Contourner la limite de 10 000 résultats de l’explorateur de données ?

Salut, j’ai une demande de fonctionnalité pour cet excellent plugin.

Certains des rapports que je crée à l’aide de l’Explorateur de données seraient très utiles à mon équipe si je pouvais les lister sur la page Rapports du tableau de bord (/admin/reports).

Serait-il possible d’ajouter une option à chaque requête de l’Explorateur de données pour qu’elle soit listée sur la page Rapports ? Merci.

Par exemple :

  • Lister cette requête personnalisée sur la page Rapports
3 « J'aime »

Merci pour cette fonctionnalité !

J’explore comment nous pourrions écrire des métriques personnalisées. Nous utilisons Discourse en parallèle avec Workadvent.re (un outil de collaboration A/V 2D basé sur des avatars).
J’exécute un script personnalisé pour enregistrer les activités dans une feuille Google via un webhook. Pour avoir toutes les choses centralisées dans notre outil principal (Discourse), ce serait formidable d’avoir ces données imprimées dans Discourse…
Des astuces ?!

1 « J'aime »

J’espérais vraiment qu’il existe un générateur de requêtes qui aiderait à écrire du SQL. Mon SQL est vieux et rouillé, et le taper à la main est source d’erreurs et prend du temps. Ce serait bien s’il y avait un moyen plus simple !

2 « J'aime »

Salut @davidgs, bienvenue sur Meta :wave: :slight_smile:

Avez-vous essayé d’utiliser un LLM comme ChatGPT ? Il a une compréhension raisonnable de Discourse et a été assez fiable lorsque j’avais également besoin de créer des requêtes d’exploration de données.

J’écris souvent mes invites comme “Écrire une requête d’exploration de données Discourse qui renvoie x,y,z à partir de a,b,c où…” et j’obtiens quelque chose d’assez raisonnable.

Dans le coin supérieur droit de cette page, vous pourriez également voir une petite icône de robot comme ci-dessous.
image

Si c’est le cas, vous pourriez également essayer le Bot d’aide IA qui est intégré à Meta.

2 « J'aime »

La plupart d’entre nous ne le voient pas. Mais il y a toujours ask.discourse.com

2 « J'aime »

Ouais, je ne me souvenais pas si c’était toujours juste une chose de niveau de confiance 3 ou pas. Bonne idée pour le site ask.discourse.com.

À titre d’exemple, j’ai tapé écrire une requête d'explorateur de données discourse qui renvoie une liste de tous les utilisateurs qui ont dit le mot « logiciel » dans la barre de saisie de ask.discourse.com et j’ai obtenu la requête suivante :

SELECT 
    p.user_id, 
    u.username,
    COUNT(p.id) AS post_count
FROM 
    posts p
JOIN 
    users u ON u.id = p.user_id
WHERE 
    p.raw ILIKE '%software%'
GROUP BY 
    p.user_id, u.username
ORDER BY 
    post_count DESC;

Assez raisonnable. Je peux aussi garantir qu’il effectue des requêtes beaucoup plus complexes que celle-ci.

2 « J'aime »

L’exportation des données de l’explorateur de données ne fonctionne plus avec les dernières mises à jour de Discourse et de l’explorateur de données que j’ai installées il y a environ deux heures. Les données elles-mêmes sont créées correctement mais ne peuvent plus être exportées.

Cliquer sur les boutons JSON ou CSV provoque juste un bref flash et rien d’autre ne se passe. Cela fonctionnait bien il y a environ deux semaines.

Dans la console du navigateur, je vois l’erreur suivante :
CSV :

Uncaught TypeError: this.args.query is undefined
    _downloadResult query-result.js:310
    downloadResultCsv query-result.js:287
    _triggerAction d-button.gjs:160
    Ember 12
    _triggerAction d-button.gjs:157
    click d-button.gjs:106

JSON :

Uncaught TypeError: this.args.query is undefined
    _downloadResult query-result.js:310
    downloadResultJson query-result.js:283
    _triggerAction d-button.gjs:160
    Ember 12
    _triggerAction d-button.gjs:157
    click d-button.gjs:106
1 « J'aime »

Merci pour le rapport de bug, @GuidoD !

J’ai fusionné un correctif pour ce problème plus tôt aujourd’hui, veuillez essayer de mettre à jour et confirmer que cela fonctionne pour vous. :slight_smile:

2 « J'aime »

merci pour la correction rapide.
Je peux confirmer que cela fonctionne à nouveau correctement.

1 « J'aime »

pour une petite quantité de données, l’exportation en JSON et CSV fonctionne correctement. Mais pour une plus grande quantité de données, l’exportation CSV fonctionne bien, mais l’exportation JSON renvoie une erreur 502 bad gateway sur nginx (probablement en raison d’un délai d’attente après 30 secondes, car la création du fichier JSON prend plus de 30 secondes).
Existe-t-il un moyen simple d’augmenter la valeur du délai d’attente de nginx ?

Si je réduis la période de la requête, le fichier CSV fait 12,9 Mo et le fichier JSON fait 645 Mo. Le fichier CSV total fait 13,5 Mo, donc seulement un peu plus gros, mais le fichier JSON n’est pas créé en raison de l’erreur nginx.

Ou peut-être que la création du fichier JSON échoue en raison de données étranges. La création du fichier JSON crée-t-elle un fichier journal ?

Les requêtes JSON s’exécutent avec une limite externe plus élevée par défaut par rapport aux requêtes CSV. Ajoutez une pagination personnalisée dans la requête pour vous assurer qu’elle se termine à temps.

1 « J'aime »

Est-il possible d’exécuter des instructions UPDATE à partir de l’Explorateur de données ?

J’essaie de faire une mise à jour massive d’une certaine table, mais j’obtiens cette erreur :

PG::FeatureNotSupported: ERROR:  WITH query "query" does not have a RETURNING clause
LINE 29:   ) SELECT * FROM query

Non, Data Explorer n’exécute que des transactions en lecture seule. (Si vous aviez mis à jour votre requête pour inclure une clause RETURNING, vous obtiendriez une erreur de transaction en lecture seule.)

Si vous auto-hébergez, utilisez l’un des guides « launcher enter », comme

Si vous avez déjà conçu votre mise à jour, vous pouvez utiliser psql discourse au lieu de rails c.

Si vous êtes sur un service hébergé, contactez le support pour qu’il exécute la modification.

1 « J'aime »

Merci pour la réponse. Cela a du sens. Nous utilisons un service hébergé, je vais donc contacter leur support.

Si je partage une requête SQL avec le groupe des modérateurs, comment les utilisateurs du groupe des modérateurs peuvent-ils exécuter la requête depuis leur compte ? Ils ne peuvent pas voir le plugin Data Explorer.