Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Erro ao fazer carga na Tabela Fato 001

Ocorreu um erro enquanto eu fazia a carga da Tabela Fato001 da aula do curso: "ETL com Integration Services: Transformação de dados".

Ver imagem Imagem do erro durante o processo de carga da Fato001.

A mensagem de erro da saída é a seguinte: Inicialização do pacote SSIS "C:\Users\Jackson\Documents\Gráficos\Projeto BI\Projetos\DatawarehouseSUCOS\CargaDatawarehouse\CargaFatos.dtsx". Informações: 0x4004300A em Carga da Tabela Fato_001, SSIS.Pipeline: A fase de validação está começando. Informações: 0x4004300A em Carga da Tabela Fato_001, SSIS.Pipeline: A fase de validação está começando. Aviso: 0x80049304 em Carga da Tabela Fato_001, SSIS.Pipeline: Aviso: não foi possível abrir a memória global compartilhada para comunicação com a DLL de desempenho; os contadores de desempenho de fluxo de dados não estão disponíveis. Para resolver, execute este pacote como administrador ou no console do sistema. Aviso: 0x80047076 em Carga da Tabela Fato_001, SSIS.Pipeline: A coluna de saída "DATA_FATO" (179) na saída "Saída de Origem OLE DB" (178) e componente "Origem OLE DB" (167) não é usada subsequentemente na tarefa Fluxo de Dados. A remoção dessa coluna de saída não utilizada pode melhorar o desempenho da tarefa Fluxo de Dados. Informações: 0x40043006 em Carga da Tabela Fato_001, SSIS.Pipeline: A fase de Preparação para Execução está começando. Informações: 0x40043007 em Carga da Tabela Fato_001, SSIS.Pipeline: A fase de Pré-execução está começando. Informações: 0x4004300C em Carga da Tabela Fato_001, SSIS.Pipeline: A fase de Execução está começando. Erro: 0xC0202009 em Carga da Tabela Fato_001, Inserir Destino [130]: Código de Erro SSIS DTS_E_OLEDBERROR. Erro OLE DB. Código de erro: 0x80040E2F. Um registro OLE DB está disponível. Origem: "Microsoft SQL Server Native Client 11.0" Resultado: 0x80040E2F Descrição: "A instrução foi finalizada.". Um registro OLE DB está disponível. Origem: "Microsoft SQL Server Native Client 11.0" Resultado: 0x80040E2F Descrição: "A instrução INSERT conflitou com a restrição do FOREIGN KEY "FK_Fato_001_Dim_Tempo". O conflito ocorreu no banco de dados "DW_SUCOS", tabela "dbo.Dim_Tempo", column 'Cod_Dia'.". Erro: 0xC0209029 em Carga da Tabela Fato_001, Inserir Destino [130]: Código de Erro SSIS DTS_E_INDUCEDTRANSFORMFAILUREONERROR. Falha de "Inserir Destino.Entradas[Entrada de Destino OLE DB]" devido ao código de erro 0xC020907B e a disposição da linha de erro em "Inserir Destino.Entradas[Entrada de Destino OLE DB]" especifica falha no erro. Ocorreu um erro no objeto especificado do componente especificado. Mensagens de erro podem ter sido postadas antes com mais informações sobre a falha. Erro: 0xC0047022 em Carga da Tabela Fato_001, SSIS.Pipeline: Código de Erro SSIS DTS_E_PROCESSINPUTFAILED. Falha do método ProcessInput no componente "Inserir Destino" (130) com o código de erro 0xC0209029 durante o processamento da entrada "Entrada de Destino OLE DB" (143). O componente identificado retornou um erro do método ProcessInput. Esse erro é específico do componente, mas é fatal e fará com que a execução da tarefa de Fluxo de Dados seja interrompida. Mensagens de erro podem ter sido postadas antes dessa com mais informações sobre a falha. Informações: 0x40043008 em Carga da Tabela Fato_001, SSIS.Pipeline: A fase Pós-execução está começando. Informações: 0x4004300B em Carga da Tabela Fato_001, SSIS.Pipeline: "Inserir Destino" gravou 0 linhas. Informações: 0x40043009 em Carga da Tabela Fato_001, SSIS.Pipeline: A fase de limpeza está começando. Falha na tarefa: Carga da Tabela Fato_001 Aviso: 0x80019002 em CargaFatos: Código de Aviso SSIS DTS_W_MAXIMUMERRORCOUNTREACHED. O método Execution foi bem-sucedido, mas o número de erros aumentou (3) e alcançou o máximo permitido (1); resultando em falha. Isso ocorre quando o número de erros alcança o número especificado em MaximumErrorCount. Altere MaximumErrorCount ou corrija os erros. Pacote SSIS "C:\Users\Jackson\Documents\Gráficos\Projeto BI\Projetos\DatawarehouseSUCOS\CargaDatawarehouse\CargaFatos.dtsx" concluído: Falha.

Tentei encontrar o problema e percebi o seguinte: Os campos da tabela fato001 que criei durante a aula do curso: "ETL com Integration Services: Modelo de dados", não estão habilitadas a aceitar campos com valores em branco para chave primária.

Ver imagem. Insira aqui a descrição dessa imagem para ajudar na acessibilidadePorém, no arquivo (Fontes_DB.BAK) baixado da aula: Carga da Fato001, estes campos vêm com permisão de que sejam gravados dados em branco.

Ver imagem. Insira aqui a descrição dessa imagem para ajudar na acessibilidade Não sei se este é o problema.

Aguardo interação.

Grato

6 respostas

Oii Lucas, tudo bem?

O erro é esse aqui:

