Trabajo en una oficina donde SQL Server es la columna vertebral de todo lo que hacemos, desde el procesamiento de datos hasta la limpieza y el mung. Mi colega se especializa en escribir funciones complejas y procedimientos almacenados para procesar metódicamente los datos entrantes para que puedan estandarizarse y ponerse a trabajar en informes, visualizaciones y proyectos analíticos. Antes de comenzar aquí, tenía muy poca experiencia con SQL, aparte de escribir las consultas más básicas. La gran mayoría de mi trabajo de preparación de análisis se realizó en R. Mi jefe insiste en que mejore mis habilidades de SQL, aunque parece que hay muy pocas tareas que no se pueden hacer de manera más eficiente y con muchas menos líneas de código usando R paquetes como dplyr, data.table y tidyr (por nombrar algunos). Mi pregunta es: ¿tiene sentido?
Hace un par de semanas, me encontré con la tarea de obtener una lista de nombres de columna para cada fila en una tabla que cumpliera con ciertos criterios y concatenarlos en un vector de cadenas. Había una fecha límite ajustada y, en ese momento, estaba experimentando un bloqueo y no podía entender el problema. Le pregunté a mi jefe, quien a su vez le pidió a mi colega que escribiera un script TSQL para resolver el problema. Mientras trabajaba en ello, descubrí una forma de hacerlo en R escribiendo una función bastante simple y aplicándola sobre el marco de datos. Mi colega volvió con su guión unas dos horas después. Era al menos 75 líneas que comprenden dos bucles anidados. Le pedí que avisara cuando terminara la ejecución y dijo que tomaría varias horas. Mientras tanto, mi script R pudo recorrer los ~ 45,000 registros en aproximadamente 30 segundos.
¿Tengo razón al suponer que R es una opción mucho mejor para limpiar y mezclar datos? ¿Quizás el desarrollador de SQL en mi oficina es simplemente inepto? Tengo curiosidad por saber si alguien que haya trabajado con R y SQL (o Python y SQL) tiene alguna idea al respecto.
Respuestas:
R y SQL son dos bestias completamente diferentes. SQL es un lenguaje que puede usar para consultar datos almacenados en bases de datos como ya lo ha experimentado. Los beneficios de SQL versus R residen principalmente en el hecho del servidor de la base de datos (MS SQL, Oracle, PostgreSQL, MySQL, etc.).
La mayoría, si no todos, los servidores de bases de datos modernos permiten que múltiples usuarios consulten datos del mismo origen de datos e inserten, actualicen y eliminen datos en las mismas tablas a la vez que aseguran que los datos permanecen consistentes. Esto es esencial para, por ejemplo, registrar una transacción bancaria. ¿Te imaginas tener un banco en R? Ahí es donde entran los servidores de bases de datos. Aseguran que las propiedades ACID de los procedimientos se ejecuten en la base de datos. ACID significa Atomicidad, concurrencia, aislamiento y durabilidad (consulte la descripción de ACID en wikipedia ). R es una plataforma de usuario único donde todo sucede en la memoria. Por lo tanto, si su computadora deja de funcionar a la mitad en una operación grande, sus datos no se almacenarán. También es la única persona que puede acceder a los datos. Para ser claros, R no se considera una alternativa para los servidores de bases de datos y / o SQL.
Otra ventaja principal de los servidores de bases de datos es que un buen diseño de la base de datos garantizará que pueda consultar su base de datos rápidamente mediante la optimización de la consulta. Para lograr esta base de datos, los servidores realizan un seguimiento del diseño de una tabla. Vea para una discusión completa de este tema la página wiki . R no puede realizar la optimización de consultas. El diseño deficiente de la base de datos puede llevar a una ejecución lenta de sus consultas. Los servidores de bases de datos también pueden realizar la optimización de las consultas que consultan varias tablas si las claves externas se utilizan correctamente en el diseño de la base de datos.
El lenguaje SQL tiene una sintaxis muy diferente y comparto su experiencia de que es más corto escribir pasos de mezcla de datos utilizando la tabla de datos o la sintaxis dplyr. Sin embargo, a veces sus datos son demasiado grandes para R o necesita almacenar los resultados en la base de datos como parte de un trabajo por lotes periódico, que requerirá codificar su lógica en SQL.
En mi experiencia, hay casos de uso particulares para SQL y R / Python. SQL es ideal para almacenar datos críticos del negocio y para permitir que varias personas accedan, modifiquen, inserten y eliminen datos en un entorno centralizado. Para cualquier tipo de datos únicos, R y Python son geniales. Si su mezcla de datos necesita ejecutarse periódicamente, deberá portar su script R / Python a SQL.
fuente
Estos ni siquiera son comparables, en realidad. SQL es un lenguaje destinado a acceder a datos, R es un lenguaje destinado a trabajar con datos.
El SQL no es una herramienta efectiva para el munging porque es difícil ver pasos intermedios y cuando arroja errores, no es probable que aborde la forma / calidad / estructura de sus datos.
Mi flujo de trabajo es típicamente:
También tenga en cuenta que no todos los consumidores de datos usan R, pero muchos aún interactúan su plataforma de elección con datos que usan SQL.
fuente
library (dbplyr) tiene el enfoque correcto: escriba todo en R (usando el tidyverse) y deje que la biblioteca "compile" justo a tiempo el código R en SQL de bajo nivel.
Dado que no todo el munging es traducible, otro enfoque es el adoptado por SQL Server: permita que los fragmentos de código R se invoquen desde los comandos "select" de SQL.
fuente
El enfoque 1., 2., 3. mencionado por HEITZ es, en mi experiencia, posible ampliar con una alternativa para 3. donde usted escribe sus datos de R (data.table) nuevamente en MySQL.
Entonces, los pasos completos son MySQL-> data.table-> MySQL
Si se asegura de usar la sintaxis data.table donde no copia el DT, también es compatible con RAM.
fuente
En una palabra NO . SQL es una forma poderosa, concisa y flexible de describir y resumir datos estructurados, semiestructurados e incluso no estructurados, cuando se coloca una capa de intérprete adecuada encima. Por cierto,
sql
se considera casi imprescindible para los científicos de datos.SQL
es una forma concisa y poderosa de realizar sus operaciones principales de:El poder real viene cuando se combinan resultados usando vistas en línea . Cuando tengo que hacer que voy a utilizar uno de
sqldf
,pandasql
,pysparkSql
/sparkSql
una conexión directa o RDBMS. Escribir lo mismo de la manera más concisa posible condata.table
(mucho mejor quedata.frame
) odatatable
(mejor quepandas
) es aún más torpe, mucho más torpe o casi imposible dependiendo de la complejidad de las consultas intentadas.Para la mezcla de datos : esa es una historia diferente: algunas operaciones se expresan fácilmente en SQL y otras no tanto. Sin embargo, cuando incorporas
UDF
s hay una latitud más amplia de lo que se puede lograr. Mi tarea actual incluye varios correosUDF
electrónicos para hacer cosas tales como operaciones de intersección de clientes , agregaciones personalizadas y métodos de puntuación personalizados .fuente