Eu trabalho em um escritório onde o SQL Server é a espinha dorsal de tudo o que fazemos, desde o processamento de dados até a limpeza e a substituição. Meu colega é especialista em escrever funções complexas e procedimentos armazenados para processar metodicamente os dados recebidos, para que possam ser padronizados e colocados em funcionamento em projetos de relatórios, visualizações e análises. Antes de começar aqui, eu tinha muito pouca experiência com SQL, além de escrever as consultas mais básicas. A grande maioria do meu trabalho de preparação para análises foi feita em R. Meu chefe insiste em que eu melhore minhas habilidades em SQL, embora pareça haver muito poucas atribuições que não possam ser feitas com mais eficiência e com muito menos linhas de código usando R pacotes como dplyr, data.table e tidyr (para citar alguns). Minha pergunta é - isso faz sentido?
Há algumas semanas, me deparei com a tarefa de obter uma lista de nomes de colunas para cada linha em uma tabela que atendesse a certos critérios e concatená-los em um vetor de strings. Havia um prazo apertado e, na época, eu estava enfrentando algum bloqueio e não conseguia entender o problema. Perguntei ao meu chefe, que por sua vez pediu ao meu colega para escrever um script TSQL para resolver o problema. Enquanto ele estava trabalhando nisso, descobri uma maneira de fazê-lo no R escrevendo uma função bastante simples e aplicando-a sobre o quadro de dados. Meu colega voltou com o roteiro cerca de duas horas depois. Havia pelo menos 75 linhas, incluindo duas aninhadas para loops. Pedi-lhe para avisar quando terminasse de correr e ele disse que levaria várias horas. Enquanto isso, meu script R foi capaz de repetir os ~ 45.000 registros em cerca de 30 segundos.
Estou certo ao supor que R é uma escolha muito melhor para limpar e filtrar dados? Talvez o desenvolvedor SQL no meu escritório seja apenas inepto? Estou curioso para saber se alguém que trabalhou com R e SQL (ou Python e SQL) tem alguma idéia sobre isso.
Respostas:
R e SQL são dois animais completamente diferentes. SQL é uma linguagem que você pode usar para consultar dados armazenados em bancos de dados como você já experimentou. Os benefícios do SQL versus R estão principalmente no fato do servidor de banco de dados (MS SQL, Oracle, PostgreSQL, MySQL, etc.).
A maioria dos servidores de banco de dados modernos, se não todos, permite que vários usuários consultem dados da mesma fonte de dados e insiram, atualizem e excluam dados nas mesmas tabelas, garantindo ao mesmo tempo que os dados permaneçam consistentes. Isso é essencial para, por exemplo, gravar uma transação bancária. Você pode imaginar administrar um banco no R? É aí que entram os servidores de banco de dados. Eles garantem que as propriedades ACID dos procedimentos sejam executadas no banco de dados. ACID significa Atomicidade, simultaneidade, isolamento e durabilidade (consulte a descrição do ACID na wikipedia ). R é uma plataforma de usuário único onde tudo acontece na memória. Portanto, se o seu computador parar de funcionar na metade de uma grande operação, seus dados não serão armazenados. Você também é a única pessoa que pode acessar os dados. Para esclarecer, R não é considerado uma alternativa para servidores de banco de dados e / ou SQL.
Outra vantagem principal dos servidores de banco de dados é que um bom design de banco de dados garantirá que você possa consultar seu banco de dados rapidamente, executando a otimização de consulta. Para atingir esse banco de dados, os servidores acompanhem o design de uma tabela. Veja para uma discussão completa deste tópico a página wiki . R não pode executar otimização de consulta. Design de banco de dados ruim, pode levar à execução lenta de suas consultas. Os servidores de banco de dados também podem executar otimizações em consultas que consultam várias tabelas se chaves estrangeiras forem usadas corretamente no design do banco de dados.
A linguagem SQL tem uma sintaxe muito diferente e eu compartilho sua experiência de que é mais curto escrever etapas de transferência de dados usando a tabela de dados ou a sintaxe dplyr. No entanto, às vezes seus dados são grandes demais para R ou você precisa armazenar os resultados no banco de dados como parte de um trabalho em lotes periódico, o que exigirá codificar sua lógica no SQL.
Na minha experiência, existem casos de uso específicos para SQL e R / Python. O SQL é ótimo para armazenar dados críticos de negócios e permitir que várias pessoas acessem, modifiquem, insiram e excluam dados em um ambiente centralizado. Para qualquer dado único, R e Python são ótimos. Se a transferência de dados precisar ser executada periodicamente, você precisará portar seu script R / Python para SQL.
fonte
Estes nem sequer são comparáveis, realmente. SQL é uma linguagem destinada a acessar dados, R é uma linguagem destinada a trabalhar com dados.
O SQL não é uma ferramenta eficaz para munging, porque é difícil ver etapas intermediárias e, quando gera erros, não é provável que ele endereça a forma / qualidade / estrutura dos seus dados.
Meu fluxo de trabalho normalmente é:
Perceba também que nem todos os consumidores de dados usam R, mas muitos ainda fazem interface de sua plataforma preferida com dados usando SQL.
fonte
A biblioteca (dbplyr) possui a abordagem correta: escreva tudo em R (usando o tidyverse) e deixe a biblioteca na hora certa "compilar" o código R para SQL de baixo nível.
Como nem todo munging é traduzível, outra abordagem é a adotada pelo SQL Server: permita que trechos de código R sejam invocados a partir dos comandos "select" do SQL.
fonte
A abordagem 1., 2., 3. mencionada pela HEITZ é, na minha experiência, possível estendendo-se com uma alternativa para 3. onde você escreve seus dados de R (data.table) de volta ao MySQL.
Então, etapas completas são MySQL-> data.table-> MySQL
Se você garantir o uso da sintaxe data.table em que não copia o DT, também é compatível com RAM.
fonte
Numa palavra NÃO . O SQL é uma maneira concisa e flexível poderosa de descrever e resumir dados estruturados, semiestruturados e até não estruturados - quando uma camada de intérprete apropriada é colocada sobre ela. A propósito,
sql
é considerado quase obrigatório para os cientistas de dados.SQL
é uma maneira concisa e poderosa de executar suas operações principais de:O poder real vem ao combinar resultados usando visualizações embutidas . Quando eu preciso fazer isso vou usar um dos
sqldf
,pandasql
,pysparkSql
/sparkSql
ou uma conexão RDBMS direta. Escrever o mesmo da maneira mais concisa possível comdata.table
(muito melhor quedata.frame
) oudatatable
(melhor quepandas
) ainda é mais desajeitado, muito mais desajeitado ou quase impossível, dependendo da complexidade das consultas tentadas.Para munging de dados : essa é uma história diferente: algumas operações são facilmente expressas em sql e outras nem tanto. Quando, no entanto, você incorpora
UDF
s, existe uma latitude mais ampla do que pode ser alcançado. Minha tarefa atual inclui váriosUDF
s para executar operações de interseção de clientes , agregações personalizadas e métodos de pontuação personalizados .fonte