{"id":781860,"date":"2025-11-19T13:52:50","date_gmt":"2025-11-19T12:52:50","guid":{"rendered":"https:\/\/www.devoteam.com\/expert-view\/bigquery-ml-revolutionises-the-data-workflow\/"},"modified":"2025-11-25T11:50:51","modified_gmt":"2025-11-25T10:50:51","slug":"bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos","status":"publish","type":"expert-view","link":"https:\/\/devoteam.info\/es\/expert-view\/bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos\/","title":{"rendered":"De SQL a IA: C\u00f3mo BigQuery ML Revoluciona el Flujo de Trabajo de Datos"},"content":{"rendered":"\n<p class=\"wp-block-yoast-seo-estimated-reading-time yoast-reading-time__wrapper\"><span class=\"yoast-reading-time__icon\"><svg aria-hidden=\"true\" focusable=\"false\" data-icon=\"clock\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" style=\"display:inline-block;vertical-align:-0.1em\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\"><\/path><\/svg><\/span><span class=\"yoast-reading-time__spacer\" style=\"display:inline-block;width:1em\"><\/span><span class=\"yoast-reading-time__descriptive-text\">Estimated reading time: <\/span><span class=\"yoast-reading-time__reading-time\">9<\/span><span class=\"yoast-reading-time__time-unit\"> minutos<\/span><\/p>\n\n\n\n<div class=\"wp-block-group has-gray-light-background-color has-background has-global-padding is-layout-constrained wp-container-core-group-is-layout-5d9a58c0 wp-block-group-is-layout-constrained\" style=\"padding-top:var(--wp--preset--spacing--small);padding-right:var(--wp--preset--spacing--small);padding-bottom:var(--wp--preset--spacing--small);padding-left:var(--wp--preset--spacing--small)\">\n<div class=\"wp-block-yoast-seo-table-of-contents yoast-table-of-contents\"><h2>Qu\u00e9 aprender\u00e1s:<\/h2><ul><li><a href=\"#h-prediccion-del-abandono-de-clientes-las-dos-maneras\" data-level=\"2\">Predicci\u00f3n del Abandono de Clientes: Las Dos Maneras<\/a><ul><li><a href=\"#h-ruta-a-bigquery-ml\" data-level=\"3\">Ruta A: BigQuery ML<\/a><\/li><li><a href=\"#h-ruta-b-python-y-el-resto-de-la-pila\" data-level=\"3\">Ruta B: Python y el resto de la pila<\/a><\/li><\/ul><\/li><li><a href=\"#h-la-conclusion\" data-level=\"2\">La Conclusi\u00f3n<\/a><ul><li><a href=\"#h-que-hay-de-la-escala\" data-level=\"3\">\u00bfQu\u00e9 hay de la Escala?<\/a><\/li><li><a href=\"#h-que-hay-de-la-inferencia\" data-level=\"3\">\u00bfQu\u00e9 hay de la Inferencia?<\/a><\/li><li><a href=\"#h-comparacion-general\" data-level=\"3\">Comparaci\u00f3n General:<\/a><\/li><\/ul><\/li><li><a href=\"#h-bigquery-ml-vs-python-que-deberias-elegir\" data-level=\"2\">BigQuery ML vs. Python: \u00bfQu\u00e9 deber\u00edas elegir?<\/a><ul><li><a href=\"#h-cuando-no-utilizar-bqml\" data-level=\"3\">Cuando no utilizar BQML<\/a><\/li><\/ul><\/li><li><a href=\"#h-observaciones-finales\" data-level=\"2\">Observaciones finales<\/a><\/li><\/ul><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Construir modelos de <em>Machine Learning<\/em> (ML) no deber\u00eda requerir la extracci\u00f3n de datos, la configuraci\u00f3n de entornos y la uni\u00f3n de media docena de herramientas. En realidad, el flujo de trabajo tradicional de Python depende precisamente de estos aspectos: configuraci\u00f3n, bibliotecas distintas y una implementaci\u00f3n de modelos matizada. Sin embargo, si los datos de una empresa ya residen en <a href=\"https:\/\/devoteam.info\/es\/google-cloud\/servicios-datos-google-cloud\/\">BigQuery<\/a>, como ocurre con muchas organizaciones, BigQuery ML permite el desarrollo de modelos directamente dentro del data warehouse. Esto plantea la pregunta central abordada en este art\u00edculo: <strong>\u00bfC\u00f3mo se compara este desarrollo dentro del <em>data warehouse<\/em> con los enfoques tradicionales?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En este art\u00edculo, compararemos BigQuery ML con el flujo de trabajo tradicional de Python construyendo un modelo de abandono de clientes en ambos entornos. Veremos los pros y los contras de cada enfoque, probando c\u00f3mo BQML simplifica el preprocesamiento y la implementaci\u00f3n. <strong>\u00bfTe preguntas si deber\u00edas cambiar el control granular de Python por la velocidad y la accesibilidad del machine learning basado en SQL? <\/strong>Aqu\u00ed est\u00e1n las respuestas (\u00a1con algo de c\u00f3digo)!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-prediccion-del-abandono-de-clientes-las-dos-maneras\"><strong>Predicci\u00f3n del Abandono de Clientes: Las Dos Maneras<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Comparamos ambos enfoques utilizando un conjunto de datos p\u00fablico de telecomunicaciones con aproximadamente 4.000 clientes. La tarea: predecir el abandono de clientes (si alguien cancela su servicio) bas\u00e1ndose en patrones de uso, regi\u00f3n e informaci\u00f3n de la cuenta. Ambos enfoques dividir\u00e1n los datos en conjuntos de entrenamiento y prueba para evaluar el rendimiento del modelo en datos no vistos.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large has-custom-border\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQueryML-vs-Traditional-Python-1-1024x576.jpg\" alt=\"\" class=\"has-border-color has-gray-light-border-color wp-image-781392\" style=\"border-width:2px\" srcset=\"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQueryML-vs-Traditional-Python-1-1024x576.jpg 1024w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQueryML-vs-Traditional-Python-1-300x169.jpg 300w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQueryML-vs-Traditional-Python-1-768x432.jpg 768w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQueryML-vs-Traditional-Python-1-1536x864.jpg 1536w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQueryML-vs-Traditional-Python-1.jpg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading has-medium-font-size\" id=\"h-ruta-a-bigquery-ml\"><br><strong><strong>Ruta A: BigQuery ML<\/strong><\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Crear un modelo en BigQuery ML es enga\u00f1osamente simple, ya que abstrae la mayor parte de la complejidad y los costes indirectos, al igual que otras soluciones cloud gestionadas. BigQuery ML maneja autom\u00e1ticamente los valores NULL, divide los datos para el entrenamiento y la evaluaci\u00f3n y, en este caso, realiza la codificaci\u00f3n one-hot-encoding por nosotros. Nuestro conjunto de datos contiene una columna &#8216;state&#8217; con valores categ\u00f3ricos como NY o WA. BigQuery ML convierte estas cadenas en caracter\u00edsticas distintas que el modelo puede procesar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con la preparaci\u00f3n de datos ya gestionada, la creaci\u00f3n del modelo es tan simple como seleccionar una arquitectura y especificar la variable objetivo (abandono: s\u00ed o no). Aunque no es estrictamente necesario, excluir las variables redundantes o irrelevantes es un enfoque sensato y est\u00e1ndar; esto se realiza mediante una declaraci\u00f3n excepcional.<\/p>\n\n\n\n<pre class=\"wp-block-code has-gray-light-background-color has-background\"><code><mark style=\"background-color:rgba(0, 0, 0, 0);color:#034cd3\" class=\"has-inline-color\">CREAR MODELO<\/mark> `proyecto.conjunto_datos.nombre_modelo`\n<mark style=\"background-color:rgba(0, 0, 0, 0);color:#034cd3\" class=\"has-inline-color\">OPCIONES<\/mark> (\n  tipo_de_modelo = <mark style=\"background-color:rgba(0, 0, 0, 0);color:#399e1c\" class=\"has-inline-color\">\"LOGISTIC_REG\"<\/mark>,\n  columnas_etiqueta_de_entrada = &#91;<mark style=\"background-color:rgba(0, 0, 0, 0);color:#399e1c\" class=\"has-inline-color\">\"churn\"<\/mark>] <mark style=\"background-color:rgba(0, 0, 0, 0);color:#c5106c\" class=\"has-inline-color\">--<\/mark>variable objetivo\n) <mark style=\"background-color:rgba(0, 0, 0, 0);color:#034cd3\" class=\"has-inline-color\">COMO\nSELECCIONAR<\/mark>\n  * <mark style=\"background-color:rgba(0, 0, 0, 0);color:#034cd3\" class=\"has-inline-color\">EXCEPTO<\/mark> (\n      id_cliente\n      cargo_total_dia\n      cargo_total_tarde\n      cargo_total_noche\n      cargo_total_internacional\n    )\n<mark style=\"background-color:rgba(0, 0, 0, 0);color:#034cd3\" class=\"has-inline-color\">DE<\/mark> `proyecto.conjunto_datos.nombre_tabla`<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La evaluaci\u00f3n en el conjunto de prueba (datos no vistos) se realiza con la siguiente estructura.<\/p>\n\n\n\n<pre class=\"wp-block-code has-gray-light-background-color has-background\"><code><mark style=\"background-color:rgba(0, 0, 0, 0);color:#034cd3\" class=\"has-inline-color\">SELECIONAR<\/mark>  *\n<mark style=\"background-color:rgba(0, 0, 0, 0);color:#034cd3\" class=\"has-inline-color\">DE<\/mark> ML.EVALUAR (<mark style=\"background-color:rgba(0, 0, 0, 0);color:#034cd3\" class=\"has-inline-color\">MODELO<\/mark> `proyecto.conjunto_datos.nombre_modelo`)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Este enfoque simple produce un modelo con un rendimiento bastante malo. En este caso, la distribuci\u00f3n del abandono no es proporcional; aproximadamente el 85% de los clientes no abandonan, por lo que el modelo por defecto predice \u00abno abandono\u00bb para todos. Podemos forzar al modelo a sopesar estos datos de manera equitativa a\u00f1adiendo <code>auto_class_weights = <mark style=\"background-color:rgba(0, 0, 0, 0);color:#034cd3\" class=\"has-inline-color\">True<\/mark><\/code> a las opciones.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esto nos da una ligera mejora, pero la regresi\u00f3n log\u00edstica parece alcanzar un techo aqu\u00ed. Cambiar a una arquitectura m\u00e1s potente es tan sencillo como cambiar<code><mark style=\"background-color:rgba(0, 0, 0, 0);color:#399e1c\" class=\"has-inline-color\">\"LOGISTIC_REG\" <\/mark><\/code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-main-color\">a<\/mark><code><mark style=\"background-color:rgba(0, 0, 0, 0);color:#399e1c\" class=\"has-inline-color\"> \"BOOSTED_TREE_CLASSIFIER\"<\/mark><\/code>. Esto finalmente produce un modelo con un rendimiento satisfactorio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfLa conclusi\u00f3n clave? La iteraci\u00f3n requiere cambios m\u00ednimos en el c\u00f3digo; est\u00e1s trabajando en SQL todo el tiempo, mientras que BigQuery ML hace mucho tras bastidores. La divisi\u00f3n de entrenamiento\/prueba, la codificaci\u00f3n <em>one-hot-encoding<\/em> e incluso el escalado de caracter\u00edsticas num\u00e9ricas (un enfoque est\u00e1ndar para la regresi\u00f3n log\u00edstica), todas estas pr\u00e1cticas comunes que requerir\u00edan implementaci\u00f3n expl\u00edcita en los flujos de trabajo tradicionales se manejan autom\u00e1ticamente. Veamos c\u00f3mo se compara esto con la ruta tradicional.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-medium-font-size\" id=\"h-ruta-b-python-y-el-resto-de-la-pila\"><strong>Ruta B: Python y el resto de la pila<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El enfoque tradicional comienza con la configuraci\u00f3n, si se ejecuta localmente, es necesario instalar Python y las bibliotecas relevantes. Esto se abstrae si se utilizan entornos gestionados como Google Colab o Workbench.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A continuaci\u00f3n, es necesario mover los datos de BigQuery al entorno de desarrollo. Esto se puede hacer manualmente (exportando y luego cargando) o consultando directamente desde Python, lo que requiere la autenticaci\u00f3n adecuada. El siguiente fragmento de c\u00f3digo utiliza una clave JSON de cuenta de servicio.<\/p>\n\n\n\n<pre class=\"wp-block-code has-base-color has-main-background-color has-text-color has-background has-link-color wp-elements-1\"><code><mark style=\"background-color:rgba(0, 0, 0, 0);color:#e3a4ec\" class=\"has-inline-color\">from<\/mark> google.cloud <mark style=\"background-color:rgba(0, 0, 0, 0);color:#e3a4ec\" class=\"has-inline-color\">import<\/mark> bigquery\n<mark style=\"background-color:rgba(0, 0, 0, 0);color:#e3a4ec\" class=\"has-inline-color\">import<\/mark> pandas <mark style=\"background-color:rgba(0, 0, 0, 0);color:#e3a4ec\" class=\"has-inline-color\">as<\/mark> pd\n<mark style=\"background-color:rgba(0, 0, 0, 0);color:#e3a4ec\" class=\"has-inline-color\">import <\/mark>os\n\n\n<mark style=\"background-color:rgba(0, 0, 0, 0);color:#85e66a\" class=\"has-inline-color\">#set environment through JSON key and start client\n<\/mark>os.environ&#91;<mark style=\"background-color:rgba(0, 0, 0, 0);color:#f37748\" class=\"has-inline-color\">\"GOOGLE_APPLICATION_CREDENTIALS\"<\/mark>]=<mark style=\"background-color:rgba(0, 0, 0, 0);color:#f37748\" class=\"has-inline-color\">\"path_to_key.json\"<\/mark>\nclient = bigquery.Client(project=<mark style=\"background-color:rgba(0, 0, 0, 0);color:#f37748\" class=\"has-inline-color\">\"project\"<\/mark>)\nquery = '''\n<mark style=\"background-color:rgba(0, 0, 0, 0);color:#f37748\" class=\"has-inline-color\">SELECT\n  * EXCEPT (\n      customer_id,\n      total_day_charge,\n      total_eve_charge,\n      total_night_charge,\n      total_intl_charge\n    )\nFROM `project.dataset.table_name`\n'''<\/mark>\n\n\ndf = client.query(query).to_dataframe()<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Utilizamos una consulta que imita nuestra declaraci\u00f3n BQML EXCEPT para evitar cargar la tabla completa. A diferencia de BigQuery ML, el flujo de trabajo tradicional requiere que la mayor\u00eda de las acciones sean expl\u00edcitas:Manejar los valores NULL (este conjunto de datos no tiene ninguno, pero normalmente usar\u00edas <em>pandas<\/em> para descartarlos o imputarlos), dividir los conjuntos de entrenamiento\/prueba, codificar las variables categ\u00f3ricas y escalar las caracter\u00edsticas num\u00e9ricas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Todo esto es gestionado por BigQuery ML sin que se le instruya a hacerlo; en Python, toda la tuber\u00eda de preprocesamiento es expl\u00edcita.<\/p>\n\n\n\n<pre class=\"wp-block-code has-base-color has-main-background-color has-text-color has-background has-link-color wp-elements-2\"><code><mark style=\"background-color:rgba(0, 0, 0, 0);color:#e3a4ec\" class=\"has-inline-color\">from<\/mark> sklearn.model_selection <mark style=\"background-color:rgba(0, 0, 0, 0);color:#e3a4ec\" class=\"has-inline-color\">import<\/mark> train_test_split\n<mark style=\"background-color:rgba(0, 0, 0, 0);color:#e3a4ec\" class=\"has-inline-color\">from<\/mark> sklearn.preprocessing <mark style=\"background-color:rgba(0, 0, 0, 0);color:#e3a4ec\" class=\"has-inline-color\">import<\/mark> OneHotEncoder, StandardScaler\n<mark style=\"background-color:rgba(0, 0, 0, 0);color:#e3a4ec\" class=\"has-inline-color\">from<\/mark> sklearn.compose <mark style=\"background-color:rgba(0, 0, 0, 0);color:#e3a4ec\" class=\"has-inline-color\">import<\/mark> ColumnTransformer, make_column_selector\n<mark style=\"background-color:rgba(0, 0, 0, 0);color:#e3a4ec\" class=\"has-inline-color\">from<\/mark> sklearn.linear_model <mark style=\"background-color:rgba(0, 0, 0, 0);color:#e3a4ec\" class=\"has-inline-color\">import <\/mark>LogisticRegression\n<mark style=\"background-color:rgba(0, 0, 0, 0);color:#e3a4ec\" class=\"has-inline-color\">from<\/mark> sklearn.pipeline <mark style=\"background-color:rgba(0, 0, 0, 0);color:#e3a4ec\" class=\"has-inline-color\">import<\/mark> Pipeline\n<mark style=\"background-color:rgba(0, 0, 0, 0);color:#e3a4ec\" class=\"has-inline-color\">from<\/mark> sklearn.metrics <mark style=\"background-color:rgba(0, 0, 0, 0);color:#e3a4ec\" class=\"has-inline-color\">import<\/mark> f1_score\n<mark style=\"background-color:rgba(0, 0, 0, 0);color:#e3a4ec\" class=\"has-inline-color\">import<\/mark> numpy <mark style=\"background-color:rgba(0, 0, 0, 0);color:#e3a4ec\" class=\"has-inline-color\">as<\/mark> np\n\n\n<mark style=\"background-color:rgba(0, 0, 0, 0);color:#85e66a\" class=\"has-inline-color\">#separate features and target variables and split sets\n<\/mark>y = df&#91;<mark style=\"background-color:rgba(0, 0, 0, 0);color:#f37748\" class=\"has-inline-color\">\"churn\"<\/mark>]\nX = df.drop(columns=&#91;<mark style=\"background-color:rgba(0, 0, 0, 0);color:#f37748\" class=\"has-inline-color\">\"churn\"]<\/mark>)\n\n\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n\n\n<mark style=\"background-color:rgba(0, 0, 0, 0);color:#85e66a\" class=\"has-inline-color\">#pre process categorical features and scale numerical variables\n<\/mark>categorical_transformer = OneHotEncoder(handle_unknown=<mark style=\"background-color:rgba(0, 0, 0, 0);color:#f37748\" class=\"has-inline-color\">\"ignore\"<\/mark>)\nnumeric_transformer = StandardScaler()\n\n\npreprocessor = ColumnTransformer(\n    transformers = &#91;\n      (<mark style=\"background-color:rgba(0, 0, 0, 0);color:#f37748\" class=\"has-inline-color\">\"num\"<\/mark>, numeric_transformer, make_column_selector(dtype_include=np.number)),\n      (<mark style=\"background-color:rgba(0, 0, 0, 0);color:#f37748\" class=\"has-inline-color\">\"cat\"<\/mark>, categorical_transformer, make_column_selector(dtype_include=<mark style=\"background-color:rgba(0, 0, 0, 0);color:#0de2c5\" class=\"has-inline-color\">object<\/mark>)),\n      (<mark style=\"background-color:rgba(0, 0, 0, 0);color:#f37748\" class=\"has-inline-color\">\"bool\"<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0);color:#f37748\" class=\"has-inline-color\">\"passthrough\"<\/mark>, make_column_selector(dtype_include=<mark style=\"background-color:rgba(0, 0, 0, 0);color:#0de2c5\" class=\"has-inline-color\">bool<\/mark>))\n    ])\n\n\n<mark style=\"background-color:rgba(0, 0, 0, 0);color:#85e66a\" class=\"has-inline-color\">#model pipeline and evaluation\n<\/mark>model_pipeline = Pipeline(steps=&#91;\n    (<mark style=\"background-color:rgba(0, 0, 0, 0);color:#f37748\" class=\"has-inline-color\">\"preprocessor\"<\/mark>, preprocessor),\n    (<mark style=\"background-color:rgba(0, 0, 0, 0);color:#f37748\" class=\"has-inline-color\">\"classifier\"<\/mark>, LogisticRegression())\n])\n\n\nmodel_pipeline.fit(X_train,y_train)\ny_pred = model_pipeline.predict(X_test)\nf1 = f1_score(y_test, y_pred)\n<mark style=\"background-color:rgba(0, 0, 0, 0);color:#f8eca6\" class=\"has-inline-color\">print<\/mark>(<mark style=\"background-color:rgba(0, 0, 0, 0);color:#34aadf\" class=\"has-inline-color\">f<\/mark><mark style=\"background-color:rgba(0, 0, 0, 0);color:#f37748\" class=\"has-inline-color\">\"F1-Score: {f1}\"<\/mark>)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Esta implementaci\u00f3n es mucho m\u00e1s detallada que BigQuery ML. Produce una puntuaci\u00f3n F1 de alrededor de 0.2. Para abordar el desequilibrio de clases, podemos a\u00f1adir class_weight=&#8217;balanced&#8217; a la llamada del modelo, lo que mejora el rendimiento a cerca de 0.5. Los valores no son exactos debido a la naturaleza de la mezcla aleatoria, pero se alinean con nuestros resultados de BigQuery ML. Curiosamente, el entrenamiento fue casi instant\u00e1neo en Python.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cambiar a un \u00e1rbol potenciado requiere ajustes adicionales. Los modelos de \u00e1rbol no se benefician del escalado de caracter\u00edsticas que hab\u00edamos aplicado, y los pesos de clase de XGBoost deben calcularse manualmente, a diferencia de la implementaci\u00f3n anterior en scikit-learn.<\/p>\n\n\n\n<pre class=\"wp-block-code has-base-color has-main-background-color has-text-color has-background has-link-color wp-elements-3\"><code><mark style=\"background-color:rgba(0, 0, 0, 0);color:#e3a4ec\" class=\"has-inline-color\">from<\/mark> xgboost <mark style=\"background-color:rgba(0, 0, 0, 0);color:#e3a4ec\" class=\"has-inline-color\">import<\/mark> XGBClassifier\n\n\nscale_pos_weight = (y_train == <mark style=\"background-color:rgba(0, 0, 0, 0);color:#34aadf\" class=\"has-inline-color\">False<\/mark>).<mark style=\"background-color:rgba(0, 0, 0, 0);color:#f8eca6\" class=\"has-inline-color\">sum<\/mark>() \/ (y_train == <mark style=\"background-color:rgba(0, 0, 0, 0);color:#34aadf\" class=\"has-inline-color\">True<\/mark>).<mark style=\"background-color:rgba(0, 0, 0, 0);color:#f8eca6\" class=\"has-inline-color\">sum<\/mark>()\nmodel_pipeline = Pipeline(steps=&#91;\n    (<mark style=\"background-color:rgba(0, 0, 0, 0);color:#f37748\" class=\"has-inline-color\">\"preprocessor\"<\/mark>, preprocessor),\n    (<mark style=\"background-color:rgba(0, 0, 0, 0);color:#f37748\" class=\"has-inline-color\">\"classifier\"<\/mark>, XGBClassifier(scale_pos_weight=scale_pos_weight))\n])\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Esto produce una puntuaci\u00f3n F1 de alrededor de 0.8, de nuevo con un tiempo de entrenamiento casi instant\u00e1neo. Si bien Python ofrece velocidad en conjuntos de datos peque\u00f1os, el flujo de trabajo requiere significativamente m\u00e1s conocimiento del dominio.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-la-conclusion\"><strong>La Conclusi\u00f3n<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Las diferencias son marcadas. BigQuery ML abstrae la complejidad que, de otro modo, requerir\u00eda trabajo manual: no hay movimiento de datos, el cambio de modelo es fluido y la preparaci\u00f3n de datos es autom\u00e1tica.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">BigQuery ML capacita a los analistas con la creaci\u00f3n r\u00e1pida de prototipos. No est\u00e1 dise\u00f1ado para cient\u00edficos de datos que necesitan toda la granularidad que permite Python. Para los equipos sin profunda experiencia en ML, la compensaci\u00f3n tiene sentido. Las matem\u00e1ticas subyacentes siguen siendo consistentes; una regresi\u00f3n log\u00edstica se desempe\u00f1a igual independientemente de la implementaci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-medium-font-size\" id=\"h-que-hay-de-la-escala\"><strong><strong>\u00bfQu\u00e9 hay de la Escala?<\/strong><\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfQu\u00e9 pasa cuando los datos crecen?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hicimos la prueba de rendimiento con un conjunto de datos m\u00e1s grande, de poco menos de 3 GB, aproximadamente 10.000 veces m\u00e1s grande que el original. El flujo de trabajo de BigQuery ML se mantuvo id\u00e9ntico. El entrenamiento de la regresi\u00f3n log\u00edstica tard\u00f3 unos minutos, pero el proceso no cambi\u00f3.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sin embargo, el entorno de Python colaps\u00f3. El culpable m\u00e1s probable ser\u00eda la codificaci\u00f3n categ\u00f3rica con m\u00e1s valores \u00fanicos, que agot\u00f3 la memoria disponible. Esto es solucionable asignando m\u00e1s RAM, optimizando el procesamiento con Dask o Polars, cambiando a clusters distribuidos de Spark, o incluso muestreando los datos. La cuesti\u00f3n aqu\u00ed es que cada soluci\u00f3n a\u00f1ade complejidad, alej\u00e1ndose cada vez m\u00e1s de un flujo de trabajo simple y repetible.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La idea clave es que <strong>BigQuery ML escala sin fricciones<\/strong>. La misma consulta SQL que funcion\u00f3 con 4.000 filas tambi\u00e9n funciona con 50 millones. No hay cambios en el c\u00f3digo, ni reescrituras arquitect\u00f3nicas, ni decisiones de infraestructura. BigQuery ML simplemente funciona.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-medium-font-size\" id=\"h-que-hay-de-la-inferencia\"><strong><strong>\u00bfQu\u00e9 hay de la Inferencia?<\/strong><\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Entrenar es solo la mitad de la historia. En nuestro ejemplo de Python, para realmente usar el modelo, se necesita envolver el c\u00f3digo en una API (como Flask o FastAPI), contenedores con Docker, y luego desplegarlo en un punto final invocable a trav\u00e9s de Google Cloud Run o Kubernetes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con BigQuery ML, todo este proceso se omite. Para las predicciones en tiempo real, a\u00f1adir<code>model_registry = <mark style=\"background-color:rgba(0, 0, 0, 0);color:#85e66a\" class=\"has-inline-color\">\"vertex_ai\"<\/mark><\/code> a las opciones de SQL exporta autom\u00e1ticamente el modelo a Vertex AI, donde puede ser desplegado directamente como un punto final REST. Sin desarrollo de API, sin contenedores, solo una sola l\u00ednea de c\u00f3digo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-medium-font-size\" id=\"h-comparacion-general\"><strong><strong>Comparaci\u00f3n General:<\/strong><\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Reuniendo todos los resultados, las ventajas y desventajas quedan claras en una comparaci\u00f3n lado a lado, ya que el verdadero coste de cada ruta se revela al tener en cuenta el tiempo del desarrollador, la escalabilidad y los costes de implementaci\u00f3n.<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-primary-color\">Conjunto de datos<\/mark><\/strong><\/td><td><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-primary-color\">Modelo<\/mark><\/strong><\/td><td><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-primary-color\">Puntuaci\u00f3n<\/mark><\/strong> <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-primary-color\">BQML F1<\/mark><\/strong><\/td><td><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-primary-color\">Tiempo BQML <\/mark><\/strong><\/td><td><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-primary-color\">Puntuaci\u00f3n<\/mark><\/strong> <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-primary-color\">Python F1<\/mark><\/strong><\/td><td><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-primary-color\"><strong>Tiempo Python<\/strong><\/mark><\/td><\/tr><tr><td>Peque\u00f1o (4k filas)<\/td><td>Regresi\u00f3n Log\u00edstica con Peso de Clase<\/td><td>0.517<\/td><td>30 segundos<\/td><td>~0.5<\/td><td>~Instant\u00e1neo<\/td><\/tr><tr><td>Peque\u00f1o (4k filas)<\/td><td>\u00c1rbol Potenciado con Pesos de Clase<\/td><td>0.789<\/td><td>6 min 38 segundos<\/td><td>~0.8<\/td><td>~Instant\u00e1neo<\/td><\/tr><tr><td>Grande (~3GB)<\/td><td>Regresi\u00f3n Log\u00edstica<\/td><td>0.975<\/td><td>2 min 11 segundos<\/td><td>Fallida<\/td><td>Fallida<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Los resultados de Python (~) son aproximados debido a la divisi\u00f3n aleatoria de entrenamiento\/prueba.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-bigquery-ml-vs-python-que-deberias-elegir\"><strong><strong>BigQuery ML vs. Python: \u00bfQu\u00e9 deber\u00edas elegir?<\/strong><\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Entonces, \u00bfqu\u00e9 camino deber\u00edas elegir? Desafortunadamente, la respuesta es la que a nadie le gusta: depende. Pero la siguiente tabla deber\u00eda ayudarte a tomar una decisi\u00f3n informada.<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-primary-color\">BigQuery ML <\/mark><\/strong><\/td><td><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-primary-color\">Python tradicional<\/mark><\/strong><\/td><\/tr><tr><td><strong>Escalabilidad sin Esfuerzo:<\/strong> La misma consulta SQL escala de unas pocas a millones de filas sin cambios.<\/td><td><strong>Fricci\u00f3n de Escalado:<\/strong> Requiere implementaci\u00f3n espec\u00edfica para conjuntos de datos grandes (ej., re-arquitectura con Spark\/Dask).<\/td><\/tr><tr><td><strong>Flujo de Trabajo sin Fricci\u00f3n:<\/strong> Reside en el data warehouse. No hay movimiento de datos ni configuraci\u00f3n.<\/td><td><strong>Flujo de Trabajo con Altos Costes Indirectos:<\/strong> Requiere movimiento de datos y configuraci\u00f3n del entorno.<\/td><\/tr><tr><td><strong>Preprocesamiento Automatizado:<\/strong> Maneja autom\u00e1ticamente los pasos de preprocesamiento (ej., codificaci\u00f3n <em>one-hot<\/em>, escalado de caracter\u00edsticas, valores NULL).<\/td><td><strong>Preprocesamiento Expl\u00edcito:<\/strong> Debes codificar manualmente cada paso (ej.,StandardScaler, OneHotEncoder).<\/td><\/tr><tr><td><strong>Simple Deployment:<\/strong> Un \u00fanico comando SQL (model_registry) despliega el modelo autom\u00e1ticamente en un endpoint de Vertex AI.<\/td><td><strong>Despliegue Matizado:<\/strong> Requiere construir una API (<em>Flask<\/em>), contenerizar (<em>Docker<\/em>) y desplegar en infraestructura (<em>Cloud Run<\/em>).<\/td><\/tr><tr><td><strong>Menos Granularidad:<\/strong> Limitado a las arquitecturas de modelo soportadas por BQML.<\/td><td><strong>Granularidad Total:<\/strong> Flexibilidad inigualable para arquitecturas personalizadas (ej., redes neuronales a medida) y afinamiento fino.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading has-medium-font-size\" id=\"h-cuando-no-utilizar-bqml\"><strong>Cuando no utilizar BQML<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Mientras que BQML maneja la gran mayor\u00eda de los casos de uso de ML tabular de forma nativa, est\u00e1 limitado a arquitecturas de modelo predefinidas. No es compatible con la definici\u00f3n de capas de redes neuronales personalizadas, que a menudo se emplean en aplicaciones especializadas como el procesamiento de im\u00e1genes. Dado que BQML no proporciona actualmente estas operaciones, la ruta de Python sigue siendo relevante debido a su flexibilidad inigualable.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-observaciones-finales\"><strong>Observaciones finales<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En \u00faltima instancia, BigQuery ML se centra en la accesibilidad. Abstrae el trabajo pesado (las tareas complejas), permitiendo que los equipos se centren en los conocimientos\/hallazgos en lugar de en la configuraci\u00f3n, el desarrollo y el despliegue.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para la inmensa mayor\u00eda de los casos de uso de negocio, la compensaci\u00f3n es abrumadoramente positiva: se obtiene una reducci\u00f3n masiva de la complejidad y del tiempo de obtenci\u00f3n de valor, perdiendo solo el control granular que la mayor\u00eda de las tareas predictivas est\u00e1ndar nunca requieren realmente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfBuscas optimizar su almac\u00e9n de datos de BigQuery? Hemos preparado dos art\u00edculos que explican c\u00f3mo hacerlo con <a href=\"https:\/\/devoteam.info\/expert-view\/optimise-your-data-warehouse-bigquery-nested-and-repeated-fields\/\">campos anidados<\/a> y <a href=\"https:\/\/devoteam.info\/expert-view\/improve-bigquery-performance-normalisation-vs-denormalisation\/\">desnormalizaci\u00f3n.<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<div class=\"wp-block-cover alignfull is-style-blur-image is-style-blur-image-less\" style=\"margin-top:0;margin-bottom:0;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\"><span aria-hidden=\"true\" class=\"wp-block-cover__background has-black-background-color has-background-dim-70 has-background-dim\"><\/span><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1047\" src=\"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python.jpg\" class=\"wp-block-cover__image-background wp-post-image\" alt=\"\" data-object-fit=\"cover\" srcset=\"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python.jpg 1920w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python-300x164.jpg 300w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python-1024x558.jpg 1024w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python-768x419.jpg 768w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python-1536x838.jpg 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n<div class=\"wp-block-group alignfull has-base-color has-text-color has-global-padding is-layout-constrained wp-container-core-group-is-layout-46b67d08 wp-block-group-is-layout-constrained\" style=\"margin-top:0px;margin-bottom:0px;padding-top:var(--wp--preset--spacing--xxx-large);padding-right:var(--wp--preset--spacing--medium);padding-bottom:var(--wp--preset--spacing--xxx-large);padding-left:var(--wp--preset--spacing--medium)\">\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group has-global-padding is-content-justification-left is-layout-constrained wp-container-core-group-is-layout-5f9de3d0 wp-block-group-is-layout-constrained\">\n<p class=\"has-text-align-left has-secondary-font-family has-large-font-size wp-block-paragraph\"><strong>\u00a1Deja de desperdiciar el poder predictivo de tus datos!<\/strong><\/p>\n<\/div>\n\n\n\n<p class=\"has-text-align-left has-main-accent-color has-text-color wp-block-paragraph\">\u00bfListo para transformar tus datos en un activo competitivo potente y accesible? En Devoteam G Cloud, nos especializamos en la creaci\u00f3n de plataformas de datos modernas en Google Cloud. \u00a1Cont\u00e1ctanos para talleres de estrategia de datos!<\/p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-left is-layout-flex wp-container-core-buttons-is-layout-3c38c079 wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/devoteam.info\/es\/google-cloud\/#contact\">\u00a1Inicia tu viaje!<\/a><\/div>\n\n\n\n<div class=\"wp-block-button is-style-outline-white-button\"><a class=\"wp-block-button__link has-base-color has-text-color has-background wp-element-button\" href=\"https:\/\/devoteam.info\/success-story\/?topic_name=google-cloud\" style=\"background-color:#64648254\">Historias de \u00e9xito<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Construir modelos de Machine Learning (ML) no deber\u00eda requerir la extracci\u00f3n de datos, la configuraci\u00f3n de entornos y la uni\u00f3n de media docena de herramientas. En realidad, el flujo de trabajo tradicional de Python depende precisamente de estos aspectos: configuraci\u00f3n, bibliotecas distintas y una implementaci\u00f3n de modelos matizada. Sin embargo, si los datos de una [&hellip;]<\/p>\n","protected":false},"featured_media":781491,"template":"","categories":[737,743],"tags":[],"industry":[],"class_list":["post-781860","expert-view","type-expert-view","status-publish","has-post-thumbnail","hentry","category-data","category-google-cloud"],"acf":[],"cards":"\n\t<div class=\"single-post-card\">\n\n\t\t<figure class=\"wp-block-post-featured-image\"><a href=\"https:\/\/devoteam.info\/es\/expert-view\/bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos\/\" target=\"_self\" ><img width=\"1920\" height=\"1047\" src=\"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python.jpg\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"De SQL a IA: C\u00f3mo BigQuery ML Revoluciona el Flujo de Trabajo de Datos\" style=\"aspect-ratio:4\/3;width:100%;object-fit:cover;\" decoding=\"async\" loading=\"lazy\" srcset=\"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python.jpg 1920w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python-300x164.jpg 300w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python-1024x558.jpg 1024w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python-768x419.jpg 768w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python-1536x838.jpg 1536w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/figure>\n\n\t\t\n\t\t<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-43282307 wp-block-group-is-layout-flex\">\n\t<p style=\"font-style:normal;font-weight:700\" class=\"has-link-color wp-elements-4 wp-block-lp-post-type has-text-color has-primary-color has-small-font-size\">Blog<\/p>\n\n\t\t\n\t\t<h3 style=\"font-style:normal;font-weight:400\" class=\"wp-block-post-title has-base-font-size\"><a href=\"https:\/\/devoteam.info\/es\/expert-view\/bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos\/\" target=\"_self\" >De SQL a IA: C\u00f3mo BigQuery ML Revoluciona el Flujo de Trabajo de Datos<\/a><\/h3><\/div>\n\t\t\n\t<\/div>\n\n","yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.4 (Yoast SEO v28.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>De SQL a la IA: BigQuery ML revoluciona el flujo de trabajo de datos.<\/title>\n<meta name=\"description\" content=\"Consigue una implementaci\u00f3n de ML sin fricciones. Comparamos las diferencias del flujo de trabajo de BigQuery ML frente a Python. Lee ahora nuestro an\u00e1lisis experto y nuestro c\u00f3digo.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/devoteam.info\/es\/expert-view\/bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"De SQL a IA: C\u00f3mo BigQuery ML Revoluciona el Flujo de Trabajo de Datos\" \/>\n<meta property=\"og:description\" content=\"Consigue una implementaci\u00f3n de ML sin fricciones. Comparamos las diferencias del flujo de trabajo de BigQuery ML frente a Python. Lee ahora nuestro an\u00e1lisis experto y nuestro c\u00f3digo.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/devoteam.info\/es\/expert-view\/bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos\/\" \/>\n<meta property=\"og:site_name\" content=\"Devoteam\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-25T10:50:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1047\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/devoteam.info\\\/es\\\/expert-view\\\/bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos\\\/\",\"url\":\"https:\\\/\\\/devoteam.info\\\/es\\\/expert-view\\\/bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos\\\/\",\"name\":\"De SQL a la IA: BigQuery ML revoluciona el flujo de trabajo de datos.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/devoteam.info\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/devoteam.info\\\/es\\\/expert-view\\\/bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/devoteam.info\\\/es\\\/expert-view\\\/bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/devoteam.info\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/BigQuery-vs-Python.jpg\",\"datePublished\":\"2025-11-19T12:52:50+00:00\",\"dateModified\":\"2025-11-25T10:50:51+00:00\",\"description\":\"Consigue una implementaci\u00f3n de ML sin fricciones. Comparamos las diferencias del flujo de trabajo de BigQuery ML frente a Python. Lee ahora nuestro an\u00e1lisis experto y nuestro c\u00f3digo.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/devoteam.info\\\/es\\\/expert-view\\\/bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/devoteam.info\\\/es\\\/expert-view\\\/bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos\\\/\"]}],\"accessibilityFeature\":[\"tableOfContents\"]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/devoteam.info\\\/es\\\/expert-view\\\/bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos\\\/#primaryimage\",\"url\":\"https:\\\/\\\/devoteam.info\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/BigQuery-vs-Python.jpg\",\"contentUrl\":\"https:\\\/\\\/devoteam.info\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/BigQuery-vs-Python.jpg\",\"width\":1920,\"height\":1047},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/devoteam.info\\\/es\\\/expert-view\\\/bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/devoteam.info\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/devoteam.info\\\/es\\\/expert-view\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"De SQL a IA: C\u00f3mo BigQuery ML Revoluciona el Flujo de Trabajo de Datos\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/devoteam.info\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/devoteam.info\\\/es\\\/\",\"name\":\"Devoteam\",\"description\":\"AI-Driven Tech Consulting\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/devoteam.info\\\/es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"De SQL a la IA: BigQuery ML revoluciona el flujo de trabajo de datos.","description":"Consigue una implementaci\u00f3n de ML sin fricciones. Comparamos las diferencias del flujo de trabajo de BigQuery ML frente a Python. Lee ahora nuestro an\u00e1lisis experto y nuestro c\u00f3digo.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/devoteam.info\/es\/expert-view\/bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos\/","og_locale":"es_ES","og_type":"article","og_title":"De SQL a IA: C\u00f3mo BigQuery ML Revoluciona el Flujo de Trabajo de Datos","og_description":"Consigue una implementaci\u00f3n de ML sin fricciones. Comparamos las diferencias del flujo de trabajo de BigQuery ML frente a Python. Lee ahora nuestro an\u00e1lisis experto y nuestro c\u00f3digo.","og_url":"https:\/\/devoteam.info\/es\/expert-view\/bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos\/","og_site_name":"Devoteam","article_modified_time":"2025-11-25T10:50:51+00:00","og_image":[{"width":1920,"height":1047,"url":"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Tiempo de lectura":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/devoteam.info\/es\/expert-view\/bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos\/","url":"https:\/\/devoteam.info\/es\/expert-view\/bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos\/","name":"De SQL a la IA: BigQuery ML revoluciona el flujo de trabajo de datos.","isPartOf":{"@id":"https:\/\/devoteam.info\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/devoteam.info\/es\/expert-view\/bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos\/#primaryimage"},"image":{"@id":"https:\/\/devoteam.info\/es\/expert-view\/bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos\/#primaryimage"},"thumbnailUrl":"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python.jpg","datePublished":"2025-11-19T12:52:50+00:00","dateModified":"2025-11-25T10:50:51+00:00","description":"Consigue una implementaci\u00f3n de ML sin fricciones. Comparamos las diferencias del flujo de trabajo de BigQuery ML frente a Python. Lee ahora nuestro an\u00e1lisis experto y nuestro c\u00f3digo.","breadcrumb":{"@id":"https:\/\/devoteam.info\/es\/expert-view\/bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/devoteam.info\/es\/expert-view\/bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos\/"]}],"accessibilityFeature":["tableOfContents"]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/devoteam.info\/es\/expert-view\/bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos\/#primaryimage","url":"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python.jpg","contentUrl":"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python.jpg","width":1920,"height":1047},{"@type":"BreadcrumbList","@id":"https:\/\/devoteam.info\/es\/expert-view\/bigquery-ml-revoluciona-el-flujo-de-trabajo-de-datos\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/devoteam.info\/es\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/devoteam.info\/es\/expert-view\/"},{"@type":"ListItem","position":3,"name":"De SQL a IA: C\u00f3mo BigQuery ML Revoluciona el Flujo de Trabajo de Datos"}]},{"@type":"WebSite","@id":"https:\/\/devoteam.info\/es\/#website","url":"https:\/\/devoteam.info\/es\/","name":"Devoteam","description":"AI-Driven Tech Consulting","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/devoteam.info\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"}]}},"uagb_featured_image_src":{"full":["https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python.jpg",1920,1047,false],"thumbnail":["https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python-150x150.jpg",150,150,true],"medium":["https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python-300x164.jpg",300,164,true],"medium_large":["https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python-768x419.jpg",768,419,true],"large":["https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python-1024x558.jpg",1024,558,true],"1536x1536":["https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python-1536x838.jpg",1536,838,true],"2048x2048":["https:\/\/devoteam.info\/wp-content\/uploads\/2025\/11\/BigQuery-vs-Python.jpg",1920,1047,false]},"uagb_author_info":{"display_name":"esnekane","author_link":"https:\/\/devoteam.info\/es\/author\/"},"uagb_comment_info":0,"uagb_excerpt":"Construir modelos de Machine Learning (ML) no deber\u00eda requerir la extracci\u00f3n de datos, la configuraci\u00f3n de entornos y la uni\u00f3n de media docena de herramientas. En realidad, el flujo de trabajo tradicional de Python depende precisamente de estos aspectos: configuraci\u00f3n, bibliotecas distintas y una implementaci\u00f3n de modelos matizada. Sin embargo, si los datos de una&hellip;","_links":{"self":[{"href":"https:\/\/devoteam.info\/es\/wp-json\/wp\/v2\/expert-view\/781860","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devoteam.info\/es\/wp-json\/wp\/v2\/expert-view"}],"about":[{"href":"https:\/\/devoteam.info\/es\/wp-json\/wp\/v2\/types\/expert-view"}],"version-history":[{"count":0,"href":"https:\/\/devoteam.info\/es\/wp-json\/wp\/v2\/expert-view\/781860\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devoteam.info\/es\/wp-json\/wp\/v2\/media\/781491"}],"wp:attachment":[{"href":"https:\/\/devoteam.info\/es\/wp-json\/wp\/v2\/media?parent=781860"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devoteam.info\/es\/wp-json\/wp\/v2\/categories?post=781860"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devoteam.info\/es\/wp-json\/wp\/v2\/tags?post=781860"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/devoteam.info\/es\/wp-json\/wp\/v2\/industry?post=781860"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}