Antes de hablar sobre las claves sintéticas, veamos un modelo de datos QV típico (en el diagrama de la derecha). Aquí, podemos ver tres tablas “Ventas”, “Asignación de sucursales” y “$ Syn 1 ″. Pero, había cargado solo dos tablas (Sales y Branch Mapping) en QlikView. Aparece otra sorpresa cuando miro de cerca las tablas de «Ventas» y «Mapeo de sucursales». Hay una variable adicional «$ Syn 1» en ambas tablas.
Cuando encontré este efecto en el modelo de datos por primera vez, no pude identificar por qué estaba sucediendo esto. Hasta cierto punto, esto no me molestó debido a que la salida del tablero funcionaba bien. Pero, cuando mi mentor miró este modelo, supe que «$ Syn 1» es una clave sintética y «$ Syn 1 Table» es una tabla sintética.
¿Qué son las claves sintéticas o tablas?
Cuando cargamos dos tablas con un nombre de campo común en ambas tablas, las tablas se asocian automáticamente en función de los campos comunes. Esta es la funcionalidad asociativa de QlikView.
A pesar de esto, cuando tenemos más de un campo común entre dos o más tablas, QlikView crea “CLAVES SINTÉTICAS” y “TABLA SINTÉTICA”. QlikView agrega una tabla sintética (como tabla $ Syn) y una clave sintética (como símbolo $ Syn) al modelo de datos. Las claves se agregan a las tablas cargadas por el usuario y se usan para unirlas con la tabla sintética.
La clave sintética es el método de QlikView para tratar con claves compuestas. La tabla sintética contiene una clave sintética que es un compuesto de todas las combinaciones de los múltiples campos clave que conectan las tablas. En nuestro modelo de datos, teníamos dos campos comunes, «Rama» y «Región», por lo que QlikView creó la clave sintética y la tabla sintética por sí solo. Si miramos la vista de la tabla de origen del visor de tablas, muestra que dos campos están conectados entre estas dos tablas.
¿Las teclas sintéticas son buenas o malas?
Según el manual de referencia de QlikView:
Cuando aumenta el número de claves compuestas / sintéticas, dependiendo de la cantidad de datos, la estructura de la tabla y otros factores, QlikView puede o no manejarlas correctamente. QlikView puede terminar usando una cantidad excesiva de tiempo y / o memoria. Desafortunadamente, las limitaciones reales son virtualmente imposibles de predecir, lo que deja solo prueba y error como método práctico para determinarlas.
- Esta es una de las razones por las que muchas personas eliminan las claves sintéticas. Pero esta declaración es aplicable cuando tiene varias claves sintéticas en su modelo de datos. A pesar de esto, si su modelo de datos tiene varias claves sintéticas, es probable que exista un obstáculo grave con su modelo de datos y no con las claves sintéticas.
- Cuando tiene dos o más tablas y disponen múltiples campos comunes, las claves sintéticas crean una solución correcta, compacta y eficiente. Las claves sintéticas no son el motivo de los problemas de rendimiento y memoria. Por lo general, funcionan un poco mejor o semejante, en comparación con las claves compuestas manuales, que de forma general se usan para borrar claves sintéticas.
- En una de las instancias, recordé que uno de mis colegas mencionó que debido a la clave sintética, la salida del modelo de datos no se muestra correctamente o hay un obstáculo de rendimiento, pero cuando ha eliminado las claves sintéticas, está funcionando bien. Aquí el problema real no eran las claves sintéticas, era un modelo de datos deficiente y, al borrar las claves sintéticas, ha mejorado. En este momento no tengo detalles de comparación de rendimiento y memoria para con o sin claves sintéticas (si tiene, por favor comparta).
¿Por qué deberíamos borrar las claves sintéticas?
Como se mencionó previamente, las claves sintéticas pueden crearse debido a un modelado de datos deficiente. Siempre que un clave sintética inesperada se crea, debemos mirar el modelo de datos nuevamente, hacer los cambios necesarios y, como consecuencia, terminamos con un buen modelo de datos. Tenga en cuenta que la keyword importante en la última declaración es INESPERADO. Caso contrario, las claves sintéticas no hacen ningún daño.
La segunda razón, que me di cuenta con el tiempo es que cada vez que creo mis propias claves compuestas en lugar de claves sintéticas, tengo mucha más claridad sobre el modelo de datos.
Caso contrario, puedo decir que las claves sintéticas son buenas y brindan facilidad para manejar claves compuestas si está trabajando en un buen modelo de datos.
¿Cómo borrar las claves sintéticas?
Para borrar claves sintéticas, primero miramos nuestro modelo de datos y hacemos los cambios necesarios, si es necesario. Tenemos varios métodos para borrar claves sintéticas, pero depende del requisito.
- Eliminando campos: Cuando los campos comunes que generan claves sintéticas no son necesarios en el modelo de datos y hacerlo no afectará la vinculación entre dos tablas. La eliminación de campos se puede realizar comentando o eliminando el campo del script de carga.
- Cambiar el nombre de los campos (usando CALIFICAR): Cuando los campos comunes que generan claves sintéticas no son el mismo campo (no contienen valores similares), estos son en realidad campos diferentes con el mismo nombre. El cambio de nombre se puede hacer a través de la cláusula «AS». Además podemos lograr esto a través de el uso de la declaración CALIFICAR. Con una declaración calificada, los nombres de los campos se convierten en el formato «TableName.FieldName»
Usando QUALIFY
- Teclas de numeración automática / compuestas: Cuando sabemos que los campos comunes que generan claves sintéticas son importantes para el modelo de datos, podemos crear nuestra propia clave para manejar claves compuestas. Además podemos utilizar las funciones Autonumber / Autonumberhash128 / Autonumberhash256 para crear claves compuestas. Estos crearán un valor de bit único para cada combinación distinta de las columnas concatenadas. Autonumberhash128 y Autonumberhash256 crean valores de 128 bits y 256 bits respectivamente. Tenga en cuenta que Autonumber puede ser problemático en aplicaciones que generan archivos QVD para su uso en otras aplicaciones QlikView.
- Además tenemos otros métodos para borrar claves sintéticas como «Crear una tabla de vínculos«,»Crear uniones explícitas » y «Concatenar tablas similares“. Estos temas deben discutirse en detalle y los exploraremos en el futuro.
Nota final:
En general, los desarrolladores quieren borrar las claves sintéticas debido a que se cree que disponen un impacto negativo en el rendimiento y la utilización de la memoria. A pesar de esto, eso no es verdad. Manejan claves compuestas de una manera más eficiente en comparación con las claves manuales, si tenemos un buen modelo de datos. Si ha experimentado la diferencia en el rendimiento y la utilización de la memoria con o sin sintéticos, comparta sus pensamientos por medio de los comentarios a continuación, puesto que beneficiará a la comunidad.