Preguntas Frecuentes para Principiantes
Problemas al Iniciar Spoon
P: Cuando ejecuto Spoon.bat en un ambiente Windows no ocurre nada. ¿Cómo puedo diagnosticar el problema?
R: Edite el archivo Spoon.bat y 1) reemplace en la última línea "start javaw" por sólo "java" 2) agregue el comando "pause" en la siguiente línea 3) guarde el archivo e intente nuevamente. Ahora obtendrá un mensaje de error que puede analizar mediante las siguientes preguntas.
P: Cuando inicio Spoon obtengo el siguiente error: "Could not find the main class. Program will exit".
R: Este error puede ocurrir por varias razones, la causa principal es siempre que los jars de Kettle no están en el classpath.
- Asumiendo que usted bajó la versión binaria de Pentaho Data Integration: confirme que haya descomprimido el archivo zip manteniendo la estructura de directorios que contiene: dentro del directorio principal debería existir un directorio llamado "lib" que contiene un archivo llamado "kettle.jar" en versiones menores ó iguales a la 2.5.x, ó varios archivos cuyos nombres comienzan con "kettle" en versiones posteriores a la 3.0. Si este no es el caso por favor extraiga nuevamente los archivos conservando la estructura de directorios.
- Si obtuvo el código fuente de Pentaho Data Integration y compiló la aplicación usted mismo, probablemente esté ejecutando el script de Spoon desde el directorio incorrecto. La distribución de código fuente contiene un directorio llamado "bin" que contiene los scripts, pero si se compila de manera correcta la versión "distribuible" de PDI se encontrará en un directorio llamado "distrib". Debería ejecutar el script de Spoon desde ese directorio.
P: Cuando inicio Spoon obtengo uno de los siguientes errores ó uno similar:
- Exception in thread "main" java.lang.NoSuchMethodError: method java.lang.Class.a sSubclass with signature (Ljava.lang.Class;)Ljava.lang.Class; was not found.
- log4j:ERROR Parsing error on line 2 and column 48
- log4j:ERROR Could not parse input source
R: A partir de la versión 3 de Kettle se necesita Java 5 (también conocido como 1.5), obtenga esta versión en http://www.javasoft.com. Cuando la versión correcta no se encuentra en el path (verifíquelo ejecutando "java -version" en línea de comandos) esto puede configurarse en el archivo Spoon.bat (ver la línea "set PATH").
¿Cuál es la diferencia entre transformaciones y trabajos?
P: En Spoon puedo hacer trabajos y transformaciones. ¿Cuál es la diferencia entre las dos?
R: Las transformaciones son para mover y transformar filas entre una fuente y un destino. Los trabajos permiten controlar el flujo a más alto nivel: ejecutar transformaciones, enviar correo electrónico en caso de error, enviar archivos por FTP, etc.
Regla para mezclar "tipos" de filas en un salto dentro de una transformación
P: Leí en la documentación que no pueden mezclarse distintos tipos de filas. ¿Qué significa esto?
R: No mezclar tipos de filas significa que cada una de las filas que pasan por un determinado salto debe tener la misma estructura: mismos nombres de campos, tipos de datos y orden de los campos. Así que si desea hacer algo como "agregar un campo extra si una condición es cierta pero no si es falsa" no va a funcionar. Puede habilitarse el "Modo Seguro" para comprobar esto en tiempo de ejecución
A partir de la versión 2.5.0 la comprobación de mezcla de filas se realiza automáticamente en tiempo de diseño/verificación, pero el Modo Seguro todavía debe ser habilitado para realizar la comprobación en tiempo de ejecución (ya que tiene un pequeño costo de procesamiento).
Una manera de ver esto es considerando que un paso es muy similar a una tabla de base de datos en algunos aspectos, tampoco en las tablas pueden guardarse filas de diferente estructura. La razón teórica para esto es que PDI quiere poder realizar transformaciones uniformes y consistentes con sus datos, y el hecho de tener filas de estructura variable hace que esto sea mucho más complejo.
Desde el punto de vista técnico, la mayoría de los pasos utilizan técnicas de optimización que utilizan índices en reemplazo de los nombres de columnas (por ejemplo la columna "nombre" sería internamente la columna 4). Filas variables haría que esto no fuera posible.
Sobre nombres de campo duplicados en una transformación
P: ¿Puedo duplicar nombres de campos en una misma fila?
R: No. PDI se quejará en la mayoría de los casos si detecta nombres de campo duplicados. En versiones previas a la 2.5.0 podía forzarse el uso de nombres duplicados, pero en ese caso sólo el primer valor de los campos duplicados podía utilizarse.
Sobre cadenas vacías y NULL
PDI sigue a Oracle en el uso de cadenas vacías y NULLs: se consideran iguales. Si encuentra un paso que no sigue esta conveción por favor háganoslo saber ya que probablente sea un bug.
Cuando se utiliza por ejemplo el paso "Añadir constante" ó "Generar fila" y se ingresa una cadena vacía se está generando un valor NULL.
Copiando/duplicando campos en una transformación
P: ¿Cómo se duplica un campo en una transformación?
R: Existen varias soluciones:
- Utilizar un paso "Seleccionar Valores" y renombrar un campo, seleccionando también el campo original.
- Utilizar un paso "Calculadora" y utilizar la operación NLV(A,B)
- Utilizar un paso Javascript para copiar el campo
Unión de tablas de base de datos
P: ¿Cómo se hace una unión de tablas de base de datos con PDI?
R: Para unir dos tablas de la misma base de datos se utiliza un paso "Entrada de Tabla" y se realiza la unión (JOIN) en la sentencia SQL. Es la solución más rápida si se trata de sólo una base de datos.
Para unir dos tablas que no están en la misma base de datos, se puede utilizar el paso "Unión de Bases de Datos", pero debe tenerse en cuenta que PDI lanzará una consulta para cada fila de entrada del flujo de datos principal.
Una tercera opción es lanzar las dos consultas por separado y unirlas utilizando un paso "Merge Join(TRADUCIR)". Asegúrese de que los datos estén ordenados por la clave sobre la cual se hará la unión, ya que este es muy probablemente el método de ordenamiento más rápido.
¿Cómo hacer que los pasos de una transformación corran en serie?
P: Por defecto todos los pasos en una transformación corren en paralelo. ¿Cómo puedo hacer que una fila sea procesada por completo antes de que la siguiente comience a ser procesada?
R: Esto no es posible. Una de las cosas básicas en PDI es que todos los pasos de una transformación corren en paralelo. No pueden correr en serie. Esto requeriría cambios en la arquitectura de PDI y resultaría en procesamiento extremadamente lento.
Cómo manejar conexiones a bases de datos en diferentes entornos (por ejemplo desarrollo/pruebas/producción)?
P: Cuando se crea una conexión a bases de datos debe editarse la transformación para conectar a otro servidor de base de datos. ¿Cómo puedo hacer esto variable?
R: Estos son los pasos para crear una conexión basada en variables y compartir la conexión para facilitar la reutilización:
1. En Spoon, abra la transformación que contiene la conexión con valores fijos.
2. Expanda la sección "Conexiones a base de datos" del árbol de navegación.
3. Haga doble click en la conexión definida para editarla.
4. En la caja de texto "Nombre de host del servidor", cambie el valor fijo (por ejemplo "servidor1") a una variable (por ejemplo ${DB_HOSTNAME}).
5. Guarde y cierre ese diálogoc (clic en OK).
6. Haga click derecho en la conexión recién editada y seleccione la opción "Compartir".
7. Guarde la transformación que había abierto (las conexiones compartidas no se guardan hasta que se guarda alguna transformación).
8. Utilizando un explorador de archivos, navegue al directorio .kettle dentro de su directorio personal ("C:\Documents and Settings\<usuario>\.kettle" en Windows XP /2000, "C:\Profiles\<usuario>\.kettle" en Windows Vista, "/home/<usuario>/.kettle" en Linux/Unix).
9. La conexión compartida debería estar almacenada en .kettle/shared.xml. Esta carpeta puede ser copiada a cualquier instalación de PDI.
10. Edite el archivo .kettle/kettle.properties utilizando un editor de texto estándar.
11. Cree una nueva línea dentro de kettle.properties con el nombre de variable definido en el paso 4.
(La nueva línea debería verse de la siguiente manera, si la variable se llamara DB_HOSTNAME: DB_HOSTNAME = localhost)
12. En cualquier instalación nueva puede editarse el archivo kettle.properties y definir un nuevo valor para esa variable.
13. Una vez cumplidos los pasos anteriores reinicie Kettle ó seleccione la opción "Establecer variables de entorno" en el menú "Editar".