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