최신 R 및 / 또는 Python 라이브러리는 SQL을 더 이상 사용하지 않습니까?


14

데이터 처리에서 정리, 녹이는 것까지 SQL Server가 모든 작업의 ​​중추 인 사무실에서 근무하고 있습니다. 저의 동료는 들어오는 데이터를 표준화하여 보고서, 시각화 및 분석 프로젝트에서 사용할 수 있도록 복잡한 함수 및 저장 프로 시저를 작성하여 들어오는 데이터를 체계적으로 처리하는 데 전문적입니다. 여기서 시작하기 전에 가장 기본적인 쿼리를 작성하는 것 외에는 SQL에 대한 경험이 거의 없었습니다. 분석 준비 작업의 대부분은 R에서 모두 수행되었습니다. 상사는 R을 사용하여 더 효율적으로 수행 할 수있는 코드가 적고 할당이 거의없는 것처럼 보이지만 SQL 기술을 향상시킬 것을 주장합니다. dplyr, data.table 및 tidyr와 같은 패키지 (예를 들어). 내 질문은-이것이 의미가 있습니까?

몇 주 전에 필자는 특정 기준을 충족하는 테이블의 각 행에 대한 열 이름 목록을 가져 와서 문자열 벡터로 연결하는 작업에 직면했습니다. 마감 시간이 촉박했으며 당시에는 막힘이 발생하여 문제를 해결하지 못했습니다. 나는 상사에게 문제를 해결하기 위해 TSQL 스크립트를 작성하도록 동료에게 요청했습니다. 그가 작업하는 동안 R에서 상당히 간단한 함수를 작성하고 데이터 프레임에 적용하는 방법을 알아 냈습니다. 제 동료는 약 2 시간 후에 그의 대본을 가지고 돌아 왔습니다. 2 개의 중첩 된 for 루프를 포함하는 최소 75 개의 라인이었습니다. 나는 그에게 달려가는 시간을 알려주고 몇 시간이 걸릴 것이라고 말했다. 한편 내 R 스크립트는 약 30 초 안에 ~ 45,000 레코드를 반복 할 수있었습니다.

R이 데이터를 정리하고 녹이는 데 훨씬 더 나은 선택이라고 가정 할 수 있습니까? 내 사무실의 SQL 개발자가 부적절했을까요? R과 SQL (또는 그 문제에 대해 Python과 SQL)로 일한 사람이 이것에 대해 생각이 있는지 궁금합니다.


2
데이터베이스가 충분히 작고 정적 인 경우 데이터베이스를 메모리에로드하고 dplyr과 같은 선호하는 ETL 도구를 사용할 수 있습니다. 클라우드에 빅 데이터가 있으면 접근 방식이 제대로 작동하지 않습니다. BigQuery (Google)가 불만을 제기하는 쿼리를 정기적으로 실행합니다. SQL로 직접 쿼리를 작성하지만 원하는 경우 Spark를 중간 계층으로 사용하여 데이터 프레임에서 작동 할 수 있습니다.
Emre

1
따라서 데이터 저장 방식 측면에서 SQL이 본질적으로 R보다 효율적입니까? 아니면 SQL 서버가 더 많은 내장 메모리 및 처리 능력을 갖는 경향이 있습니까?
AffableAmbler 2012

1
포괄적 인 문장을 만들 수는 없습니다 (구현에 달려 있음). 그러나 좋은 데이터베이스에는 쿼리 최적화 프로그램이 있으며 그 중 일부 (예 : BigQuery)는 멀티 코어 실행을 지원합니다. 아마도 당신이 원하는 것은 SQL을 피하기 위해 데이터베이스 위에 데이터 프레임 또는 ORM 추상화입니다. dplyr은 이미 어느 정도이를 수행하고있는 것 같습니다 (참조 : SQL translation ). 원시 SQL에 대해 dplyr에서 동일한 쿼리를 벤치마킹하여 찾을 수 있습니다. 프로토 타이핑을 위해 소량의 데이터 샘플을 가져온 다음 프로덕션을위한 빅 데이터 툴을 사용하는 것이
Emre

