<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://tecnocriollo.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://tecnocriollo.github.io/" rel="alternate" type="text/html" /><updated>2025-06-05T03:20:49+00:00</updated><id>https://tecnocriollo.github.io/feed.xml</id><title type="html">Tecnocriollo blog</title><subtitle>A personal blog about various topics.</subtitle><author><name>Patricio Sanchez</name></author><entry><title type="html">La Nube Es Poderosa Y Peligrosa</title><link href="https://tecnocriollo.github.io/2025/06/04/la-nube-es-poderosa-y-peligrosa.html" rel="alternate" type="text/html" title="La Nube Es Poderosa Y Peligrosa" /><published>2025-06-04T00:00:00+00:00</published><updated>2025-06-04T00:00:00+00:00</updated><id>https://tecnocriollo.github.io/2025/06/04/la-nube-es-poderosa-y-peligrosa</id><content type="html" xml:base="https://tecnocriollo.github.io/2025/06/04/la-nube-es-poderosa-y-peligrosa.html"><![CDATA[<p><img src="/assets/images/2024-06-04-cloud-costs.png" alt="alt text" /></p>

<p>“…bien, usemos la nube, se ve todo simple, que puede salir mal?” - 1 mes después una mega factura por varias decenas de miles de dólares.</p>

<p><br />
La nube facilita la creación de servicios, y eso hace sentir a los developers como creadores de universos, los hace sentir poderosos, sin límites.</p>

<p><img src="/assets/images/2025-06-04-creador-universos.png" alt="alt text" /></p>

<p><br />
<br /></p>

<p>Sin embargo, sin un control adecuado, ese poder se puede ir rápidamente. Los costos pueden ser mayores a los ingresos del negocio y se rompe la promesa de que la nube ayuda al negocio. Se puede pasar fácilmente a la sensación de tenerlo todo a tenerlo nada.</p>

<p><img src="/assets/images/2025-06-04-developer-pobre.png" alt="alt text" /></p>

<p><br />
<br />
<br />
Por eso es clave ser responsable en los costos de la nube, y también conocer las distintas estrategias. 
<br />
<br />
Dentro de esas el provisionamiento es muy útil, obviamente eso genera un compromiso de uso, pero ofrece buenos descuentos y a la vez motiva a ser más controlado al conocer un límite, algo que con Pay as you Go no ocurre ya que da la sensación de que el límite no existiera. 
<br />
<br />
Lo importante es que la estrategia tener la nube controlada de forma que sea la organización quien dirija a la nube y no que la nube dirija a la organización.</p>

<p><br /></p>

<p><img src="/assets/images/2025-06-04-nube-bajo-control.png" alt="alt text" />
<br />
<br /></p>

<p>En fin, si quieres saber más como gestionar mejor los costos de la nube, puedes buscarme en mis redes sociales y contactarme :-)
<br />
<br /></p>

<p><small><i style="color: #666;">Las imágenes de este post fueron creadas usando Google Gemini AI</i></small></p>]]></content><author><name>Patricio Sanchez</name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Datalake Con Minio Y Iceberg</title><link href="https://tecnocriollo.github.io/2025/05/20/datalake-con-minio-y-iceberg.html" rel="alternate" type="text/html" title="Datalake Con Minio Y Iceberg" /><published>2025-05-20T00:00:00+00:00</published><updated>2025-05-20T00:00:00+00:00</updated><id>https://tecnocriollo.github.io/2025/05/20/datalake-con-minio-y-iceberg</id><content type="html" xml:base="https://tecnocriollo.github.io/2025/05/20/datalake-con-minio-y-iceberg.html"><![CDATA[<p>Basandome en <a href="https://blog.min.io/a-developers-introduction-to-apache-iceberg-using-minio/">este artículo</a> de la documentación oficial de Minio, voy a intentar probar tener un Datalake usando Minio y Iceberg.</p>

<p>Pero primero algunos conceptos.</p>

<h3 id="qué-es-iceberg">¿Qué es Iceberg?</h3>

<p>Iceberg es un formato de tabla que usa storage y la propia estructura de directorios para armar el catálogo. Digamos que tenemos un data lake storage s3 o adls con la siguiente carpeta:</p>

<p><code class="language-plaintext highlighter-rouge">/warehouse/database/table</code></p>

<p>donde <em>warehouse</em> sería la ruta del catálogo definido en configuración spark, equivalente a como si fuera un servidor de base de datos, <em>database</em> la base de datos y <em>table</em> la tabla de la base de datos. Si quiera consultar en el catálogo podría usar simple spark SQL de la siguiente forma:</p>

<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">SELECT</span> <span class="n">col1</span><span class="p">,</span> <span class="n">col2</span> <span class="k">FROM</span> <span class="k">database</span><span class="p">.</span><span class="k">table</span>
</code></pre></div></div>

