> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-detect-table-modification.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Comment interroger un serveur ClickHouse distant

> Dans ce guide, nous allons voir comment interroger un serveur ClickHouse distant depuis chDB.

Dans ce guide, nous allons voir comment interroger un serveur ClickHouse distant depuis chDB.

<div id="setup">
  ## Préparation
</div>

Commençons par créer un environnement virtuel :

```bash theme={null}
python -m venv .venv
source .venv/bin/activate
```

Et maintenant, nous allons installer chDB.
Assurez-vous d’utiliser la version 2.0.2 ou une version ultérieure :

```bash theme={null}
pip install "chdb>=2.0.2"
```

Maintenant, nous allons installer pandas et ipython :

```bash theme={null}
pip install pandas ipython
```

Nous allons utiliser `ipython` pour exécuter les commandes dans la suite de ce guide ; vous pouvez le lancer en exécutant :

```bash theme={null}
ipython
```

Vous pouvez également utiliser ce code dans un script Python ou dans votre notebook préféré.

<div id="an-intro-to-clickpy">
  ## Une introduction à ClickPy
</div>

Le serveur ClickHouse distant que nous allons interroger est [ClickPy](https://clickpy.clickhouse.com).
ClickPy suit tous les téléchargements des paquets PyPI et vous permet d’explorer les statistiques des paquets via une interface utilisateur.
La base de données sous-jacente peut être interrogée à l’aide de l’utilisateur `play`.

Vous pouvez en apprendre davantage sur ClickPy dans [son dépôt GitHub](https://github.com/ClickHouse/clickpy).

<div id="querying-the-clickpy-clickhouse-service">
  ## Interroger le service ClickHouse de ClickPy
</div>

Importons chDB :

```python theme={null}
import chdb
```

Nous allons interroger ClickPy à l’aide de la fonction `remoteSecure`.
Cette fonction requiert au minimum un nom d’hôte, un nom de table et un nom d’utilisateur.

Nous pouvons écrire la requête suivante pour renvoyer le nombre de téléchargements quotidiens du paquet [`openai`](https://clickpy.clickhouse.com/dashboard/openai) sous forme de Pandas DataFrame :

```python theme={null}
query = """
SELECT
    toStartOfDay(date)::Date32 AS x,
    sum(count) AS y
FROM remoteSecure(
  'clickpy-clickhouse.clickhouse.com', 
  'pypi.pypi_downloads_per_day', 
  'play'
)
WHERE project = 'openai'
GROUP BY x
ORDER BY x ASC
"""

openai_df = chdb.query(query, "DataFrame")
openai_df.sort_values(by=["x"], ascending=False).head(n=10)
```

```text theme={null}
               x        y
2392  2024-10-02  1793502
2391  2024-10-01  1924901
2390  2024-09-30  1749045
2389  2024-09-29  1177131
2388  2024-09-28  1157323
2387  2024-09-27  1688094
2386  2024-09-26  1862712
2385  2024-09-25  2032923
2384  2024-09-24  1901965
2383  2024-09-23  1777554
```

Faisons de même pour obtenir les téléchargements de [`scikit-learn`](https://clickpy.clickhouse.com/dashboard/scikit-learn) :

```python theme={null}
query = """
SELECT
    toStartOfDay(date)::Date32 AS x,
    sum(count) AS y
FROM remoteSecure(
  'clickpy-clickhouse.clickhouse.com', 
  'pypi.pypi_downloads_per_day', 
  'play'
)
WHERE project = 'scikit-learn'
GROUP BY x
ORDER BY x ASC
"""

sklearn_df = chdb.query(query, "DataFrame")
sklearn_df.sort_values(by=["x"], ascending=False).head(n=10)
```

```text theme={null}
               x        y
2392  2024-10-02  1793502
2391  2024-10-01  1924901
2390  2024-09-30  1749045
2389  2024-09-29  1177131
2388  2024-09-28  1157323
2387  2024-09-27  1688094
2386  2024-09-26  1862712
2385  2024-09-25  2032923
2384  2024-09-24  1901965
2383  2024-09-23  1777554
```

<div id="merging-pandas-dataframes">
  ## Fusion de DataFrames Pandas
</div>

Nous avons maintenant deux DataFrames, que nous pouvons fusionner sur la date (qui correspond à la colonne `x`) comme ceci :

```python theme={null}
df = openai_df.merge(
  sklearn_df, 
  on="x", 
  suffixes=("_openai", "_sklearn")
)
df.head(n=5)
```

```text theme={null}
            x  y_openai  y_sklearn
0  2018-02-26        83      33971
1  2018-02-27        31      25211
2  2018-02-28         8      26023
3  2018-03-01         8      20912
4  2018-03-02         5      23842
```

Nous pouvons ensuite calculer le rapport entre les téléchargements d’Open AI et ceux de `scikit-learn`, comme ceci :

```python theme={null}
df['ratio'] = df['y_openai'] / df['y_sklearn']
df.head(n=5)
```

```text theme={null}
            x  y_openai  y_sklearn     ratio
0  2018-02-26        83      33971  0.002443
1  2018-02-27        31      25211  0.001230
2  2018-02-28         8      26023  0.000307
3  2018-03-01         8      20912  0.000383
4  2018-03-02         5      23842  0.000210
```

<div id="querying-pandas-dataframes">
  ## Interroger des DataFrames Pandas
</div>

Ensuite, supposons que nous voulions trouver les dates présentant les meilleurs et les pires ratios.
Nous pouvons revenir à chDB et calculer ces valeurs :

```python theme={null}
chdb.query("""
SELECT max(ratio) AS bestRatio,
       argMax(x, ratio) AS bestDate,
       min(ratio) AS worstRatio,
       argMin(x, ratio) AS worstDate
FROM Python(df)
""", "DataFrame")
```

```text theme={null}
   bestRatio    bestDate  worstRatio   worstDate
0   0.693855  2024-09-19    0.000003  2020-02-09
```

Si vous souhaitez en savoir plus sur l’interrogation de Pandas DataFrames, consultez le [guide du développeur sur l’interrogation de Pandas DataFrames](/fr/products/chdb/guides/querying-pandas).