답변:


13

R과 SQL은 완전히 다른 두 가지 짐승입니다. SQL은 이미 경험 한대로 데이터베이스에 저장된 데이터를 쿼리하는 데 사용할 수있는 언어입니다. SQL 대 R의 이점은 주로 데이터베이스 서버 (MS SQL, Oracle, PostgreSQL, MySQL 등)의 사실에 있습니다.

전부는 아니더라도 대부분의 최신 데이터베이스 서버는 여러 사용자가 동일한 데이터 소스에서 데이터를 쿼리하고 동일한 테이블에서 데이터를 삽입, 업데이트 및 삭제하는 동시에 데이터의 일관성을 유지하도록합니다. 이것은 은행 거래를 기록하는 데 필수적입니다. R에서 은행을 운영한다고 상상할 수 있습니까? 데이터베이스 서버가 들어오는 곳입니다. 데이터베이스에서 프로 시저의 ACID 속성을 실행합니다. ACID는 원 자성, 동시성, 격리 및 내구성을 나타냅니다 ( wikipedia의 ACID 설명 참조 ). R은 모든 것이 메모리에서 발생하는 단일 사용자 플랫폼입니다. 따라서 큰 작업으로 인해 컴퓨터가 절반 정도 작동하지 않으면 데이터가 저장되지 않습니다. 또한 데이터에 액세스 할 수있는 유일한 사람입니다. 명백히, R은 데이터베이스 서버 및 / 또는 SQL의 대안으로 간주되지 않습니다.

데이터베이스 서버의 또 다른 주요 장점은 우수한 데이터베이스 디자인으로 쿼리 최적화를 수행하여 데이터베이스를 빠르게 쿼리 할 수 ​​있다는 것입니다. 이 데이터베이스 서버를 달성하려면 테이블 디자인을 추적하십시오. 이 주제에 대한 자세한 내용은 위키 페이지를 참조하십시오 . R은 쿼리 최적화를 수행 할 수 없습니다. 데이터베이스 디자인이 잘못되면 쿼리 실행 속도가 느려질 수 있습니다. 데이터베이스 서버는 외래 키가 데이터베이스 디자인에 올바르게 사용되면 여러 테이블을 쿼리하는 쿼리에 대해 최적화를 수행 할 수도 있습니다.

SQL 언어는 매우 다른 구문을 가지고 있으며 데이터 테이블 또는 dplyr 구문을 사용하여 데이터 제거 단계를 작성하는 것이 더 짧은 경험을 공유합니다. 그러나 때로는 데이터가 R에 비해 너무 크거나 주기적 배치 작업의 일부로 데이터베이스에 결과를 저장해야하며,이 경우 논리를 SQL로 코딩해야합니다.

내 경험상 SQL 및 R / Python에 대한 특정 사용 사례가 있습니다. SQL은 업무상 중요한 데이터를 저장하고 여러 사람이 중앙 집중식 환경에서 데이터를 액세스, 수정, 삽입 및 삭제할 수 있도록하는 데 유용합니다. 일회성 데이터 녹취에 대해 R과 Python은 훌륭합니다. 데이터 녹이기를 주기적으로 실행해야하는 경우 R / Python 스크립트를 SQL로 이식해야합니다.


3

이것도 실제로 비교할 수는 없습니다. SQL은 데이터 액세스를위한 언어이고 R은 데이터 작업을위한 언어입니다.

SQL은 중간 단계를보기가 어렵고 오류가 발생할 때 데이터의 형식 / 품질 / 구조를 다루지 않을 수 있기 때문에 효과적인 제거 도구가 아닙니다.

