본문 바로가기

Study/class note

하둡 / 몽고디비 GUI 툴 사용하기

SQL NoSQL
Oracle, mySQL, mariaDB, mssql hive, mongodb, pig  <- 하둡(hdfs와 mapreduce)

 

ㅇmongodb를 편하게 이용하기 위해서 GUI(Graphic User Interface) 툴 사용

GUI DATABASE
sqldeveloper oracle
workbench mariadb, mysql
studio3T mongodb

Gui 툴을 사용하지 않는다면 putty나 모바텀에서 작업해야하는데 컬럼 갯수가 많은 대용량 데이터는 터미널창에서 검색하기에는 좀 불편함.

 

 

ㅇstudio3T 사용하기

다운로드 : https://studio3t.com/

 

 

문제333. 직업, 직업별 토탈월급을 출력하시오.

db.emp.aggregate([ {$group:{_id:'$job',sumsal:{$sum:'$sal'}}} ])

 

문제334. 위의 결과를 다시 출력하는데 직업이 SALESMAN은 제외하고 출력하시오.

db.emp.aggregate([ {$match:{job:{$ne:'SALESMAN'}}},
                    {$group:{_id:'$job',sumsal:{$sum:'$sal'}}} ])

 

문제335. 위의 결과를 다시 출력하는데 직업별 토탈월급이 높은 것부터 출력하시오.

db.emp.aggregate([ {$match:{job:{$ne:'SALESMAN'}}},
                   {$group:{_id:'$job',sumsal:{$sum:'$sal'}}},
                   {$sort:{'sumsal':-1}} ])

 

문제336. 직업, 직업별 인원수를 출력하시오.

db.emp.aggregate([ {$group:{_id:'$job',cnt:{$sum:1}}} ])

몽고디비는 count함수를 지원하지 않음. {$sum:1}은 1이라는 데이터를 행마다 부여해 컬럼을 만들고 직업별로 1을 집계한 것.

 

 

ㅇ 몽고디비 쿼리문을 몽고비디 테이블로 export하기

문제337. 위의 결과를 result라는 몽고디비 테이블로 생성하시오.

db.emp.aggregate([ {$group:{_id:'$job',cnt:{$sum:1}}},
                   {$out:"result"} ])
                   
show collections

db.result.find()

 

+) SQL에서는 아래와 같이 수행하면 됨.

create table result
as 
 select job, count(*) as cnt
  from emp
  group by job;

 

 

문제338. 위의 result테이블의 결과를 csv로 내리시오.

(putty에서 수행)

[root@centos ~]# mongoexport -d test -c result -f _id,cnt --csv >> job_result.csv
2022-03-30T11:04:24.627+0900    csv flag is deprecated; please use --type=csv instead
2022-03-30T11:04:24.627+0900    connected to: localhost
2022-03-30T11:04:24.627+0900    exported 5 records

[root@centos ~]# cat job_result.csv
_id,cnt
PRESIDENT,1
MANAGER,3
SALESMAN,4
ANALYST,2
CLERK,4

몽고디비에서 우리가 검색하기 원하는 결과만 따로 테이블로 만들어서 위와 같이 테이블을 통채로 리눅스에 csv파일로 export 시켰습니다.

 

 

문제339. /home/oracle 밑에 있는 job_result.csv를 모바텀을 이용해 윈도우쪽으로 내려 받으시오.

 

 

문제340. job_result.csv로 윈도우의 주피터 노브북에서 job_result라는 판다스 데이터 프레임을 생성하시오.

 

 

문제341. 위의 결과를 막대 그래프로 시각화하시오.

 

 

문제342. 1년 중 몇 월에 비행기 출발 지연이 많이 발생하는가?

db.airline.aggregate([ {$match:{depdelay:{$gt:0}} },
                       {$group:{_id:"$month", count:{$sum:1}}},
                       {$sort:{"_id":1} } ])

 

 

문제343. 위의 결과를 몽고 디비에서 air_result라는 이름으로 테이블로 생성하시오.

db.airline.aggregate([ {$match:{depdelay:{$gt:0}} },
                       {$group:{_id:"$month", count:{$sum:1}}},
                       {$sort:{"_id":1} },
                       {$out: "air_result"} ])

 

 

문제344. 몽고디비에 있는 air_result 테이블을 /home/oracle밑에 air_result.csv로 내리시오.

[root@centos ~]# mongoexport -d test -c air_result -f _id,count --csv >> air_result.csv
2022-03-30T11:48:17.473+0900    csv flag is deprecated; please use --type=csv instead
2022-03-30T11:48:17.475+0900    connected to: localhost
2022-03-30T11:48:17.476+0900    exported 12 records

[root@centos ~]# cat air_result.csv
_id,count
1,215791
2,184811
3,195139
4,181870
5,170538
6,201658
7,222409
8,207187
9,170182
10,190085
11,213819
12,240057

 

 

문제345. /home/oracle 밑에 있는 air_result.csv를 윈도우에 내리시오.

문제346. 윈도우로 내려받은 air_result.csv를 판다스 데이터 프레임으로 만들고 라인그래프로 시각화하세요.

import matplotlib.pyplot as plt

air_result = pd.read_csv("c:\\data\\air_result.csv")
air_result.columns = ['month','cnt']

plt.figure(figsize=(20,8))
plt.plot(air_result.month, air_result.cnt)

plt.xticks(size = 20)
plt.yticks(size = 20)
plt.show()

 

반응형