--- name: metabase_create_model kind: function lang: py domain: infra version: "1.0.0" purity: impure signature: "def metabase_create_model(client: MetabaseClient, name: str, sql: str, database_id: int, collection_id: int = 0, description: str = '') -> dict" description: "Crea un modelo de Metabase (card con type='model') que otras cards MBQL pueden usar como fuente via source-table: 'card__'." tags: [metabase, model, card, create, api, python, pendiente-usar] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [httpx] params: - name: client desc: "instancia autenticada de MetabaseClient" - name: name desc: "nombre del modelo" - name: sql desc: "query SQL que define el modelo" - name: database_id desc: "ID de la database en Metabase donde vive la query" - name: collection_id desc: "ID de coleccion destino; 0 = root" - name: description desc: "descripcion opcional del modelo" output: "dict con el modelo creado: id, name, type='model', dataset_query y metadata completa" tested: false tests: [] test_file_path: "" file_path: "python/functions/metabase/cards.py" --- ## Ejemplo ```python # Crear modelo base model = metabase_create_model( client, name="supply_orders_base", sql="SELECT * FROM supply_orders WHERE status != 'cancelled'", database_id=6, collection_id=42, description="Ordenes de supply excluyendo canceladas", ) print(model["id"]) # ej: 7820 # Usar el modelo como fuente en una card MBQL card = metabase_create_card(client, "Revenue por proveedor", { "database": 6, "type": "query", "query": { "source-table": f"card__{model['id']}", "aggregation": [["sum", ["field", "total", None]]], "breakout": [["field", "supplier_id", None]], }, }, display="bar") ``` ## Notas Un modelo es una card con `type="model"`. Metabase lo trata como una capa de abstraccion — las cards MBQL que lo referencian via `source-table: "card__"` se benefician del schema inferido del modelo (tipos de columna, foreign keys, etc.). A diferencia de `metabase_create_card`, esta funcion fuerza `type="model"` y siempre usa query SQL nativa. Para modelos MBQL o con configuracion avanzada (result_metadata, column types), usar `metabase_create_card_raw` con `type="model"` en el payload.