Como disponibilizar um banco de dados externo para o Views?

8

Há muita discussão aqui e em outros lugares sobre o uso de bancos de dados externos no Drupal. O que eu descobri disso é:

  • A melhor maneira de trabalhar com dados em uma tabela de banco de dados é usar o módulo Views. Instalei isso e comecei a usá-lo e achei ótimo trabalhar com uma tabela que adicionei ao banco de dados do site.
  • A maneira mais fácil de fazer com que o Views funcione com uma tabela que não foi criada pelo Drupal é com o módulo Dados. Este módulo trata qualquer tabela no banco de dados do site que não seja usada pelo Drupal como uma "tabela órfã" e permite que ela seja "adotada" com o clique de um botão.
  • O módulo "Assistente de tabela" aparentemente fornece uma maneira de fazer isso com tabelas que não estão no banco de dados do site. Mas esse módulo não está disponível para o Drupal 7.
  • O arquivo "settings.php", na seção "Configurações do banco de dados", possui documentação detalhada sobre como definir bancos de dados adicionais com os quais o site pode trabalhar. Mas quando um banco de dados é definido dessa maneira, suas tabelas não aparecem na lista de tabelas órfãs no módulo Dados.

A alteração que fiz na definição do banco de dados no arquivo "settings.php" de um dos meus sites é:

$databases = array ( 'default' => array ('default' => array ( 'database' => 'db_local', 'username' => 'db_local', 'password' => '_________', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ), 'extra' => array ('default' => array ( 'database' => 'db__extra', 'username' => 'db_admin', 'password' => '_________, 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ), );

Eu tenho uma tabela que quero usar em mais de um site na minha instalação de vários sites. Isso significa que eu preciso ter a tabela em um banco de dados acessível a cada site. De acordo com a leitura que fiz, minhas opções para fazer isso são:

  1. Melhor, se possível: Descubra que existe uma maneira de fazer com que o módulo Data reconheça tabelas no banco de dados adicional definido em "settings.php", para que possa adotá-las.
  2. Use prefixos de tabela para permitir que todos os sites usem um banco de dados.
  3. O módulo “ Forena Reports ” parecia fazer exatamente o que eu precisava, mas quando o instalei, não consegui fazê-lo funcionar. Enviei a edição 2475645 e não posso fazer muito mais a menos que haja uma correção para esse problema.
  4. Escreva meu próprio módulo para dar ao Views acesso ao banco de dados adicional definido em "settings.php".
  5. Instale o Drupal 6 com o Assistente de tabela e use-o para obter Views para ver minha tabela externa e, de alguma forma, pegue o resultado disso e coloque-o no Drupal 7. (Isso foi sugerido em algumas postagens).
  6. Siga o procedimento em https://drupal.stackexchange.com/a/3321/45991 , que começa com a instalação de um patch e parece exigir também a criação do meu próprio módulo.
  7. Também observei os módulos Feeds, Feeds SQL, Views XML Backend e Migrate, mas nenhum deles diz que pode conectar um banco de dados externo ao Views. Estou esquecendo de algo? Um deles é a solução certa?

A opção 2 não é prática porque resultaria em um enorme banco de dados com centenas de tabelas que seriam muito difíceis de gerenciar. Eu tenho feito grandes progressos ao iniciar o Drupal, mas não sinto a tarefa de 4, 5 ou 6. Existe alguma possibilidade de algo como a opção 1 funcionar? Ou existe outra maneira de fazer com que o Views funcione com uma tabela fora do banco de dados do site sem poder escrever meu próprio módulo?

Dois detalhes adicionais: A primeira tabela com a qual preciso trabalhar é bastante grande, com mais de 6.000 linhas e cerca de 20 colunas. Não há intenção de dar aos visitantes acesso ao site no banco de dados, exceto pelas informações extraídas dele para o conteúdo da página.

Obrigado pela ajuda.

NewSites
fonte

Respostas:

2

Eu acho que o módulo Forena faz exatamente o que você precisa . Acho que seu problema de instalação é apenas uma solicitação de suporte, não algo que requer uma "correção". Depois de resolver isso, você terá a opção de sim ou não usar a integração de visualizações também.

O problema do Forena que você criou está muito bem documentado (ótimo trabalho!). Mas em nenhum lugar diz algo sobre as permissões que você concedeu (o que me faz acreditar que você pode estar perdendo algumas das permissões necessárias). Então, aqui está uma tentativa de resolver isso:

  • Você pode explicar brevemente quais das permissões relacionadas ao Forena (necessárias) que você concedeu?

  • As permissões necessárias do Forena são explicadas no Guia de instalação que acompanha o Forena ? FYI: aqui está uma citação de (parte dela):

    O Forena permite muita granularidade no que diz respeito a relatar autorizações relacionadas, usando os recursos de administração padrão do Drupal para conceder permissões às funções. A lista de permissões do Drupal relacionadas ao Forena que podem ser concedidas pode ser um pouco impressionante no começo. Porque existem 3 entradas para cada fonte de dados definida e o Forena baunilha já vem com 3 fontes de dados.

    Para recuperar este guia em seu próprio site, basta navegar para /reports/help.setup

Essas permissões para acessar os "dados" são originalmente retidas. Isso ocorre por design, porque o Forena também é bastante sensível a qualquer coisa relacionada à concessão de acesso aos dados via Forena. O que você não gostaria que acontecesse é que, simplesmente instalando e configurando o Forena (sem permissões de administrador), você pode usá-lo como uma solução alternativa para acessar dados protegidos.

Observe também que, além das permissões no nível de uma fonte de dados inteira, você tem a opção de refinar ainda mais as permissões necessárias para blocos de dados específicos (= consultas SQL personalizadas). Para isso, basta especificar as permissões necessárias (Drupal) na instrução SQL (os detalhes da sintaxe estão incluídos nos guias do Forena). Uma maneira típica de usar isso é proteger o acesso a colunas com dados confidenciais.

Divulgação: sou co- mantenedor deste módulo,
espero que isso não viole a política de autopromoção do site .

Pierre.Vriens
fonte
Obrigado por isso. Quando percebi pela primeira vez na Instalação, não notei que havia cinco permissões que não foram concedidas a ninguém. Eu agora os concedi ao administrador (ou seja, eu). O documento de instalação não diz por que essas permissões são originalmente retidas e se existe um motivo para não concedê-las ao administrador. No entanto, agora tenho essas fontes de dados, então isso resolveu esse problema. Existe um motivo pelo qual você respondeu aqui em vez de no problema que enviei?
NewSites
Ótimo para ler o progresso! De alguma forma, compensa o "voto negativo" da minha resposta ... FYI: Também respondi através da fila de problemas agora. Então agora que "isso resolveu o problema", isso significa que você considera Forena de fato como "a" resposta à sua pergunta (que ainda não era como no ponto 3 do OP)? FYI: Tentarei atualizar minha resposta aqui para explicar brevemente o "por que essas permissões foram originalmente negadas", o que é uma boa pergunta extra!
Pierre.Vriens
Não fui eu quem menosprezou sua resposta. Agora aceitei a sua como <u> a resposta </u> e a votei de forma positiva (que infelizmente a devolve apenas a zero).
NewSites
Hm, eu não estava assumindo que o @NewSites tinha voto negativo, na verdade eu aprendi a conviver com votos negativos. Pessoalmente, não gosto de votar em geral e ignoro qualquer um deles onde não haja comentários para explicá-los. Mas é claro que "votar" e "aceitar" é muito apreciado. E, é claro, sabendo que existe outro usuário do Drupal que parece ter descoberto Forena agora, caminho a seguir! Certifique-se de arquivar (suporte?) Problemas quando apropriado (para ver também o suporte no trabalho ...).
Pierre.Vriens
2

Fiz isso com sucesso de várias maneiras diferentes:

Use uma exibição SQL para criar uma tabela virtual no db_localque se refere à tabela correspondente db__extra. A consulta a ser criada seria algo assim:

USE db_local; CREATE VIEW some_table AS SELECT * FROM db__extra.some_table;

Você pode então se referir a essa tela SQL como se fosse uma tabela nativa no banco de dados Drupal, e nem precisa adicionar o banco de dados externo em settings.php. Observe que isso pode não ser compatível com o módulo Data (consulte https://www.drupal.org/node/1973806 ), mas você deve ser capaz de descrever o SQL View para o módulo Drupal Views implementando hook_views_data()e parando de usar o módulo Data .

Aqui está outra possibilidade: use prefixos de tabela seletiva para induzir o Drupal a reescrever {some_table} em db__extra.some_table. Isso não é o mesmo que prefixar suas tabelas Drupal.

Sua $databasesconfiguração seria assim:

$databases = array ( 'default' => array ('default' => array ( 'database' => 'db_local', 'username' => 'db_local', 'password' => '_________', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => array( 'some_table' => 'db__extra.', ), )) );

Mais uma vez, não tenho certeza se isso é compatível com o módulo Dados, pois não o uso. Mas deve funcionar com o Views se você se implementar hook_views_data().

Les Lim
fonte
Você diz nos dois métodos que eu preciso implementar <code> hook_views_data () </code>. Isso não requer a gravação de um módulo? De qualquer forma, tentei a definição do banco de dados no seu segundo método. Não fez com que a tabela em "db_extra" aparecesse na lista de tabelas órfãs do módulo Dados. No seu primeiro método, onde coloco a consulta que você sugeriu (se não estiver em um módulo personalizado)?
NewSites
Se você estiver criando uma Visualização SQL, precisará executar a consulta CREATE VIEW uma vez diretamente no MySQL. Não precisa ser reexecutado.
Les Lim
Me desculpe, ainda não entendo. Onde você deseja que eu execute esta consulta? No phpMyAdmin? Isso me dará algo que eu possa usar no Views? Procurei por "visualização SQL" no Drupal.org e obtive drupal.org/project/sql_views , que não possui download de produção e cujo documento em drupal.org/node/2458947 diz que preciso implementar um gancho (o que suponho que significa escrever um módulo) para informar o módulo Views sobre minha visualização SQL. Portanto, parece que o que você está sugerindo exige a criação de um módulo (para o qual não me sinto preparado) e, se não, não entendo o que você está me dizendo para fazer.
NewSites