Pergunta

Estou usando o Talend para preencher um data warehouse. Meu trabalho está escrevendo dados do cliente em uma tabela de dimensões e dados de transação para a tabela de fatos. A chave substituta (p_key) na tabela de fatos é a incrementação automática. Quando insiro um novo cliente, preciso da minha tabela de fatos para refletir o ID do cliente relacionado.

Como mencionei, meu P_KEY é auto_incrementing automaticamente, não posso apenas inserir um valor arbitrário para o P_KEY.

Algum pensamento sobre como posso inserir uma linha na minha tabela de dimensões e ainda recuperar a chave primária para referência no meu registro de fatos?

Mais informações:

E se os dados recebidos não forem normalizados? Por exemplo, tenho um CSV com os seguintes dados:

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, quero que as informações do cliente apareçam na tabela de dimensões e nos dados da transação na tabela de fatos:

dimension
101  john smith

fact
111       1/3/2010
222       1/3/2010

Como você mencionou, a chave da tabela de dimensões será incremento automático. A tabela de fatos precisa fazer referência a essa chave. Como você cria o trabalho ETL para que a chave substituta seja devolvida após uma inserção?

Além disso, se os dados do cliente forem deduzidos (como acima), como você lida com as teclas?

Foi útil?

Solução

No entanto, posso ter entendido seu problema:

  1. Uma tabela de fatos pode ou não ter um PK de incrementação automática, geralmente uma tabela de PK em uma fato é um composto de várias tabelas de dimensão de referência do FKS.

  2. Uma tabela de dimensão deve ter um PK de incrementação automática.

  3. Um novo cliente deve "ter pousar" na tabela de dimensões do cliente antes que o fato da transação atinja o DW (ou pelo menos a tabela de fatos).

  4. Uma tabela de dimensões deve ter um BusinessKey que identifique exclusivamente um cliente - como email, nome completo + pino ou similar.

  5. Uma linha de transação recebida também deve ter o campo BusinessKey do cliente - é assim que identificamos o cliente.

  6. Use o BusinessKey para procurar o cliente primário da tabela de dimensões do cliente antes de inserir a transação na tabela de fatos.

EDITAR

Se os dados do seu novo cliente estiverem agrupados com a transação, encontre uma maneira de extrair dados do cliente e direcioná -los para o DW antes da transação.

ATUALIZAR:

Carregue o Dimcustomer primeiro, decida sobre o BusinessKey - para que a dimensão seria:

CustomerKey = 12345 (auto-incremented)
CustomerBusinessKey = john_smith_101 (must uniquely identify the John Smith)
CustomerFirstName = John
CustomerLastName = Smith

Durante o processo de carregamento da dimensão, você deve segregar linhas de entrada em dois fluxos, clientes existentes e novos. As linhas da atualização do fluxo de "cliente existente" da tabela Dim (SCD tipo 1), enquanto as linhas do fluxo "novo cliente" são inseridas. Não deve haver duplicatas no fluxo de linhas que estão sendo inseridas; Você pode conseguir isso inserindo -os em uma tabela de preparação e removendo duplicatas lá, pouco antes da inserção final na tabela de dimensões. Você também pode extrair duplicatas e direcioná -las de volta ao processo de carregamento para atualizar os registros do cliente; Eles podem conter dados mais recentes - como números de telefone atualizados ou similares.

Quando o cliente estiver, carregue fatos.

A tabela de fato deve parecer algo como:

DateKey     (PK)
CustomerKey
OrderNumber (PK)
Total

Eu usei a chave primária composta do DateKey e do OrderNumber, permitindo que a sequência do número do pedido seja redefinida de tempos em tempos.

Durante o processo de carregamento, modifique o registro de fatos para parecer algo como:

DateKey CustomerBusinessKey OrderNumber Total
20100201  john_smith_101       111       500
20100301  john_smith_101       222       600

Nesse ponto, precisamos substituir o cliente -pressionismo pelo cliente da tabela de dimensões usando uma pesquisa. Então, depois da pesquisa, a corrente seria:

DateKey CustomerKey OrderNumber Total
20100201 12345       111         500
20100301 12345       222         600

Agora isso pode ser inserido na tabela de fatos.

Eu também trapacei um pouco - não procurei uma chave de data do Dimdate e não procurei linhas existentes na tabela de fato. Ao carregar a tabela de fatos, você pode procurar uma combinação existente (DateKey, Ordernumer) antes de carregar, ou pode deixá -la para a chave primária para proteger novamente duplicações - sua escolha. De qualquer forma, certifique-se de que uma tentativa de recarregar os mesmos dados na tabela de fatos falhe.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top