# Laboratorio Pentaho en Ubuntu

{% hint style="info" %}

#### **Laboratorio Pentaho**

Pentaho Data Integration es una herramienta basada en cliente comúnmente instalada y configurada para ejecutarse en Windows 11.

Hay varias opciones de licencia; para estos talleres instalaremos una Edición Enterprise. Esto te dará la oportunidad de probar la construcción de una solución completa: canalizaciones de datos automatizadas + análisis ..
{% endhint %}

<figure><img src="/files/9d7bfa6cbeaa7cfa937096e5a9218742ed7cfd33" alt=""><figcaption><p>Niveles de Pentaho</p></figcaption></figure>

{% hint style="danger" %}
Los pasos siguientes están destinados a configurar un entorno de Laboratorio Pentaho y deben completarse para finalizar los Talleres.

Asegúrate de haber descargado Workshop--Installation:

```bash
cd
git clone https://github.com/jporeilly/Workshop--Installation
```

Para instalar git:

```bash
sudo apt install git
```

{% endhint %}

{% hint style="info" %}
**Prerequisitos**

* Sistema Ubuntu 24.04 LTS (máquina física o virtual)
* Cuenta de usuario con privilegios sudo
* Conexión a Internet
* Familiaridad básica con la línea de comandos de Linux
  {% endhint %}

{% tabs %}
{% tab title="Docker" %}
{% hint style="info" %}

#### Docker

Docker es una plataforma que permite a los desarrolladores empaquetar aplicaciones y sus dependencias en contenedores livianos y portátiles. Los contenedores garantizan que las aplicaciones se ejecuten de forma consistente en diferentes entornos informáticos, desde portátiles de desarrollo hasta servidores de producción. Este taller te guiará a través del proceso completo de instalación de Docker Engine en Ubuntu 24.04 LTS (Noble Numbat).
{% endhint %}

1. Antes de instalar Docker, actualiza la lista de paquetes existente.

```bash
sudo apt update && sudo apt upgrade
```

2. Instala paquetes que permiten a apt usar repositorios mediante HTTPS.

```bash
sudo apt install -y ca-certificates curl gnupg lsb-release
```

3. Crea un directorio para keyrings y añade la clave GPG de Docker.

```bash
sudo install -m 0755 -d /etc/apt/keyrings
```

```bash
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
```

```bash
sudo chmod a+r /etc/apt/keyrings/docker.gpg
```

4. Agrega el repositorio de Docker a tus fuentes de apt.

```bash
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
```

5. Ahora que se ha agregado el repositorio de Docker, actualiza el índice de paquetes.

```bash
sudo apt update && sudo apt upgrade
```

6. Instala Docker Engine, containerd y Docker Compose.

```bash
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```

7. Verifica que Docker esté instalado correctamente comprobando la versión.

```bash
docker --version
```

Deberías ver una salida similar a (Nov 2025):

```
Versión de Docker 29.0.2, build 810xxxx
```

8. Verifica que Docker Engine esté en ejecución.

```bash
sudo systemctl status docker
```

El servicio debería mostrarse como "active (running)".

9. Salir.

```bash
q
```

10. Prueba tu instalación de Docker ejecutando el contenedor hello-world.

```bash
sudo docker run hello-world
```

{% hint style="info" %}
Este comando descarga una imagen de prueba y la ejecuta en un contenedor. Si tiene éxito, verás un mensaje que confirma que Docker funciona correctamente.
{% endhint %}

***

{% hint style="info" %}

#### Sin Sudo

Por defecto, Docker requiere privilegios sudo. Para ejecutar comandos Docker sin sudo.
{% endhint %}

1. Añade tu usuario al grupo docker.

```bash
sudo usermod -aG docker $USER
```

2. Aplica la nueva membresía de grupo (o cierra sesión y vuelve a iniciar).

```bash
newgrp docker
```

3. Verifica que puedes ejecutar Docker sin sudo.

```bash
docker run hello-world
```

4. Asegúrate de que Docker se inicie automáticamente cuando el sistema arranque.

```bash
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
```

***

{% hint style="info" %}

#### Verificación y pruebas

Para confirmar que todo funciona correctamente, ejecuta los siguientes comandos:
{% endhint %}

Comprobar versión de Docker:

```bash
docker version
```

Ver información del sistema Docker:

```bash
docker info
```

Listar contenedores en ejecución:

```bash
docker ps
```

Listar todos los contenedores (incluidos los detenidos):

```bash
docker ps -a
```

Listar imágenes descargadas:

```bash
docker images
```

***

{% hint style="info" %}

#### Comandos comunes

Aquí están los comandos esenciales de Docker que usarás regularmente:

