AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 339312
Accepted
questionto42
questionto42
Asked: 2024-05-07 20:10:14 +0800 CST2024-05-07 20:10:14 +0800 CST 2024-05-07 20:10:14 +0800 CST

Como evito passar uma linha com NULL em um dos valores de coluna correspondentes para as linhas sem correspondência na ferramenta de suplemento KingswaySoft SSIS "Premium Lookup"?

  • 772

Mirar

Eu trabalho com a ferramenta complementar KingswaySoft SSIS "Premium Lookup", mas acho que a mesma pergunta pode surgir com a ferramenta integrada SSIS "Lookup".

Tento combinar um par de colunas duplas "first_name1" e "name1" e "first_name2" e "name2" e ambos os lados 1 e 2 às vezes têm valores NULL.

Se uma das colunas de pesquisa for NULL, toda a linha será passada para a saída "incomparável". A ferramenta Premium Lookup tem a seguinte aparência em um DFT: A entrada é passada para 32 linhas sem correspondência, pois um dos dois lados tem um valor NULL ou porque há um valor NULL em alguma outra coluna correspondente:

insira a descrição da imagem aqui

Meu objetivo é continuar combinando as colunas quando um NULL em uma delas for encontrado, para que a pesquisa continue e tente combinar as outras colunas também, enquanto a correspondência NULL deve ser:

  • ou 0% de correspondência
  • ou NULL e não é considerado a pontuação média.

Ambos seriam bons, pois tenho mais algumas colunas que geralmente combinam bem.

Peço um máximo de 5 correspondências e descarto qualquer correspondência da saída que tenha o mesmo ID da entrada primária, pois desejo encontrar apenas as entradas duplas. Portanto, devem ser mostrados até 5 "próximos vizinhos" para qualquer entrada que possa ter duplicatas nos dados mestre:

insira a descrição da imagem aqui

Por exemplo, se o primeiro nome não for conhecido em ambos os lados e até mesmo no campo de entrada primário, eu ainda gostaria de obter uma correspondência nas outras colunas, como "aniversário" ou "sexo".

O que eu tentei até agora

Já tentei substituir todos os valores NULL por uma string vazia para evitar NULL. No entanto, a pesquisa par difusa deve corresponder a pelo menos 1 por cento, e 1% não pode ser alcançado se você tentar comparar algo com uma string vazia, pois é 0%.

Lenda:

  • Alemão/Inglês: Vorname = primeiro_nome, Nachname = nome, Geburtsdatum = aniversário, Geschlecht = sexo
  • Pesquisa: lado 1: [1], lado 2: [2]
  • Lado primário: [0] (desejo combinar as duas colunas de pesquisa com a mesma coluna primária duas vezes para copiar a coluna Nachname_Vergleich para uma segunda coluna Nachname_Vergleich2 e fazer o mesmo com a coluna Vorname)

insira a descrição da imagem aqui

A caixa de seleção "Tratar String Vazia como NULL" trava a Pesquisa Premium em qualquer entrada

Também tentei contornar isso definindo essas strings vazias ''como NULL novamente pela própria ferramenta, mas essa configuração trava a pesquisa de qualquer entrada, seja NULL ou não, testada também durante algumas outras tarefas. Portanto, há um bug ou não entendo a configuração, mas pego essa caixa de seleção:

Configurações avançadas de comparação - v22.1 (22.1.0.30606) -> "Tratar string vazia como NULL"

insira a descrição da imagem aqui

Sempre que você o executa com uma caixa de seleção marcada, ele falha com três erros:

[Premium_Lookup_trying_to_match_NULLs [74]] Erro: Ocorreu um erro com a seguinte mensagem de erro: "System.NullReferenceException: referência de objeto não definida para uma instância de um objeto. (SSIS Productivity Pack, v22.1.0.30606 - DtsDebugHost, v13.0.4495. 10)".

[Premium_Lookup_trying_to_match_NULLs [74]] Erro: Premium_Lookup_trying_to_match_NULLs não conseguiu processar os dados.

