{"id":1165,"date":"2025-03-27T11:02:10","date_gmt":"2025-03-27T11:02:10","guid":{"rendered":"https:\/\/cloudlab.urv.cat\/catedracloud\/?p=1165"},"modified":"2025-03-27T11:02:16","modified_gmt":"2025-03-27T11:02:16","slug":"del-texto-al-sql-revolucionando-el-analisis-de-datos-con-ia-generativa","status":"publish","type":"post","link":"https:\/\/cloudlab.urv.cat\/catedracloud\/2025\/03\/27\/del-texto-al-sql-revolucionando-el-analisis-de-datos-con-ia-generativa\/","title":{"rendered":"Del Texto al SQL: Revolucionando el An\u00e1lisis de Datos con IA Generativa"},"content":{"rendered":"\n<p>El lenguaje SQL, esencial para la gesti\u00f3n de bases de datos, ha sido hist\u00f3ricamente un desaf\u00edo reservado para expertos. Sin embargo, la inteligencia artificial generativa est\u00e1 cambiando las reglas del juego al permitir que cualquier persona, sin conocimientos previos de SQL, pueda generar consultas con solo describir en lenguaje natural lo que necesita. Esta tarea, conocida como \u201ctext-to-SQL<em>\u201d<\/em>, convierte instrucciones en lenguaje humano en consultas SQL precisas y sem\u00e1nticamente correctas, revolucionando el acceso a los datos y llevando el an\u00e1lisis empresarial al siguiente nivel.<\/p>\n\n\n\n<p>Con la irrupci\u00f3n de los modelos de lenguaje grandes (LLMs), la generaci\u00f3n de SQL basada en procesamiento del lenguaje natural (NLP) ha dado un salto cu\u00e1ntico. Estos modelos han demostrado una capacidad sorprendente para interpretar y convertir descripciones textuales en consultas SQL altamente precisas. No obstante, persisten algunos desaf\u00edos clave:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Ambig\u00fcedad del lenguaje humano<\/strong>: Mientras que SQL es estructurado y matem\u00e1tico, el lenguaje natural es flexible y a menudo ambiguo, lo que puede generar conversiones imprecisas.<\/li>\n\n\n\n<li><strong>Diversidad de bases de datos<\/strong>: Los datos no siempre residen en un \u00fanico sistema, lo que requiere desarrollar capacidades de \u201ctext-to-SQL<em>\u201d<\/em> adaptadas a m\u00faltiples plataformas.<\/li>\n\n\n\n<li><strong>Gesti\u00f3n de metadatos<\/strong>: Para generar SQL correcto, es crucial contar con informaci\u00f3n detallada sobre tablas y estructuras de datos, pero la recopilaci\u00f3n de metadatos de calidad sigue siendo un reto.<\/li>\n<\/ol>\n\n\n\n<p>A pesar de estos desaf\u00edos, la evoluci\u00f3n de la IA generativa est\u00e1 marcando un antes y un despu\u00e9s en la interacci\u00f3n con bases de datos. La capacidad de preguntar en lenguaje natural y obtener consultas SQL listas para ejecutarse no solo optimiza el acceso a la informaci\u00f3n, sino que tambi\u00e9n democratiza el an\u00e1lisis de datos, eliminando barreras t\u00e9cnicas y acelerando la toma de decisiones basada en datos.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-uagb-image aligncenter uagb-block-e724528a wp-block-uagb-image--layout-default wp-block-uagb-image--effect-static wp-block-uagb-image--align-center\"><figure class=\"wp-block-uagb-image__figure\"><img decoding=\"async\" src=\"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/03\/LangChain-1.png\" alt=\"\" class=\"uag-image-1167\" width=\"15712\" height=\"470\" title=\"LangChain\" loading=\"lazy\" role=\"img\" \/><figcaption class=\"uagb-image-caption\">Fuente: <a href=\"https:\/\/python.langchain.com\/docs\/tutorials\/sql_qa\/\">https:\/\/python.langchain.com\/docs\/tutorials\/sql_qa\/<\/a><\/figcaption><\/figure><\/div>\n\n\n\n<p>El proceso, como se muestra en el diagrama anterior, inicia con una pregunta en lenguaje natural, como: \u00bfCu\u00e1ntos trabajadores de T-Systems trabajan en Espa\u00f1a? Luego, esta pregunta se traduce a una consulta SQL, que es ejecutada por el motor SQL. Finalmente, la respuesta<\/p>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-880bc6dc\"><h4 class=\"uagb-heading-text\"><strong>Veamos un ejemplo: LangChain<\/strong><\/h4><\/div>\n\n\n\n<p>LangChain es una potente herramienta de c\u00f3digo abierto que traduce lenguaje natural a SQL, permitiendo que cualquiera, sin conocimientos t\u00e9cnicos, acceda a bases de datos simplemente escribiendo preguntas en texto.<\/p>\n\n\n\n<p><strong>Un momento \u00bfC\u00f3mo funciona?<\/strong><\/p>\n\n\n\n<p>Imagina que quieres obtener informaci\u00f3n de 5 usuarios en la base de datos <em>Tsystems.db<\/em>, almacenada en SQLite De forma tradicional, esto requerir\u00eda escribir una sentencia <strong>SELECT<\/strong> en SQL:<\/p>\n\n\n\n<p class=\"has-teleneo-font-family has-small-font-size\" style=\"border-width:1px\"><code>from langchain_community.utilities import SQLDatabase<br><br>db = SQLDatabase.from_uri(\"sqlite:\/\/\/Chinook.db\")<br>print(db.dialect)<br>print(db.get_usable_table_names())<br>db.run(\"SELECT UserId, Name FROM User LIMIT 5;\")<\/code><\/p>\n\n\n\n<p>para obtener la respuesta:<\/p>\n\n\n\n<p class=\"has-teleneo-font-family has-small-font-size\" style=\"border-width:1px\"><code>\"[(1, ' Lukas Schneider'), (2, \u2018Hannah M\u00fcller\u2019), (3, \u2018Felix Wagner\u2019), (4, \u2018Sophia Becker\u2019), (5, \u2018Jonas Hoffmann')]\"<\/code><\/p>\n\n\n\n<p>Sin embargo, podr\u00edamos expresar la consulta SQL en lenguaje natural de la siguiente manera:<\/p>\n\n\n\n<p class=\"has-teleneo-font-family has-small-font-size\" style=\"border-width:1px\"><code>from typing_extensions import Annotated<br><br><br>class QueryOutput(TypedDict):<br>\u00a0\u00a0\u00a0 \"\"\"Generated SQL query.\"\"\"<br><br>\u00a0\u00a0\u00a0 query: Annotated[str, ..., \"Syntactically valid SQL query.\"]<br><br><br>def write_query(state: State):<br>\u00a0\u00a0\u00a0 \"\"\"Generate SQL query to fetch information.\"\"\"<br>\u00a0\u00a0\u00a0 prompt = query_prompt_template.invoke(<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"dialect\": db.dialect,<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"table_info\": db.get_table_info(),<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"input\": state[\"question\"],<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<br>\u00a0\u00a0\u00a0 )<br>\u00a0\u00a0\u00a0 structured_llm = llm.with_structured_output(QueryOutput)<br>\u00a0\u00a0\u00a0 result = structured_llm.invoke(prompt)<br>\u00a0\u00a0\u00a0 return {\"query\": result[\"query\"]}<\/code><\/p>\n\n\n\n<p>I usar la funci\u00f3n Python write_query() para efectuar la consulta. Esto es:<\/p>\n\n\n\n<p class=\"has-teleneo-font-family has-small-font-size\" style=\"border-width:1px\">  <code>write_query({\"question\": \"Give me the first five users\"})<\/code><\/p>\n\n\n\n<p class=\"has-teleneo-font-family has-small-font-size\" style=\"border-width:1px\"> <code>{'query': \u2018SELECT UserId, Name FROM User LIMIT 5;'}<\/code><\/p>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-uagb-advanced-heading uagb-block-511cf103\"><h4 class=\"uagb-heading-text\">Conclusi\u00f3n<\/h4><\/div>\n\n\n\n<p>Gracias a los modelos de lenguaje avanzados, el text-to-SQL est\u00e1 revolucionando la forma en que interactuamos con las bases de datos. Ahora, cualquier persona puede obtener informaci\u00f3n clave con solo hacer una pregunta en lenguaje natural, sin necesidad de escribir una sola l\u00ednea de c\u00f3digo. Esta tecnolog\u00eda no solo democratiza el acceso a los datos, sino que tambi\u00e9n acelera la toma de decisiones y optimiza los procesos empresariales. \u00a1El futuro del an\u00e1lisis de datos es m\u00e1s accesible, intuitivo y poderoso que nunca!&#8221;<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>El lenguaje SQL, esencial para la gesti\u00f3n de bases de datos, ha sido hist\u00f3ricamente un desaf\u00edo reservado para expertos. Sin embargo, la inteligencia artificial generativa est\u00e1 cambiando las reglas del juego al permitir que cualquier persona, sin conocimientos previos de SQL, pueda generar consultas con solo describir en lenguaje natural lo que necesita. Esta tarea, [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":1169,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","_swt_meta_header_display":false,"_swt_meta_footer_display":false,"_swt_meta_site_title_display":false,"_swt_meta_sticky_header":false,"_swt_meta_transparent_header":false,"footnotes":""},"categories":[39],"tags":[110,108,109],"class_list":["post-1165","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ia","tag-langchain","tag-large-language-model","tag-sql"],"jetpack_featured_media_url":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/03\/AI.jpg","uagb_featured_image_src":{"full":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/03\/AI.jpg",510,388,false],"thumbnail":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/03\/AI-150x150.jpg",150,150,true],"medium":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/03\/AI-300x228.jpg",300,228,true],"medium_large":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/03\/AI.jpg",510,388,false],"large":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/03\/AI.jpg",510,388,false],"1536x1536":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/03\/AI.jpg",510,388,false],"2048x2048":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/03\/AI.jpg",510,388,false]},"uagb_author_info":{"display_name":"Marc S\u00e1nchez Artigas","author_link":"https:\/\/cloudlab.urv.cat\/catedracloud\/author\/msanchez\/"},"uagb_comment_info":0,"uagb_excerpt":"El lenguaje SQL, esencial para la gesti\u00f3n de bases de datos, ha sido hist\u00f3ricamente un desaf\u00edo reservado para expertos. Sin embargo, la inteligencia artificial generativa est\u00e1 cambiando las reglas del juego al permitir que cualquier persona, sin conocimientos previos de SQL, pueda generar consultas con solo describir en lenguaje natural lo que necesita. Esta tarea,&hellip;","_links":{"self":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts\/1165","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/comments?post=1165"}],"version-history":[{"count":1,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts\/1165\/revisions"}],"predecessor-version":[{"id":1168,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts\/1165\/revisions\/1168"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/media\/1169"}],"wp:attachment":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/media?parent=1165"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/categories?post=1165"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/tags?post=1165"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}