* `docker pull <image>` - Descargar una imagen desde Docker Hub
* `docker images` - Listar todas las imágenes locales
* `docker run <image>` - Crear y arrancar un contenedor desde una imagen
* `docker ps` - Listar contenedores en ejecución
* `docker ps -a` - Listar todos los contenedores
* `docker stop <container>` - Detener un contenedor en ejecución
* `docker rm <container>` - Eliminar un contenedor detenido
* `docker rmi <image>` - Eliminar una imagen
* `docker logs <container>` - Ver los registros del contenedor
* `docker exec -it <container> bash` - Acceder al shell de un contenedor en ejecución
  {% endhint %}
  {% endtab %}

{% tab title="Contenedor MySQL" %}
{% hint style="info" %}

#### **Docker Compose - MySQL**

El usuario pentaho\_admin sólo tiene permiso de LECTURA para la base de datos Steel Wheels - sampledata. La cuenta de administrador ha sido eliminada.

Como vas a realizar operaciones CRUD en la base de datos, necesitamos desplegar una base de datos sampledata en un contenedor Docker, otorgando todos los privilegios a un usuario administrador.
{% endhint %}

{% file src="/files/5bbbcddba1af8d1502770bbdaa869da8dc6e9960" %}

{% file src="/files/2322de136282a8f066b2290acf65ce0dae3d9b4b" %}

{% file src="/files/111905b17f4b6e1c1e29e3e8510094334af2643d" %}

1. Ejecuta el siguiente script para crear una carpeta MySQL y copiar los archivos requeridos.

```bash
cd
cd ~/Workshop--Installation/MySQL
# Hazlo ejecutable
chmod +x copy_mysql.sh
./copy_mysql.sh
```

2. Comprueba que el directorio se ha creado y que los archivos se han copiado.
3. Ejecuta el script docker-compose para crear el contenedor.

```bash
cd
cd ~/MySQL
# Hazlo ejecutable
chmod +x run_mysql_compose.sh
./run_mysql_compose.sh
```

<figure><img src="/files/b625954524a808ff5443ccf3f6dc24cfbe89ebc0" alt="" width="500"><figcaption><p>Desplegar contenedor Docker MySQL</p></figcaption></figure>

4. Comprueba que el contenedor está activo y en ejecución en Docker.

```
docker ps
```

<figure><img src="/files/46e33f0a7f44cd8b67e23ef9715a451ebefff0c9" alt=""><figcaption><p>Contenedores Docker MySQL</p></figcaption></figure>
{% endtab %}

{% tab title="sampledata" %}
{% hint style="info" %}

#### **Sampledata**

A continuación en la lista está crear la base de datos sampledata.
{% endhint %}

<figure><img src="/files/9d2443f17289d32c643ea6714cb38fb2f71aa02f" alt=""><figcaption><p>Diagrama de relaciones</p></figcaption></figure>

{% tabs %}
{% tab title="1. sampledata\_schema.sql" %}
{% hint style="info" %}

#### **sampledata\_schema.sql**

Este script crea una estructura de base de datos relacional completa para una aplicación empresarial de ejemplo. Está diseñado para modelar un sistema de ventas y gestión de pedidos para una empresa que vende varios productos.
{% endhint %}

{% hint style="info" %}

#### **Configuración de la base de datos**

* Crea una base de datos llamada

  ```
  sampledata
  ```

  con conjunto de caracteres UTF-8
* Configura usuarios con los permisos apropiados
* Configura el modo SQL para una mejor integridad de datos
  {% endhint %}

{% hint style="info" %}

#### **Tablas**

**OFICINAS**: Almacena las ubicaciones de las oficinas de la empresa con detalles de dirección

**EMPLEADOS**: Contiene información de empleados con relaciones a oficinas y estructura de reportes

**CLIENTES**: Almacena información de clientes incluyendo detalles de contacto y límites de crédito

**PRODUCTOS**: Contiene el catálogo de productos con información de inventario y precios

**PEDIDOS**: Rastrea los pedidos de clientes con estado y fechas

**DETALLESPEDIDO**: Contiene las partidas de cada pedido con cantidad y precio

**PAGOS**: Registra los pagos de clientes con importes y fechas

**FACT\_PEDIDOS**: Una tabla de hechos para análisis de pedidos

**CLIENTE\_CON\_TER**: Información ampliada del cliente con territorio

**DIM\_TIEMPO**: Tabla de dimensión de tiempo para informes

**GERENTES\_DEPARTAMENTO**: Almacena información de gerentes de departamento

**CUADRANTE\_REALES**: Contiene datos financieros de presupuesto vs. reales con una columna VARIANCE generada

**BALANCE\_DE\_COMPROBACIÓN**: Datos de contabilidad financiera
{% endhint %}

{% hint style="info" %}

#### **Vistas**

**resumen\_pedidos\_cliente**: Resume pedidos y gasto por cliente