[SSIS.Pipeline] Erro: Código de erro SSIS DTS_E_PROCESSINPUTFAILED. O método ProcessInput no componente "Premium_Lookup_trying_to_match_NULLs" (74) falhou com o código de erro 0xC02090F9 ao processar a entrada "Lookup Table Input" (79). O componente identificado retornou um erro do método ProcessInput. O erro é específico do componente, mas é fatal e fará com que a tarefa Data Flow pare de ser executada. Pode haver mensagens de erro postadas antes disso com mais informações sobre a falha.

E mesmo que funcionasse, não ajudaria, pois apenas substituiria as strings vazias por um NULL, o que provavelmente passaria as linhas para a saída sem correspondência novamente como era no início, para que nada fosse ganho com a substituição de NULL:s com strings vazias no início.

Gambiarra

Portanto, não obtenho nenhuma correspondência da ferramenta "Pesquisa Premium" enquanto a pesquisa funciona assim que defino a correspondência das duas colunas como "ignorar".

Minha solução alternativa é substituir o lado 1 pelo lado 2 se o lado 1 for NULL e, em seguida, ele for executado como deveria, mas isso também diminui uma chance de correspondência se ambos os lados estiverem preenchidos, e eu quero obter as duas pontuações correspondentes se as duas colunas estão preenchidas.

Portanto, a solução alternativa é apenas a segunda melhor maneira, já que desejo que a pesquisa simplesmente ignore NULL:s ou dê a eles 0 pontos de pontuação, já que a média dos pontos de pontuação ausentes é a média do conjunto de correspondências encontrado.

Pergunta

Para uma pesquisa que tem dois lados em relação a uma entrada primária que tem apenas um lado, quero combinar ambos os lados da pesquisa por conta própria com a entrada primária. Não quero apenas substituir o lado de pesquisa 1 pelo lado de pesquisa 2 se houver um NULL. Como posso fazer isso e ainda pular NULL:s ou dar a eles 0 pontos de pontuação em vez de perder as linhas para a saída incomparável, como parece acontecer aqui?

ssis
  • 1 1 respostas
  • 21 Views