<p>en este sentido es un esquema autoorganizado. Pero hay más, Iceberg ofrece versionamiento, evolución de esquema y no es necesario definir índices ya que los crea el mismo. Esto es gracias a su estructura que aprovecha el mismo storage y logs.</p>

<p><a href="/assets/images/iceberg-metadata.png" target="_blank">
  <img src="/assets/images/iceberg-metadata.png" alt="Iceberg metadata" />
</a></p>
<p class="imagen-ayuda">Click en imagen para abrir más grande en nueva pestaña</p>

<h3 id="qué-es-minio">¿Qué es Minio?</h3>

<p>Minio es un object storage compatible con el API de Amazon S3, se puede usar la misma api para la creación, actualización, modificación y eliminación de objetos y al ser open este permite tener su propio storage. Provee una interfaz web donde se pueden ver los objetos así como usar las mismas tools de las apis compatibles S3 y por lo tanto es compatible también con Spark.</p>

<h3 id="ejecución-y-revisión-de-datalake">Ejecución y revisión de datalake</h3>

<p>Procedemos a importar el docker compose del artículo al equipo local y desde la ruta que lo guardamos lo ejecutamos con <code class="language-plaintext highlighter-rouge">docker-compose up</code>:</p>

<p><a href="/assets/images/2025-05-20_importando_imagenes-con-compose.png" target="_blank">
  <img src="/assets/images/2025-05-20_importando_imagenes-con-compose.png" alt="Importando docker-compose" />
</a></p>
<p class="imagen-ayuda">Click en imagen para abrir más grande en nueva pestaña</p>

<p>al ejecutar aparece una URL local al notebook jupyter:
<a href="/assets/images/2025-05-20_acceso_a_notebook.png" target="_blank">
  <img src="/assets/images/2025-05-20_acceso_a_notebook.png" alt="Accediendo a notebook" />
</a></p>
<p class="imagen-ayuda">Click en imagen para abrir más grande en nueva pestaña</p>

<p>vamos al notebook y se ve que este viene con varios ejemplos:
<a href="/assets/images/2025-05-20_vista_del_notebook.png" target="_blank">
  <img src="/assets/images/2025-05-20_vista_del_notebook.png" alt="Vista notebook" />
</a></p>
<p class="imagen-ayuda">Click en imagen para abrir más grande en nueva pestaña</p>

<p>nos vamos al notebook Getting Started y ejecutamos hasta el SQL que crea una base de datos, una tabla y carga datos de un parquet a la tabla:</p>

<p><a href="/assets/images/2025-05-20_ejemplo_getting_started.png" target="_blank">
  <img src="/assets/images/2025-05-20_ejemplo_getting_started.png" alt="Getting started" />
</a></p>
<p class="imagen-ayuda">Click en imagen para abrir más grande en nueva pestaña</p>

<p>luego nos vamos a la interfaz de Minio, esta se entra en http://localhost:9001/, el usuario y password se ve en el archivo docker-compose.</p>

<p><a href="/assets/images/2025-05-20_inicio_minio.png" target="_blank">
  <img src="/assets/images/2025-05-20_inicio_minio.png" alt="Inicio minio" />
</a></p>
<p class="imagen-ayuda">Click en imagen para abrir más grande en nueva pestaña</p>

<p>entramos a la ruta warehouse y podemos ver que se crea la carpeta de la base de datos <em>nyc</em> y la tabla <em>taxis</em>, finalmente al entrar están las dos carpetas de metadata y data.</p>

<p><a href="/assets/images/2025-05-20_vista_archivos_de_la_tabla.png" target="_blank">
  <img src="/assets/images/2025-05-20_vista_archivos_de_la_tabla.png" alt="Vista archivos de la tabla" />
</a></p>
<p class="imagen-ayuda">Click en imagen para abrir más grande en nueva pestaña</p>

<p>en la carpeta data se puede ver archivos parquet de la tabla, como se insertó una vez solo se ve uno, pero a medida que se agreguen aparecerán más.</p>

<p><a href="/assets/images/2025-05-20_datos_de_la_tabla.png" target="_blank">
  <img src="/assets/images/2025-05-20_datos_de_la_tabla.png" alt="Datos de la tabla" />
</a></p>
<p class="imagen-ayuda">Click en imagen para abrir más grande en nueva pestaña</p>

<p>y en la carpeta metadata está el log de la tabla en que mezcla archivos json y avro</p>

<p><a href="/assets/images/2025-05-20_metadata_tabla.png" target="_blank">
  <img src="/assets/images/2025-05-20_metadata_tabla.png" alt="Metadata de la tabla" />
</a></p>
<p class="imagen-ayuda">Click en imagen para abrir más grande en nueva pestaña</p>

