Files
fn_registry/python/functions/metabase/metabase_create_snippet.md
T
egutierrez 4299482b75 feat(metabase): nuevos modulos — snippets, notifications, dashboard_filters
Tres modulos nuevos con funciones CRUD completas:
- snippets: list, get, create, update, archive (SQL reutilizable)
- notifications: list, create_card_alert, create_dashboard_subscription, update, delete
- dashboard_filters: add_dashboard_filter (parameter_mappings sobre cards existentes)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 19:03:08 +02:00

2.3 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
metabase_create_snippet function py infra 1.0.0 impure def metabase_create_snippet(client: MetabaseClient, name: str, content: str, description: str = "", collection_id: int = 0) -> dict Crea un nuevo SQL snippet reutilizable en Metabase. El snippet se referencia en queries nativas con {{snippet: nombre}}.
metabase
snippet
create
api
python
MetabaseClient_go_infra
false error_go_core
httpx
name desc
client instancia autenticada de MetabaseClient
name desc
name nombre del snippet; se usa en queries con la sintaxis {{snippet: nombre}}
name desc
content SQL del snippet: puede ser una CTE completa, subquery o cualquier fragmento SQL reutilizable
name desc
description descripcion opcional del proposito del snippet
name desc
collection_id ID de la coleccion donde guardar el snippet; 0 para la raiz (Our analytics)
dict: snippet creado con id asignado por Metabase, name, content, description, collection_id, created_at false
python/functions/metabase/snippets.py

Ejemplo

# Crear snippet con CTE reutilizable
snippet = metabase_create_snippet(
    client,
    "supply_orders_cte",
    """
WITH supply_full AS (
    SELECT so.id, so.service_request_id,
           sr.channel_id, ch.name AS channel_name
    FROM supply_orders so
    LEFT JOIN service_requests sr ON so.service_request_id = sr.id
    LEFT JOIN channels ch ON sr.channel_id = ch.id
)
""",
    description="CTE base de supply_orders con 6 JOINs para cruce con NAV",
)
print(snippet["id"], snippet["name"])

# Usar el snippet en una card
from metabase.cards import metabase_create_card
card = metabase_create_card(client, "Revenue", {
    "database": 6,
    "type": "native",
    "native": {
        "query": "{{snippet: supply_orders_cte}} SELECT channel_name, COUNT(*) FROM supply_full GROUP BY 1"
    }
})

Notas

El campo name debe ser unico en Metabase — el servidor retorna 400 si ya existe un snippet con ese nombre. Si collection_id es 0 o no se provee, el snippet se guarda en la raiz. Solo se envian al body los campos no vacios/cero para evitar conflictos con defaults del servidor.