**rendimiento\_producto**: Analiza métricas de ventas de productos incluyendo ingresos y beneficio

**rendimiento\_ventas\_empleado**: Rastrea el desempeño de ventas por empleado

**tendencia\_ventas\_mensual**: Muestra tendencias de ventas a lo largo del tiempo por mes

**estado\_inventario\_producto**: Categoriza productos por niveles de inventario

**historial\_pagos\_cliente**: Resume la actividad de pagos y saldos de clientes
{% endhint %}

{% hint style="info" %}

#### **Procedimientos almacenados**

**GetCustomerOrders**: Recupera pedidos de un cliente específico

**UpdateProductStock**: Actualiza niveles de inventario de productos

**GetProductSalesByQuarter**: Analiza ventas trimestrales de productos

**GetTopCustomersByRegion**: Identifica los mejores clientes por región

**GetInventoryValueByProductLine**: Calcula métricas de inventario por línea de producto

**Disparadores**

**before\_order\_insert**: Valida restricciones de fecha en los pedidos

**before\_payment\_insert**: Asegura que los importes de pago sean positivos
{% endhint %}

{% hint style="info" %}

#### **Eventos**

* **mantenimiento\_diario**: Tarea programada para mantenimiento de la base de datos
  {% endhint %}

1. Ejecuta el siguiente comando para crear el esquema.

```bash
cd 
cd ~/MySQL
cat sampledata_schema.sql | docker exec -i mysql-database-1 mysql -u root -p"password" sampledata
```

{% hint style="info" %}
Este comando está importando datos del esquema SQL en una base de datos MySQL que se ejecuta en un contenedor Docker. Aquí hay un desglose:

Este comando lee el archivo SQL:

```powershell
cat sampledata_schema.sql
```

Pasa (redirige) el contenido del archivo al siguiente comando:

```
|
```

Esto ejecuta un comando en un contenedor Docker en ejecución:

```
docker exec -i mysql-database-1 mysql -u root -p"password" sampledata
```

{% endhint %}

2. Puedes comprobar la base de datos sampledata y las tablas con los siguientes comandos.

Mostrar bases de datos:

```powershell
docker exec -i mysql-database-1 mysql -u root -p"password" -e "SHOW DATABASES;"
```

Mostrar tablas:

```powershell
docker exec -i mysql-database-1 mysql -u root -p"password" sampledata -e "SHOW TABLES;"
```

Mostrar columnas de una tabla:

```powershell
docker exec -i mysql-database-1 mysql -u root -p"password" sampledata -e "DESCRIBE table_name;"
```

{% endtab %}

{% tab title="2. sampledata\_data.sql" %}
{% hint style="info" %}

#### **sampledata\_data.sql**

Este script llena la base de datos con datos de ejemplo para demostrar la funcionalidad del esquema.
{% endhint %}

{% hint style="info" %}

#### **Datos de referencia**

* Ubicaciones de oficinas en diferentes regiones
* Jerarquía de empleados con títulos de trabajo
* Catálogo de productos organizado por líneas de producto
  {% endhint %}

{% hint style="info" %}

#### **Datos transaccionales**

* Registros de clientes con información de contacto
* Historial de pedidos con fechas y estado
* Detalles de pedidos con cantidades y precios
* Registros de pagos
  {% endhint %}

{% hint style="info" %}

#### **Datos financieros**

* Cifras de presupuesto vs. reales en CUADRANTE\_REALES
* Datos contables de balance de comprobación
  {% endhint %}

{% hint style="info" %}

#### **Características de los datos**

* Escenarios empresariales realistas con estados de pedido variados
* Catálogo de productos completo con descripciones y precios
* Estructura jerárquica de empleados con relaciones de dependencia
* Datos basados en el tiempo que abarcan múltiples años para análisis de tendencias
* Datos financieros adecuados para presupuestación y análisis de variaciones
  {% endhint %}

{% hint style="info" %}

#### **Características notables**

* Los datos siguen restricciones de integridad referencial
* Manejo correcto de valores NULL cuando procede
* Precios y cantidades realistas
* Las columnas generadas (como VARIANCE) están excluidas de inserciones directas
* Los pedidos están secuenciados para satisfacer las restricciones de claves externas
  {% endhint %}

1. Ejecuta el siguiente comando para cargar los datos en las tablas sampledata.

```bash
cd 
cd ~/MySQL
cat sampledata_data.sql | docker exec -i mysql-database-1 mysql -u root -p"password" sampledata
```

2. Puedes usar los siguientes comandos para comprobar que los datos se han cargado.

Para contar el número de filas en una tabla específica:

```docker
docker exec -i mysql-database-1 mysql -u root -p"password" sampledata -e "SELECT COUNT(*) FROM table_name;"
```

Para ver las primeras filas de una tabla:

