ClickHouse/docs/ja/chdb/guides/query-remote-clickhouse.md
2024-11-18 11:58:58 +09:00

187 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: リモートClickHouseサーバーへのクエリ方法
sidebar_label: リモートClickHouseへのクエリ
slug: /ja/chdb/guides/query-remote-clickhouse
description: このガイドでは、chDBからリモートClickHouseサーバーにクエリを実行する方法を学習します。
keywords: [chdb, clickhouse]
---
このガイドでは、chDBからリモートClickHouseサーバーにクエリを実行する方法を学習します。
## セットアップ
まず仮想環境を作成しましょう:
```bash
python -m venv .venv
source .venv/bin/activate
```
次にchDBをインストールします。
バージョン2.0.2以上であることを確認してください:
```bash
pip install "chdb>=2.0.2"
```
次にpandasとipythonをインストールします
```bash
pip install pandas ipython
```
このガイドの残りの部分でコマンドを実行するために`ipython`を使用します。以下のコマンドで起動できます:
```bash
ipython
```
また、このコードをPythonスクリプトやお好みのートブックで使用することもできます。
## ClickPyの紹介
これからクエリを実行するリモートClickHouseサーバーは[ClickPy](https://clickpy.clickhouse.com)です。
ClickPyはPyPiパッケージのダウンロード数を追跡し、UIを通じてパッケージの統計情報を探ることができます。基礎となるデータベースは`play`ユーザーを使用してクエリを実行できます。
ClickPyの詳細は[そのGitHubリポジトリ](https://github.com/ClickHouse/clickpy)で確認できます。
## ClickPy ClickHouseサービスへのクエリ
chDBをインポートしましょう
```python
import chdb
```
`remoteSecure`関数を使用してClickPyにクエリを実行します。この関数には少なくともホスト名、テーブル名、ユーザー名が必要です。
[`openai`パッケージ](https://clickpy.clickhouse.com/dashboard/openai)の1日ごとのダウンロード数をPandas DataFrameとして取得するためのクエリは以下の通りです
```python
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
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
```
次に[`scikit-learn`](https://clickpy.clickhouse.com/dashboard/scikit-learn)のダウンロード数を取得するために同じことを行ってみましょう:
```python
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
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
```
## Pandas DataFrameのマージ
現在、2つのDataFrameを持っています。これを日付`x`カラム)を基にしてマージすることができます:
```python
df = openai_df.merge(
sklearn_df,
on="x",
suffixes=("_openai", "_sklearn")
)
df.head(n=5)
```
```text
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
```
次に、このようにしてOpenAIのダウンロード数とscikit-learnのダウンロード数の比率を計算することができます
```python
df['ratio'] = df['y_openai'] / df['y_sklearn']
df.head(n=5)
```
```text
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
```
## Pandas DataFrameのクエリ
次に、最も良い比率と最悪の比率の日付を探したいとします。
chDBに戻ってこれらの値を計算します
```python
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
bestRatio bestDate worstRatio worstDate
0 0.693855 2024-09-19 0.000003 2020-02-09
```
Pandas DataFrameへのクエリについてさらに学びたい場合は、[Pandas DataFrames 開発者ガイド](querying-pandas.md)をご覧ください。