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?

¿Fue útil?

Solución

Sin embargo, es posible que haya entendido el problema:

  1. 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.

  2. Una tabla de dimensiones debe tener una PK de incremento automática.

  3. 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).

  4. 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.

  5. Una fila de transacciones entrante también debe tener el campo de clientes de clientes del cliente, así es como identificamos al cliente.

  6. 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top