このプロジェクトについて

fakesnowは、偽のSnowflakeデータベースをローカルで実行、モック、テストするためのツールです。2つのアプローチを提供します。Python用Snowflake Connectorのプロセス内パッチ、または任意の言語のコネクタから利用できるスタンドアロンHTTPサーバーです。 プロセス内パッチ(Python):pipでインストールし、`fakesnow script.py`でスクリプトを、または`fakesnow -m pytest`のようにモジュールを実行します。あるいはコード内で`fakesnow.patch()`をコンテキストマネージャとして使用します。`snowflake.connector.connect`および`snowflake.connector.pandas_tools.write_pandas`の標準的なインポートは自動的にパッチされます。`from ... import`構文を使用するモジュールは明示的に指定する必要があり、例えば`fakesnow.patch("mymodule.write_pandas")`のようにします。パッチは現在のプロセスにのみ適用されるため、サブプロセスや非Pythonクライアントにはサーバーが必要です。データベースはデフォルトでインメモリであり、`db_path`を渡すことで永続化できます。 サーバーモード:`fakesnow -s`を実行する(またはuvx/docker経由で、コンテナはポート64616で待ち受ける)とHTTPサーバーが起動します。Pythonプログラム内で`fakesnow.server()`を使用して起動することもでき、接続用のkwargsを生成し、終了時にサーバーを停止します。ポートおよびデータベースの永続化/分離は、`FAKESNOW_DB_PATH`(`:isolated:`値を含む)などのセッションパラメータで設定できます。任意のユーザー名/パスワード/アカウントの組み合わせが受け入れられます。READMEには、Snowflake CLIからの接続(`protocol = http`を指定したconfig.toml)、snowflake-jdbcを介したJavaからの接続(URLに`account`を保持することやArrow用のJVM `--add-opens`に関する注意を含む)、およびTestcontainers経由での接続が記載されています。 pytestフィクスチャは`pytest_plugins = "fakesnow.fixtures"`を通じて提供され、セッションフィクスチャと接続用kwargsを提供する`fakesnow_server`フィクスチャが含まれます。 カバレッジ:完全にサポートされている項目には、標準的なSQL操作とカーソル、information schemaクエリ、複数のデータベース、パラメータバインディング、テーブルコメント、write_pandasを含むpandas統合、get_result_batchesによる結果バッチ取得、非Pythonコネクタ向けのHTTPサーバーが含まれます。部分的にサポート:日付関数、正規表現関数、半構造化データ操作、タグ、ユーザー管理、ステージとPUT、名前付きファイルフォーマット、S3ソースおよびステージからのCOPY INTO。未実装:アクセス制御とストアドプロシージャ。READMEには、ORDER BYが完全に指定されていない限り行の順序は非決定的であること、およびサポートされるSQL方言が実際のSnowflakeよりも寛容であるため、一部のクエリはローカルでは動作するが実際のインスタンスでは動作しない可能性があるという注意事項が記載されています。COPY INTOは、標準のAWS認証情報チェーンまたは代替のS3認証情報用のduckdb CREATE SECRETステートメントを使用できます。