Operación ETL - Tecla principal de retorno
-
22-09-2019 - |
Pregunta
Estoy usando Talend para poblar un almacén de datos. Mi trabajo es escribir datos de clientes en una tabla de dimensiones y datos de transacciones en la tabla de hechos. La clave sustituta (P_Key) en la tabla de hechos es el incremento automático. Cuando inserto un nuevo cliente, necesito mi tabla de hechos para reflejar la ID del cliente relacionado.
Como mencioné, mi p_key es auto a auto_incrementing, por lo que no puedo insertar un valor arbitrario para el p_key.
¿Alguna idea sobre cómo puedo insertar una fila en mi tabla de dimensiones y aún así recuperar la clave principal para referencia en mi registro de hechos?
Más información:
¿Qué pasa si los datos entrantes no están normalizados? Por ejemplo, tengo un CSV con los siguientes datos:
order # date total customer# first_name last_name
111 1/2/2010 500 101 John Smith
222 1/3/2010 600 101 John Smith
Obviamente, quiero que la información del cliente aparezca en la tabla de dimensiones y los datos de la transacción en la tabla de hechos:
dimension
101 john smith
fact
111 1/3/2010
222 1/3/2010
Como mencionó, la clave de la tabla de dimensiones será la incrementación automática. La tabla de hechos debe hacer referencia a esta clave. ¿Cómo se diseña el trabajo ETL para que la clave sustituta se devuelva después de un inserto?
Además, si los datos del cliente se deducen (como se indicó) ¿Cómo maneja las claves?
Solución
Sin embargo, es posible que haya entendido el problema:
Una tabla de hechos puede o no tener una PK de incremento automática, generalmente un PK en una tabla de hechos es un compuesto de varias tablas de dimensión de referencia de FKS.
Una tabla de dimensiones debe tener una PK de incremento automática.
Un nuevo cliente debe "aterrizar" en la tabla de dimensiones del cliente antes de que el hecho de la transacción llegue al DW (o al menos la tabla de hechos).
Una tabla de dimensiones debe tener un BusinessKey que identifique de manera única a un cliente, como correo electrónico, nombre completo + PIN o similar.
Una fila de transacciones entrante también debe tener el campo de clientes de clientes del cliente, así es como identificamos al cliente.
Use el BusinessKey para buscar la Tabla de Dimensión del Cliente del Cliente antes de insertar la transacción en la tabla de datos.
EDITAR
Si sus nuevos datos de clientes se incluyen con la transacción, busque una manera de extraer datos de clientes y enrutarlos al DW antes de la transacción.
ACTUALIZAR:
Cargue Dimcustomer primero, decida sobre BusinessKey, para que la dimensión se vea como:
CustomerKey = 12345 (auto-incremented)
CustomerBusinessKey = john_smith_101 (must uniquely identify the John Smith)
CustomerFirstName = John
CustomerLastName = Smith
Durante el proceso de carga de dimensiones, debe segregar filas entrantes en dos transmisiones, clientes existentes y nuevos. Las filas de la transmisión del "cliente existente" actualizan la tabla DIM (Tipo 1 SCD), mientras que las filas de la transmisión del "nuevo cliente" se insertan. No debe haber duplicados en la corriente de filas que se están insertando; Puede lograr esto insertándolos en una tabla de puesta en escena y eliminando los duplicados allí, justo antes del inserto final en la tabla de dimensiones. También puede extraer duplicados y enrutarlos nuevamente en el proceso de carga para actualizar los registros de clientes; Pueden contener datos más nuevos, como números de teléfono actualizados o similares.
Una vez que el cliente está adentro, cargue hechos.
La tabla de hechos debería verse algo así como:
DateKey (PK)
CustomerKey
OrderNumber (PK)
Total
He usado la clave primaria compuesta de DateKey y el Number OrderNinter, lo que permite que la secuencia del número de pedido se reinicie de vez en cuando.
Durante el proceso de carga, modifique el registro de hechos para que se vea como:
DateKey CustomerBusinessKey OrderNumber Total
20100201 john_smith_101 111 500
20100301 john_smith_101 222 600
En este punto, necesitamos reemplazar el CustomerBusinessKey con el CustomerKey desde la tabla de dimensiones utilizando una búsqueda. Entonces, después de la búsqueda, la transmisión se vería como:
DateKey CustomerKey OrderNumber Total
20100201 12345 111 500
20100301 12345 222 600
Esto ahora se puede insertar en la tabla de hechos.
También he engañado un poco: no busqué una clave de fecha desde el dimdato y no busqué filas existentes en la tabla de hechos. Al cargar la tabla de hechos, puede buscar la combinación existente (DateKey, OrderNumer) antes de cargar, o puede dejarla a la clave principal para proteger los duplicados de nuevo, su elección. En cualquier caso, asegúrese de que falle un intento de volver a cargar los mismos datos en la tabla de hechos.