dplyr로 작성할 수있는 RedshiftSQL!
데이터 엔지니어링 그룹 유루후와 Awesome 기계 학습 엔지니어의 tomomoto입니다. 폐사는 리어충이 많아, 24일만 캘린더가 비어 있는 상태였기 때문에, 24일 12시 53분 현재로부터 몇 안되는 리어충이 아닌 엔지니어로서 Qiita 기사를 쓰기 시작하고 있습니다.
이 기사에서는 JapanR2016에서 발표 한 LT 재료의 dplyr로 작성할 수있는 RedshiftSQL에 대해 쓰고 싶습니다. (새로운 재료 생각할 시간은 없습니다!)
dplyr로 작성할 수 있는 RedshiftSQL
dplyr은 R 언어 라이브러리로, 파이프(%/%)를 사용하여 데이터 처리를 쉽게 작성할 수 있는 하나님 라이브러리입니다. 사실 이 신 라이브러리를 사용하여 SQL을 쓰지 않아도 직접 Redshift에 SQL을 던질 수 있습니다! 이미지는 아래와 같은 느낌입니다.
사용법
코드를 작성하는 방법은 다음과 같습니다. 네, 간단하죠?
connect_rs.Rlibrary(dplyr)
library(RPostgreSQL)
myRedshift <- src_postgres(
dbname="hoge",
host = "XXX.XXX.XXX.XXX",
port = XXX,
user = "hoge_hoge",
password = "hoge_hoge_hoge",
options="-c search_path=hoge_schema_name")
rs_table <- tbl(myRedshift, from ="hoge_table")
rs_table %>% dplyr::filter(hoge_column = "abcd")
어떤 SQL로 변환되고 있습니까?
그럼 실제로 dplyr의 코드가 어떻게 변환되고 있는지 알아봅시다!
rs_table
SELECT * FROM hoge_table
rs_table %>%
select(a)
SELECT a AS a FROM hoge_table
rs_table %>%
select(starts_with("a"))
SELECT a AS a, a_1 AS a_1
FROM hoge_table
rs_table %>%
filter(hoge_no="33")
SELECT * FROM hoge_table
WHERE (hoge_no = '33')
rs_table %>%
head(3)
SELECT * FROM hoge_table
LIMIT 3
rs_table %>%
select(a) %>%
head(3)
SELECT * FROM
(SELECT a AS a FROM hoge_table) xauvngdbsq
LIMIT 3
rs_table %>%
group_by(a) %>%
summarise(cnt=length(a))
SELECT a, LENGTH(a) AS cnt
FROM hoge_table
GROUP BY a
rs_table %>%
group_by(a) %>%
summarise(cnt=length(a)) %>%
arrange(desc(cnt))
SELECT * FROM
(SELECT a, LENGTH(a) AS cnt FROM hoge_table GROUP BY a)
hjvzhxrrld
ORDER BY cnt DESC
innerjoin(rs_table, rs_table, by=a)
SELECT * FROM (SELECT a AS a, ..... FROM hoge_table) uqhggwfohi
INNER JOIN
SELECT * FROM (SELECT a AS a, ..... FROM hoge_table) npoulssyev
USING (a)
rs_table %>%
mutate(row_number=row_number(desc(a)))
SELECT a, b, ...,
row_number() OVER (ORDER BY a DESC) AS row_number
FROM hoge_table
rs_table %>%
group_by(b) %>%
mutate(row_number=row_number(desc(a)))
SELECT a, b, ...,
row_number() OVER (PARTITION BY b ORDER BY a DESC) AS row_number
FROM hoge_table
요약
library(dplyr)
library(RPostgreSQL)
myRedshift <- src_postgres(
dbname="hoge",
host = "XXX.XXX.XXX.XXX",
port = XXX,
user = "hoge_hoge",
password = "hoge_hoge_hoge",
options="-c search_path=hoge_schema_name")
rs_table <- tbl(myRedshift, from ="hoge_table")
rs_table %>% dplyr::filter(hoge_column = "abcd")
rs_table
SELECT * FROM hoge_table
rs_table %>%
select(a)
SELECT a AS a FROM hoge_table
rs_table %>%
select(starts_with("a"))
SELECT a AS a, a_1 AS a_1
FROM hoge_table
rs_table %>%
filter(hoge_no="33")
SELECT * FROM hoge_table
WHERE (hoge_no = '33')
rs_table %>%
head(3)
SELECT * FROM hoge_table
LIMIT 3
rs_table %>%
select(a) %>%
head(3)
SELECT * FROM
(SELECT a AS a FROM hoge_table) xauvngdbsq
LIMIT 3
rs_table %>%
group_by(a) %>%
summarise(cnt=length(a))
SELECT a, LENGTH(a) AS cnt
FROM hoge_table
GROUP BY a
rs_table %>%
group_by(a) %>%
summarise(cnt=length(a)) %>%
arrange(desc(cnt))
SELECT * FROM
(SELECT a, LENGTH(a) AS cnt FROM hoge_table GROUP BY a)
hjvzhxrrld
ORDER BY cnt DESC
innerjoin(rs_table, rs_table, by=a)
SELECT * FROM (SELECT a AS a, ..... FROM hoge_table) uqhggwfohi
INNER JOIN
SELECT * FROM (SELECT a AS a, ..... FROM hoge_table) npoulssyev
USING (a)
rs_table %>%
mutate(row_number=row_number(desc(a)))
SELECT a, b, ...,
row_number() OVER (ORDER BY a DESC) AS row_number
FROM hoge_table
rs_table %>%
group_by(b) %>%
mutate(row_number=row_number(desc(a)))
SELECT a, b, ...,
row_number() OVER (PARTITION BY b ORDER BY a DESC) AS row_number
FROM hoge_table
마지막으로
현재 13:11! 의외로 시간 걸리지 않고 쓸 수 있는 것이군요. 여러분은 미리 써 주세요. 내일은 제가 미리 준비한 기사입니다.
Reference
이 문제에 관하여(dplyr로 작성할 수있는 RedshiftSQL!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tomomoto/items/2dae8bc1f46ff74d2ae9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(dplyr로 작성할 수있는 RedshiftSQL!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tomomoto/items/2dae8bc1f46ff74d2ae9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)