Sobre el proyecto
fakesnow es una herramienta para ejecutar, simular y probar bases de datos Snowflake falsas localmente. Ofrece dos enfoques: parcheo en proceso del conector de Snowflake para Python, o un servidor HTTP independiente utilizable por conectores de cualquier lenguaje.
Parcheo en proceso (Python): instale con pip y luego ejecute un script mediante `fakesnow script.py` o un módulo como pytest mediante `fakesnow -m pytest`. Alternativamente, use `fakesnow.patch()` como administrador de contexto en el código. Las importaciones estándar de `snowflake.connector.connect` y `snowflake.connector.pandas_tools.write_pandas` se parchean automáticamente; los módulos que usan la sintaxis `from ... import` deben nombrarse explícitamente, por ejemplo, `fakesnow.patch("mymodule.write_pandas")`. El parcheo se aplica solo al proceso actual, por lo que los subprocesos y los clientes que no son de Python necesitan el servidor. Las bases de datos están en memoria de forma predeterminada y se pueden persistir pasando un `db_path`.
Modo servidor: ejecute `fakesnow -s` (o mediante uvx/docker, con el contenedor escuchando en el puerto 64616) para iniciar un servidor HTTP. También se puede iniciar dentro de un programa Python con `fakesnow.server()`, que devuelve los kwargs de conexión y detiene el servidor al salir. El puerto y la persistencia/aislamiento de la base de datos son configurables mediante parámetros de sesión como `FAKESNOW_DB_PATH` (incluido el valor `:isolated:`). Se acepta cualquier combinación de nombre de usuario/contraseña/cuenta; el README documenta la conexión desde la CLI de Snowflake (config.toml con `protocol = http`), desde Java mediante snowflake-jdbc (con notas sobre mantener `account` en la URL y los `--add-opens` de la JVM para Arrow), y mediante Testcontainers.
Se proporcionan fixtures de pytest a través de `pytest_plugins = "fakesnow.fixtures"`, incluido un fixture de sesión y un fixture `fakesnow_server` que suministra los kwargs de conexión.
Cobertura: los elementos totalmente compatibles incluyen operaciones SQL estándar y cursores, consultas de information schema, múltiples bases de datos, vinculación de parámetros, comentarios de tablas, integración con pandas incluido write_pandas, recuperación de lotes de resultados mediante get_result_batches y el servidor HTTP para conectores que no son de Python. Parcialmente compatibles: funciones de fecha, funciones de expresiones regulares, operaciones con datos semiestructurados, etiquetas, gestión de usuarios, stages y PUT, formatos de archivo con nombre y COPY INTO desde fuentes S3 y stages. Aún no implementados: control de acceso y procedimientos almacenados. El README señala las advertencias de que el orden de las filas no es determinista a menos que ORDER BY esté completamente especificado, y que el dialecto SQL compatible es más liberal que el Snowflake real, por lo que algunas consultas pueden funcionar localmente pero no contra una instancia real. COPY INTO puede usar la cadena de credenciales estándar de AWS o una declaración duckdb CREATE SECRET para credenciales S3 alternativas.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.