내 워크 플로는 일반적으로 다음과 같습니다.

  1. SQL 쿼리에서 원시 데이터 가져 오기 (R)
  2. 녹이는 루틴 만들기
  3. 가능하면 SQL 쿼리를 다시 작성하여 R에서 수행 한 녹업을 수행하십시오.

또한 모든 데이터 소비자가 R을 사용하는 것은 아니지만 SQL을 사용하여 선택한 플랫폼을 데이터와 여전히 인터페이스하고 있음을 알고 있습니다.


1
이것은 내가 따르는 것과 동일한 과정입니다 (감독관이 싫어하는 것). 위에서 설명한 것과 같은 복잡한 munging 작업을 수행하는 것이 R과 같은 언어에서 훨씬 더 효율적으로 수행되는 것 같습니다 (긍정 감사). 그러나 SQL의 유일한 목적이 데이터를위한 거대한 하드 드라이브가 되려면 R 서버 만있는 것이 어떻습니까? R에서 모든 기능 (매핑, 테이블 연결을위한 키 설정, 데이터 그룹화 및 조인)을 모두 매우 효과적으로 수행 할 수있는 것처럼 보입니다. SQL 테이블이 R 데이터 프레임보다 메모리 사용 측면에서 더 효율적입니까?
AffableAmbler

1
모든 사람들이 R을 사용하는 것은 아니기 때문에 @Noah
HEITZ

2

library (dbplyr) 에는 올바른 접근 방식이 있습니다. tidyverse를 사용하여 R로 모든 것을 작성하고 라이브러리가 적시에 R 코드를 저수준 SQL로 "컴파일"하게하십시오.

모든 munging이 번역 가능한 것은 아니기 때문에 또 다른 방법은 SQL Server에서 수행하는 방법입니다. SQL "select"명령에서 R 코드 조각을 호출 할 수 있습니다.


1

HEITZ가 언급 한 1., 2., 3. 접근 방식은 경험적으로 R (data.table)에서 MySQL로 데이터를 쓰는 3.에 대한 대안으로 확장 될 수 있습니다.

따라서 전체 단계는 MySQL-> data.table-> MySQL입니다.

DT를 복사하지 않는 곳에서 data.table 구문을 사용하면 DT도 RAM 친화적입니다.


1

한마디로 NO . SQL 은 적절한 인터프리터 레이어가 그 위에 배치 될 때 구조화 된 반 정형 및 비정형 데이터를 설명하고 요약 할 수있는 강력하고 간결하고 유연한 방법입니다. 그건 그렇고sql 데이터 과학자에게는 거의 필수 아이템으로 간주됩니다.

SQL 다음과 같은 핵심 작업을 수행하는 간결하고 강력한 방법입니다.

  • 투영 ( 선택 .. )
  • 필터링 ( 여기서 ..)
  • (여과 / 그룹화 하여 그룹갖는 )
  • 기본 집계 ( count , sum , avg ..)
  • 조인

인라인 뷰를 사용하여 결과를 결합 할 때 진정한 힘 이옵니다 . 나는 중 하나를 사용하는 것을해야 할 때 sqldf, pandasql, pysparkSql/ sparkSql또는 직접 RDBMS 연결합니다. 와 가능한 가장 간결한 방식으로 같은 작성 data.table(더 나은 이상 data.frame) 또는 datatable(보다 나은 것은 pandas) 아직도 더 투박 훨씬 더 어설픈 또는 시도 된 쿼리의 복잡성에 따라 거의 불가능합니다.

데이터 융합의 경우 : 그것은 다른 이야기입니다. 일부 작업은 SQL로 쉽게 표현되고 일부는 그다지 많지 않습니다. 그러나을 통합하면 UDF달성 할 수있는 범위가 더 넓어집니다. 현재 진행중인 작업에는 UDF고객 교차 작업, 사용자 지정 집계 및 사용자 지정 점수 매기기 방법 과 같은 여러 작업이 포함됩니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.