Об этом проекте
fakesnow — это инструмент для запуска, имитации и тестирования фейковых баз данных Snowflake локально. Он предлагает два подхода: патчинг Snowflake Connector for Python внутри процесса или автономный HTTP-сервер, который могут использовать коннекторы на любом языке.
Патчинг внутри процесса (Python): установите через pip, затем запустите скрипт командой `fakesnow script.py` или модуль, например pytest, командой `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()`, который возвращает параметры подключения и останавливает сервер при выходе. Порт и сохранение/изоляция базы данных настраиваются через параметры сессии, такие как `FAKESNOW_DB_PATH` (включая значение `:isolated:`). Принимается любая комбинация имени пользователя, пароля и аккаунта; в README описано подключение из Snowflake CLI (config.toml с `protocol = http`), из Java через snowflake-jdbc (с замечаниями о сохранении `account` в URL и JVM-флагах `--add-opens` для Arrow), а также через Testcontainers.
Фикстуры pytest предоставляются через `pytest_plugins = "fakesnow.fixtures"`, включая фикстуру сессии и фикстуру `fakesnow_server`, которая передаёт параметры подключения.
Покрытие: полностью поддерживаются стандартные SQL-операции и курсоры, запросы к information schema, несколько баз данных, привязка параметров, комментарии к таблицам, интеграция с pandas, включая write_pandas, получение пакетов результатов через get_result_batches, а также HTTP-сервер для коннекторов не на Python. Частично поддерживаются: функции дат, функции регулярных выражений, операции с полуструктурированными данными, теги, управление пользователями, stages и PUT, именованные форматы файлов, а также COPY INTO из источников S3 и stages. Пока не реализованы: контроль доступа и хранимые процедуры. В README отмечены оговорки: порядок строк недетерминирован, если ORDER BY не задан полностью, а поддерживаемый диалект SQL более либерален, чем настоящий Snowflake, поэтому некоторые запросы могут работать локально, но не на реальном инстансе. COPY INTO может использовать стандартную цепочку учётных данных AWS или выражение duckdb CREATE SECRET для альтернативных учётных данных S3.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.