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

5.2 KiB
Raw Blame History

title sidebar_label slug description keywords
リモートClickHouseサーバーへのクエリ方法 リモートClickHouseへのクエリ /ja/chdb/guides/query-remote-clickhouse このガイドでは、chDBからリモート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 開発者ガイドをご覧ください。