A instrução INSERT conflitou com a restrição do FOREIGN KEY "FK_Fato_001_Dim_Tempo". O conflito ocorreu no banco de dados "DW_SUCOS", tabela "dbo.Dim_Tempo", column 'Cod_Dia'.". Erro: 0xC0209029 em Carga da Tabela Fato_001,

Que consiste no conflito de FK entre o Cod_Dia da Dim_Tempo e Cod_Dia da Fato 001. O período selecionado na Dim_Tempo não corresponde com a seleção de período na consulta :

SELECT * FROM TAB_FATO001 WHERE YEAR(DATA_FATO) >= '2014' AND MONTH(DATA_FATO) >= '1' AND YEAR(DATA_FATO) <= '2014' AND MONTH(DATA_FATO) <= '1'

Então eu sugiro que altere o ano dentro dos parâmetros da Carga Fato para o ano que foi carregado ou nos parâmetros da Dimensão Tempo carregue de 2013 a 2015.

Qualquer coisa me fala, tá bom? :)

Oi Maria, tudo bem.

Obrigado pela resposta. Entendi sua explicação e fiz como sugeriu: Na tabela dimensão tempo eu carreguei um período maior que compreendeu os valores de tempo da planilha fato 001, e ai funcionou a carga do tempo. Porém, aconteceu um outro problema ainda na carga da Fato001.

Esse aqui foi o erro que retornou agora: 0x80040E2F Descrição: "A instrução INSERT conflitou com a restrição do FOREIGN KEY "FK_Fato_001_Dim_Cliente". O conflito ocorreu no banco de dados "DW_SUCOS", tabela "dbo.Dim_Cliente", column 'Cod_Cliente'.".

Esse novo erro, bem como o anterior da dim_tempo, já estavam previstos na sequência da aula no curso, mas eu não tinha visto isso. Bom, como não ficou claro como resolver esse novo erro que está retornando agora, precisarei da sua ajuda para saber como fazer para corrigir este também.

Eu estava vendo que essa carga da Fato001 gera 1.599 linhas, e ai foram carregadas no DW_Suco 99 linhas, e as demais 1.500 não foram carregadas.

Maria, aguardo sua ajuda com este erro. Desde já agradeço :)

Carga realizada de 99 linhas

Oii Lucas,

Esse erro de FK pode ser várias coisas:

  • campo criado com tipo errado
  • erro de digitação
  • nome da tabela diferente
  • chave primária não declarada

Então, vou pedir que crie novamente a dimensão tempo e recarregue os dados. Use esse código para recriar a tabela:

CREATE TABLE [dbo].[Dim_Cliente]
(
    [Cod_Cliente] NVARCHAR(50) NOT NULL PRIMARY KEY, 
    [Desc_Cliente] NVARCHAR(200) NULL, 
    [Cod_Cidade] NVARCHAR(50) NULL, 
    [Desc_Cidade] NVARCHAR(200) NULL,
    [Cod_Estado] NVARCHAR(50) NULL, 
    [Desc_Estado] NVARCHAR(200) NULL,
    [Cod_Regiao] NVARCHAR(50) NULL, 
    [Desc_Regiao] NVARCHAR(200) NULL,
    [Cod_Segmento] NVARCHAR(50) NULL, 
    [Desc_Segmento] NVARCHAR(200) NULL
)

Provavelmente, as outras 1.500 linhas não foram carregadas devido ao erro de FK da Dim_Cliente.

Me avise qualquer coisa, tá bom? :)

Oi Maria, Boa tarde,

Eu descobri qual era o problema.

Eu fiz uma extração SQL da TAB_Fato001 da Fontes_DB para ver quais eram os clientes que estavam nessa fato que eu queria subir para a minha fato_001 da DW_Sucos. Ai eu percebi que 2 clientes não haviam sido carregados na dimensão cliente quando eu fiz a carga dessa dimensão.

Os dois clientes foram: Clientes que não haviam sido carregados anteriormente

No CSV regiões do estados eu vi que para a cidade de Salvador o estado abreviado estava "BH", e pensei que deveria ser um erro de digitação e o correto seria "BA". Então, eu alterei de "BH" para "BA", porém, não fiz a mesma alteração na planilha Clientes. Assim quando eu carreguei a dimensão esses dois clientes não foram carregados porque não deu matching de estado.

Corrigi na planilha clientes também o estado de BH para BA, e ai sim, a carga da dimensão ficou completa e as cargas das tabelas fato também deram certo.

Antes apenas 2 tabelas fato haviam sido carregadas pois elas não precisavam da dimensão cliente. Mas agora todas estão carregadas.

Maria, isso quer dizer que aquelas suspeitas sobre erros na criação da dimensão cliente não causavam nenhum problema, pois o problema estava nos valores carregados.

:) Obrigado pela ajuda e atenção.

Oii Lucas,

Caramba, nunca imaginaríamos que poderia ser isso. Que bom conseguiu resolver.

Obrigada pela paciência. Qualquer coisa estamos sempre por aqui :)

solução!

Oi Maria =)

Quando você me ajudou com o primeiro problema que foi a dimensão tempo não ter o mesmo período que eu estava tentando carregar na carga da fato001, isso me fez querer procurar se não havia o mesmo problema com a dimensão cliente. Se não havia faltado a carga de algum cliente da Dim_cliente e por isso não estava sendo carregada na fato, por isso tentei esse caminho que no fim das contas era realmente onde havia o problema.

Questão resolvida ;)

Quem sabe no próximo curso que farei OLAP com SQL Server: Construção do DataWarehouse, vamos interagir novamente e buscar outras soluções.

Um abraço, até logo!