```docker
docker exec -i mysql-database-1 mysql -u root -p"password" sampledata -e "SELECT * FROM table_name LIMIT 10;"
```

Para comprobar recuentos de todas las tablas:

```docker
docker exec -i mysql-database-1 mysql -u root -p"password" sampledata -e "SELECT TABLE_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'sampledata';"
```

Para obtener un resumen de las tablas y sus estados:

```docker
docker exec -i mysql-database-1 mysql -u root -p"password" sampledata -e "SHOW TABLE STATUS;"
```

<figure><img src="/files/c680937e1f59eed68f951f2dddf9d815a0e0755d" alt=""><figcaption><p>Comprobar tablas</p></figcaption></figure>
{% endtab %}
{% endtabs %}
{% endtab %}

{% tab title="DBeaver" %}
{% hint style="info" %}

#### DBeaver

Vas a necesitar una herramienta de gestión de bases de datos. DBeaver Community es una herramienta gratuita y de código abierto para la gestión de bases de datos en proyectos personales.
{% endhint %}

1. La opción más simple es descargar e instalar desde Snapstore.

```bash
cd
sudo apt update && sudo apt upgrade
sudo apt install snapd
sudo snap install dbeaver-ce
```

O

Ve al oficial [Página de descarga de DBeaver](https://dbeaver.io/download/)

{% embed url="<https://dbeaver.io/files/dbeaver-ce_latest_amd64.deb>" %}

O

Para instalar ese archivo DEB.

```bash
wget https://dbeaver.io/debs/dbeaver.gpg.key -O /tmp/dbeaver.gpg.key
sudo gpg --dearmor -o /usr/share/keyrings/dbeaver.gpg /tmp/dbeaver.gpg.key
echo "deb [signed-by=/usr/share/keyrings/dbeaver.gpg] https://dbeaver.io/debs/dbeaver-ce /" | sudo tee /etc/apt/sources.list.d/dbeaver.list
sudo apt update
sudo apt install dbeaver-ce
```

4. Fija DBeaver en el Dash - barra de herramientas inferior.

***

{% hint style="info" %}

#### **Base de datos MySQL**

Si has completado los 3 requisitos anteriores, deberías tener un contenedor MySQL en Docker, expuesto en el puerto:3306 con la base de datos sampledata.
{% endhint %}

1. Inicia DBeaver y selecciona: MySQL.

<figure><img src="/files/4a2c4642c1151de1889dbba8f33bb1cab46d7c4d" alt=""><figcaption><p>MySQL</p></figcaption></figure>

2. Configura la conexión con las siguientes propiedades:

Nombre de usuario: root o pentaho\_user

Contraseña: password

<figure><img src="/files/a367c53bc6165fd62682cf7d3d2e2aac7fd0e460" alt=""><figcaption><p>Configurar y probar la conexión MySQL - sampledata</p></figcaption></figure>

{% hint style="warning" %}
Puede que necesites descargar la versión del controlador de base de datos compatible.

También habilita: allowPublicKeyRetrieval
{% endhint %}

<figure><img src="/files/c17895b999390c0fef89c7d778c4a9a7790a1bd2" alt=""><figcaption><p>Habilitar: allowPublicKeyRetrieval</p></figcaption></figure>

3. Prueba la conexión.

<figure><img src="/files/c29b67e4a129396586e17e4f0c83a701942188af" alt=""><figcaption><p>Probar conexión</p></figcaption></figure>

4. Expandir: bases de datos > sampledata > Tables

<figure><img src="/files/2be2688f1b34c169f03bba4d28761070de954110" alt=""><figcaption><p>Datos de clientes</p></figcaption></figure>

5. Abre una ventana SQL y ejecuta una consulta de prueba.

```sql
select * from CUSTOMERS
where COUNTRY = 'USA' and CITY = 'NYC';
```

<figure><img src="/files/fe3933fa01397b438aaa3f87fa1b6589cbae42be" alt=""><figcaption><p>Consulta SQL - Clientes de NYC</p></figcaption></figure>
{% endtab %}
{% endtabs %}

<details>

<summary>Solución general de problemas (haz clic para expandir)</summary>

**Problema: errores "permission denied"**

* Solución: Asegúrate de que tu usuario esté en el grupo docker y que hayas cerrado sesión/iniciado sesión o hayas ejecutado `newgrp docker`

**Problema: El servicio Docker no arranca**

* Solución: Comprueba los registros con `sudo journalctl -u docker.service`

**Problema: No se puede conectar al daemon de Docker**

* Solución: Asegúrate de que el servicio Docker esté en ejecución con `sudo systemctl start docker`

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://academy.pentaho.com/pentaho-11-installation-en/pentaho-11-installation-es/configuracion/ubuntu-pentaho-lab.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
