Proyectos

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-reports4.

OpciónPor defecto
--output DIRreportsdónde escribir el árbol
--dry-runapagadolista los cambios, no escribe nada
--root-collection IDtodasexporta solo esta colección y sus hijas
--host --port --user --dbname127.0.0.1 5432 postgres metabaseappdbconexión
--ssh-host HOSTcrea un túnel hacia --port por este host si está cerrado
--remote-port PORT5432puerto 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.