<p>finalmente revisamos el archivo json con la metadata</p>

<p><a href="/assets/images/2025-05-20_091119_json_metadata.png" target="_blank">
  <img src="/assets/images/2025-05-20_091119_json_metadata.png" alt="alt text" />
</a></p>
<p class="imagen-ayuda">Click en imagen para abrir más grande en nueva pestaña</p>

<p>El notebook getting started tiene harta información sobre como ingestar datos, modificar tablas. También en los mismos notebooks hay ejemplo para consultar via DuckDB con PyIceberg y también escribir tablas sin necesidad de tener PySpark.</p>

<p>Espero que esta info les sea muy útil. Nos leemos!!</p>]]></content><author><name>Patricio Sanchez</name></author><summary type="html"><![CDATA[Basandome en este artículo de la documentación oficial de Minio, voy a intentar probar tener un Datalake usando Minio y Iceberg.]]></summary></entry><entry><title type="html">Plataformas O Adhoc</title><link href="https://tecnocriollo.github.io/2025/05/19/plataformas-o-adhoc.html" rel="alternate" type="text/html" title="Plataformas O Adhoc" /><published>2025-05-19T00:00:00+00:00</published><updated>2025-05-19T00:00:00+00:00</updated><id>https://tecnocriollo.github.io/2025/05/19/plataformas-o-adhoc</id><content type="html" xml:base="https://tecnocriollo.github.io/2025/05/19/plataformas-o-adhoc.html"><![CDATA[<p><img src="/assets/images/plataformas-adhoc.png" alt="alt text" /></p>

<p>En el data engineering se puede trabajar con plataformas ya establecidas como Databricks, Bigquery o Fabric o de forma ad-hoc adaptando al negocio.</p>

<h3 id="usando-plataformas">Usando plataformas:</h3>

<p>La curva de aprendizaje es menor, lo que si tienes un equipo con mucha gente es útil ya que se reducen los costos de capacitación. Sin embargo, hay que tener mucho control de costos ya que al ser más fácil de usar, también es más fácil de ejecutar sin medir. Ya hay muchos casos de queries costosas en BigQuery, exceso de clusters en Databricks o sobreutilización de la capacidad en Fabric. Un beneficio adicional es que la seguridad viene en la plataforma, lo que facilita su gestión.</p>

<h3 id="ad-hoc">AD-HOC</h3>

<p>Se puede armar una plataforma propia de datos usando Open Source: Hadoop, Spark, minio, Hudi, Iceberg, Flink, etc. Acá las cosas son más controlables, pero la curva de aprendizaje es más alta y requiere tener gente de muy alta expertise. Es una opción muy buena si hablamos de una Startup donde es un grupo reducido de personas con gran talento y capacidades que a la vez quieren mantener a raya el control de costos o llegar a niveles de optimizaciones más potentes. La seguridad también debe ser implementada y esto puede generar dolores de cabeza si no se tiene a personas con consciencia en estos temas.</p>

<h3 id="conclusiones">Conclusiones</h3>

<p>No hay opción mala o buena, pero unas reglas simples: Si tienes mucha gente y necesitas estandarizar la forma de trabajo, mejor optar por una plataforma. En cambio, tienes poca gente, muy talentosa y capaz y el rendimiento es clave para tu empresa, la opción ad-hoc es la mejor.</p>]]></content><author><name>Patricio Sanchez</name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Avanzando</title><link href="https://tecnocriollo.github.io/2025/05/10/avanzando.html" rel="alternate" type="text/html" title="Avanzando" /><published>2025-05-10T00:00:00+00:00</published><updated>2025-05-10T00:00:00+00:00</updated><id>https://tecnocriollo.github.io/2025/05/10/avanzando</id><content type="html" xml:base="https://tecnocriollo.github.io/2025/05/10/avanzando.html"><![CDATA[<p>Vamos avanzando poco a poco logrando las cosas.</p>]]></content><author><name>Patricio Sanchez</name></author><summary type="html"><![CDATA[Vamos avanzando poco a poco logrando las cosas.]]></summary></entry><entry><title type="html">Hello World</title><link href="https://tecnocriollo.github.io/2024/01/01/hello-world.html" rel="alternate" type="text/html" title="Hello World" /><published>2024-01-01T00:00:00+00:00</published><updated>2024-01-01T00:00:00+00:00</updated><id>https://tecnocriollo.github.io/2024/01/01/hello-world</id><content type="html" xml:base="https://tecnocriollo.github.io/2024/01/01/hello-world.html"><![CDATA[<p>Hello everyone.</p>

<p>This is my blog.</p>]]></content><author><name>Patricio Sanchez</name></author><summary type="html"><![CDATA[Hello everyone.]]></summary></entry></feed>