metabase-export
Herramienta de línea de comandos que lee las preguntas nativas (SQL) de Metabase desde su base de datos de aplicación y las escribe en disco como un árbol de archivos .sql que replica las colecciones. Así el SQL de tus reportes vive en git en vez de solo dentro de Metabase.
Uso
uvx metabase-export --output reports
Cada corrida reescribe el directorio de salida. Es un espejo, no una fusión: una tarjeta borrada o archivada en Metabase desaparece del disco. Los directorios cuyo nombre empieza por _ nunca se tocan.
Necesita acceso de lectura a la base de datos de aplicación de Metabase (metabaseappdb), no a las bases contra las que reporta. La contraseña sale de METABASE_PG_PASSWORD o de un prompt, nunca de un flag.
uvx metabase-export --output reports --root-collection 4 # una colección
uvx metabase-export --output reports --dry-run # no cambia nada
uvx metabase-export --output reports --port 15433 --ssh-host prod-box
El id de la colección sale de su URL: /collection/4-my-reports → 4.
| Opción | Por defecto | |
|---|---|---|
--output DIR | reports | dónde escribir el árbol |
--dry-run | apagado | lista los cambios, no escribe nada |
--root-collection ID | todas | exporta solo esta colección y sus hijas |
--host --port --user --dbname | 127.0.0.1 5432 postgres metabaseappdb | conexión |
--ssh-host HOST | — | crea un túnel hacia --port por este host si está cerrado |
--remote-port PORT | 5432 | puerto de Postgres al otro lado |
Cada opción tiene su variable de entorno (METABASE_EXPORT_DIR, METABASE_PG_HOST, …; ver --help), así un proyecto fija su configuración y corre sin argumentos.
Notas
- Solo preguntas nativas (SQL). Las del constructor de consultas no tienen SQL y se omiten.
- Lee MBQL5 (Metabase 50+) y el formato antiguo
native.query. - Salida determinista: dos corridas seguidas dejan el árbol intacto.
- Los archivos conservan los placeholders
{{parameter}}, así que no son ejecutables fuera de Metabase.
Motivación
Tenía muchas preguntas guardadas en Metabase y respaldarlas o versionarlas era difícil: vivían solo dentro de la herramienta, sin historial ni forma de llevarlas a git sin copiarlas a mano. metabase-export nació para resolver eso.