1 respostas

  • Voted
  1. Best Answer
    questionto42
    2024-05-08T03:13:24+08:002024-05-08T03:13:24+08:00

    TLDR

    A ferramenta Premium Lookup pode lidar com valores NULL.

    Reconstrua todo o fluxo de dados excluindo tudo, inclusive a caixa Premium Lookup, mesmo que pareça saber o que você alterou nesse meio tempo. No novo fluxo de dados, tudo funcionou bem. Certifique-se de ter as strings que você tenta corresponder exatamente no mesmo formato (maiúsculas e minúsculas, espaços em branco e assim por diante, o que você pode fazer marcando a caixa de seleção na Pesquisa Premium ou no SQL).

    A solução "rápida" é reconstruir tudo e cuidar dos formatos

    Houve uma solução rápida para isso, aqui está o caminho de aprendizagem.

    Eu me perguntei por que poderia obter pontuações correspondentes se correspondesse nas colunas "aniversário" ou "sexo", mas não em "primeiro nome" ou "nome. Foi desde o padrão de um novo par correspondente no "Editor de componente de pesquisa Premium" nem sempre é o mesmo. Se eu corresponder ao aniversário de char(8), o padrão é 75% da velocidade e as duas primeiras caixas de seleção marcadas:

    insira a descrição da imagem aqui

    Mas quando adicionei as colunas de nome, as "Configurações avançadas" padronizaram as duas segundas caixas de seleção marcadas e 0% de velocidade:

    insira a descrição da imagem aqui

    Quando fiz uma nova pesquisa do zero, o padrão era nada:

    insira a descrição da imagem aqui

    Eu tinha um padrão que não ignorava o caso, embora fosse necessário.

    Acontece que eu havia alterado as colunas para minúsculas no SQL apenas no lado da pesquisa, mas não no lado da entrada primária, por isso as colunas de nome do lado 2 não puderam corresponder. E como pensei que a mudança de ambos os fluxos de dados para letras minúsculas já estava feita, não verifiquei e supervisionei mesmo ao ler letras maiúsculas com frequência, já que mantenho uma coluna com o formato inalterado também.

    Pensando que já estava tudo em letras minúsculas, rolei apenas o "Limiar de Similaridade" para 1%:

    insira a descrição da imagem aqui

    insira a descrição da imagem aqui

    Portanto, se você não alterou suas colunas de texto para algum padrão, marque as outras duas caixas na parte superior. Defino a velocidade para 75% da melhor velocidade, conforme escolhido no outro padrão, já que essa pesquisa difusa não trata das estatísticas de 100%.

    insira a descrição da imagem aqui

    Uma vez feito isso, isso levará a pontuações para todas as colunas:

    • _similarity_side1.Geburtsdatum_INT_STR
    • _similarity_side1.Nachname_Vergleich
    • _similarity_side1.Vorname_Vergleich
    • _similarity_side2 Geburtsdatum_INT_STR
    • _similaridade_side2.sex
    • _similarity_side2.Nachname_Vergleich
    • _similarity_side2.Vorname_Vergleich

    E as estatísticas necessárias em geral, que são:

    • _average_similarity_score
    • _riqueza_pontuação
    • _riqueza_classificação
    • _confiança

    Assim, a ferramenta de pesquisa funciona como deveria, a pontuação média pode ser vista para todos mesmo que alguns valores sejam NULOS.

    insira a descrição da imagem aqui

    Mais uma vez, encontrei muitas linhas estranhas sem nenhuma pontuação ou com poucas pontuações e encontrei amostras nas quais eu sabia, por meio de uma pesquisa rápida, que devia haver uma correspondência, já que não havia nenhum valor NULL nelas. Marquei cada caixa em todo o fluxo de dados e, depois de reconstruir apenas algumas caixas, não houve nenhuma pontuação para uma configuração que tinha algumas pontuações antes da limpeza.

    Eu decidi que:

    1. limpe o texto já em SQL (isso não é totalmente necessário se você usar as opções Premium Lookup)
    2. reconstrua todo o fluxo de dados do zero (ISSO é necessário).

    Assim, 1.):

    cast(LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(lower(A.Nachname), 'ü','ue'), 'ö', 'oe'), 'ä', 'ae'), 'ß', 'ss'), '-', ''), '`', ''''), ' ', ''), 'á', 'a'), 'é', 'e'), 'ë', 'e'), 'í', 'i'), 'ó', 'o'), 'ú', 'u'))) as varchar(100)) AS Nachname_Vergleich
    

    Certifiquei-me de que isso fosse feito para todas as seis colunas que precisavam (1x2 para a entrada primária e 2x2 para a pesquisa).

    E 2.):

    Você já ouviu falar dessa série de TV, algo como “SSIS Crowd” ou algo assim? Algo como: você já tentou construir de novo e de novo?

    Resultado

    Fluxo de dados

    insira a descrição da imagem aqui

    Assim, 160 para 32 linhas significa que para todos os dados, os 5 primeiros do "_richness_rank" são mostrados.

    O que ainda não está no greenshot: você deve classificar a saída primeiro pelo seu "ID" e depois pelo "_richness_rank", pois a saída nem sempre é classificada, às vezes as classificações ficam fora do lugar.

    E você pode querer eliminar qualquer correspondência que tenha exatamente o mesmo ID e, portanto, tenha as mesmas entradas, o que neste fluxo de dados eliminaria 10 linhas das 32 linhas de "ID":

    insira a descrição da imagem aqui

    Saída da tabela (colunas de estatísticas)

    Vemos que às vezes o primeiro número é descartado, ou seja, apenas as 10 vezes que têm o mesmo ID de dados mestre na pesquisa. Eu também poderia eliminar essas linhas antes da pesquisa, mas acho bom saber se o ID está nos dados mestre ou não, o que fica claro apenas rolando. De qualquer forma, as 5 primeiras classificações são um número vago, e a primeira ou segunda classificação deve ser a única correspondência clara.

    insira a descrição da imagem aqui

    insira a descrição da imagem aqui

    • 0

relate perguntas

  • Desenvolvimento de BI em Microsoft BI

  • Projeto de datawarehouse: dimensão combinada de data e hora versus dimensões e fusos horários separados de dia e hora

  • Posso fazer o downgrade dos pacotes SSIS para serem executados em versões mais antigas do SQL

  • Encontre material para melhorias no Microsoft BI

  • A maneira mais simples de restringir uma tarefa de processo de execução do SSIS

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve