chDB のインストール
必要条件
macOS および Linux (x86_64 および ARM64) 上の Python 3.8+
インストール
使用法
CLI の例:
Python ファイルの例:
クエリは、任意の サポートされているフォーマットや Dataframe
、Debug
を使用してデータを返すことができます。
GitHub リポジトリ
プロジェクトの GitHub リポジトリは chdb-io/chdb で見つけることができます。
データ入力
ディスク上およびメモリ内のデータ形式にアクセスするための以下のメソッドが利用可能です。
ファイルクエリ (Parquet, CSV, JSON, Arrow, ORC と 60+ 形式)
SQL を実行し、希望の形式のデータを返すことができます。
Parquet または CSV で操作する
Pandas DataFrame 出力
テーブルクエリ (Pandas DataFrame, Parquet ファイル/バイト, Arrow バイト)
Pandas DataFrame でのクエリ
ステートフルセッションを使用したクエリ
セッションは、クエリの状態を保持します。すべての DDL および DML 状態はディレクトリに保持されます。ディレクトリパスは引数として渡すことができます。渡されない場合、一時ディレクトリが作成されます。
パスが指定されていない場合、セッションオブジェクトが削除されると一時ディレクトリも削除されます。さもなければ、パスが保持されます。
デフォルトのデータベースは _local
で、デフォルトのエンジンは Memory
であるため、すべてのデータがメモリに保存されます。ディスクにデータを保存したい場合は、別のデータベースを作成する必要があります。
こちらも参照: test_stateful.py.
Python DB-API 2.0 を使用したクエリ
UDF (ユーザー定義関数) を使用したクエリ
chDB Python UDF (ユーザー定義関数) デコレーターについてのいくつかの注意点。
- 関数はステートレスである必要があります。UDF のみがサポートされており、UDAF (ユーザー定義集計関数) はサポートされていません。
- デフォルトの戻り値の型は String です。戻り値の型を変更したい場合は、引数として戻り値の型を渡すことができます。戻り値の型は 以下のいずれか にする必要があります。
- 関数は String 型の引数を取る必要があります。入力が TabSeparated であるため、全ての引数は文字列となります。
- 関数は入力の各行に対して呼び出されます。例:
- 関数は純粋な Python 関数である必要があります。関数内で使用されるすべての Python モジュールをインポートする必要があります。
- 使用される Python インタープリターは、スクリプトを実行するのに使用されるものと同じです。
sys.executable
から取得できます。
こちらも参照: test_udf.py.
Python テーブルエンジン
Pandas DataFrame でのクエリ
Arrow テーブルでのクエリ
chdb.PyReader クラスインスタンスでのクエリ
- chdb.PyReader クラスを継承し、
read
メソッドを実装する必要があります。 read
メソッドは次のようにするべきです:- 列の最初の次元、行の二次元のリストを返すこと。列の順序は最初の引数
col_names
と同じである必要があります。 - 読み取るデータがもうない場合は空のリストを返すこと。
- ステートフルであり、カーソルは
read
メソッド内で更新される必要があります。
- 列の最初の次元、行の二次元のリストを返すこと。列の順序は最初の引数
- オプションで
get_schema
メソッドを実装して、テーブルのスキーマを返すことができます。プロトタイプはdef get_schema(self) -> List[Tuple[str, str]]:
であり、戻り値は各タプルが列名と列型を含むタプルのリストです。列型は 以下のいずれか である必要があります。
こちらも参照: test_query_py.py.
制限事項
- サポートされているカラム型:
pandas.Series
,pyarrow.array
,chdb.PyReader
- サポートされているデータ型: Int, UInt, Float, String, Date, DateTime, Decimal
- Python オブジェクト型は String に変換されます
- Pandas DataFrame のパフォーマンスは最高で、Arrow テーブルは PyReader よりも優れています