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 / 6830
Accepted
Chris Betti
Chris Betti
Asked: 2011-10-15 08:26:17 +0800 CST2011-10-15 08:26:17 +0800 CST 2011-10-15 08:26:17 +0800 CST

Carregar campos de vários valores no Solr por meio de arquivo simples e, possivelmente, preservar a posição de valor nesses campos

  • 772

Um projeto de web de hobby meu usa dados de muitas fontes, algumas planas, outras altamente normalizadas. Meu processo ETL resume todas as fontes em uma tabela lógica (que em breve incluirá alguns campos com vários valores). A tabela final é carregada em alguns ambientes de apresentação de dados separados (com base em Solr ou MySQL). Meu ambiente Solr exige um modelo desnormalizado (ele apenas carrega a tabela de saída transformada diretamente como um arquivo simples) e meus ambientes MySQL podem usar um modelo altamente normalizado (o carregamento envolve alguma normalização). Ambos os processos de carregamento do ambiente de apresentação são muito simples agora.

Para facilitar o uso de arquivos simples em todo o meu processo ETL (importante porque uso uma variedade de ferramentas para resumir e limpar os dados e fazer uso intenso de pipelines por motivos de desempenho), consegui reduzir campos com vários valores de minhas fontes para um único campo usando agrupamento ou seleção de melhor candidato.

Agora estou projetando os campos de vários valores que preciso preservar em minha saída. O processo de carregamento do MySQL é fácil porque já o normalizei com esses campos em mente. Mas estou tendo problemas com a parte do Solr:

  • Não tenho experiência com campos "multiValued" no Solr
  • o processo de carregamento de arquivo simples é atualmente muito simples, gostaria de preservar o máximo de simplicidade possível
  • meus campos multiValor devem ser coordenados por posição dentro de um registro, por exemplo
    • registro X, campo A, posição 3 é uma licença #
    • registro X, campo B, posição 3 é o estado correspondente para aquela licença

Como posso projetar meu ETL para os campos de vários valores que pretendo preservar?

Algumas ideias que tive e que estou encontrando obstáculos:

  • introduzir um registro "aditivo" usando a mesma chave de documento que ocupa sua própria linha no arquivo simples
    • não faço ideia por onde começar neste
  • pré-montar valores em um único campo, analisar usando Solr, por exemplo
    • {[[123],[456]];[[MA],[CA]]} -> "123,MA;456,CA"
    • não tenho certeza se o Solr pode descompactar uma string e preservar as informações de posição apropriadamente nos campos

Não consegui encontrar informações sobre como coordenar valores de campo multiValor de campos separados. Permitindo o fato de que isso pode não ser suportado nativamente pelo Solr, ainda estou interessado em soluções para carregar campos multiValued no Solr de uma maneira quase tão simples quanto carregar um arquivo simples.

normalization etl
  • 1 1 respostas
  • 3237 Views

1 respostas

  • Voted
  1. Best Answer
    Chris Betti
    2011-10-27T19:10:10+08:002011-10-27T19:10:10+08:00

    Obtendo dados multiValor no Solr via CSV:

    A documentação do solr descreve uma função "split" em UpdateCSV. Essencialmente, ele analisa um valor de campo usando um segundo analisador CSV. Consulte Solr-UpdateCSV-split . Os parâmetros se parecem com isso (ajuste o nome do campo, separador e encapsulador conforme necessário):

    f.fieldA.split=true&f.fieldA.separator=%2C&f.fieldA.encapsulator='
    

    Obtendo dados multiValor de campos separados para manter a posição:

    Desde que fiz essa pergunta, fiz algumas leituras sobre modelos dimensionais. Parece que o que eu estava tentando fazer é um design ruim, porque coloca muitas expectativas no aplicativo, muita complexidade no warehouse ou ambos.

    Ao tentar preservar as relações entre dois valores de campo em um único registro, é melhor armazená-los separadamente e também juntos. Aqui está uma comparação da minha entrada anterior com a nova entrada:

    Antiga entrada CSV:

    name|licenseState|licenseType
    Josh|MA,CA|123,456
    Fred|MD,OH|789,123
    

    Entrada CSV transformada:

    name|licenseState|licenseType|licenseStateType
    Josh|MA,CA|123,456|MA123,CA456
    Fred|MD,OH|789,123|MD789,OH123
    

    Dessa forma, seu aplicativo pode usar os valores de dimensão licenseState e licenseType independentemente, ou pode usar os valores de dimensão licenseStateType, tudo sem exigir aplicativos complicados ou lógica de depósito.

    • 2

relate perguntas

  • Questão do banco de dados do dicionário multilíngue

  • Coluna duplicada para consultas mais rápidas?

  • Como posso usar um ETL?

  • As formas normalizadas superiores sempre atendem aos critérios das inferiores?

  • Recursos de exercícios de normalização

Sidebar

Stats

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

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

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

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

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 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
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +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
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +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