# Extractor — Funciones que leen datos de fuentes externas Tag: `extractor`. Grupo de funciones que **leen datos crudos** de fuentes externas (DB, API, archivos, web) y los devuelven a la aplicacion. Son el primer nodo del flujo de datos en `data_factory` (issue 0097, analogia Factorio = drills). Filtro MCP: `mcp__registry__fn_search query="" tag="extractor"`. ## Funciones del grupo | ID | Lang | Fuente | |---|---|---| | [bq_query_py_infra](../../python/functions/infra/bq_query.md) | py | BigQuery SQL | | [bq_preview_rows_py_infra](../../python/functions/infra/bq_preview_rows.md) | py | BigQuery table preview | | [bq_get_table_py_infra](../../python/functions/infra/bq_get_table.md) | py | BigQuery metadata | | [bq_list_tables_py_infra](../../python/functions/infra/bq_list_tables.md) | py | BigQuery catalog | | [metabase_execute_card_py_infra](../../python/functions/infra/metabase_execute_card.md) | py | Metabase card | | [metabase_execute_query_py_infra](../../python/functions/infra/metabase_execute_query.md) | py | Metabase ad-hoc | | [load_csv_go_datascience](../../functions/datascience/load_csv.md) | go | CSV file | | [load_parquet_go_datascience](../../functions/datascience/load_parquet.md) | go | Parquet file | | [from_csv_py_core](../../python/functions/core/from_csv.md) | py | CSV file | | [fetch_data_frame_go_datascience](../../functions/datascience/fetch_data_frame.md) | go | Generic dataframe loader | | [http_get_json_py_infra](../../python/functions/infra/http_get_json.md) | py | HTTP JSON GET | | [http_get_json_go_infra](../../functions/infra/http_get_json.md) | go | HTTP JSON GET | | [http_download_file_py_infra](../../python/functions/infra/http_download_file.md) | py | HTTP file download | | [http_download_file_go_infra](../../functions/infra/http_download_file.md) | go | HTTP file download | | [jupyter_read_py_notebook](../../python/functions/notebook/jupyter_read.md) | py | Jupyter notebook cells | ## Ejemplo canonico Extractor BigQuery -> dataframe local. ```python from infra import bq_query # 1. Extraer df = bq_query( project_id="my-gcp-project", query="SELECT * FROM `dataset.events` WHERE event_date = CURRENT_DATE() LIMIT 10000", ) print(f"extracted {len(df)} rows, {df.memory_usage(deep=True).sum() / 1024:.1f} KB") ``` ## Fronteras del grupo NO cubre: - **Transform** (clean / dedup / aggregate) -> [[transformer]]. - **Sink** (escritura a destino externo) -> [[sink]]. - **Validacion** del dato (range / null / drift) -> [[validator]]. - Extraccion de funciones desde repos externos (eso es `sources/`, no este grupo). - Streaming continuo (Kafka consumer, etc.) — los extractores son fetch puntual o batch. ## Cuando NO usar `extractor` - Si la funcion lee de la BD interna del registry (`registry.db`, `operations.db`) -> tag `registry` o `doctor`, no `extractor`. Extractor implica fuente externa. - Si solo parsea bytes ya cargados en memoria -> es `transformer`. ## Consumidores - `data_factory` C++ ImGui app — tab Extractors lista el grupo entero y permite Run Now por nodo. - `dag_engine` — un DAG step puede llamar a un extractor via `function: `. - Pipelines ad-hoc en notebooks. ## Notas - BQ extractors estan tambien tageados `bigquery` (otro grupo); Metabase extractors tageados `metabase`. Una funcion puede pertenecer a multiples grupos. - HTTP extractors duplicados Go/Py — eleccion segun stack del consumidor. - Crece a medida que el registry incorpora nuevas fuentes (Mongo, Kafka, S3...). Mantener tag al frontmatter al crear funcion nueva.