기본 콘텐츠로 건너뛰기

mongodb에서 mysql로 간단하게 데이터 임포트 및 익스포트

누군가 요청해서 재미삼아 만들었음..

mongodb를 mysql에서 불러들이는 방법은 몇 가지가 있는데요.. 

1. mongodb에 mysql 모듈을 설치해서 mysql에서 호출하는 방법..
  -> 설정이 많이 필요해서 귀찮음
2. mongodb에 mysql 5.7이후라면 json import를 이용해서 json으로 집어넣는 방식
  -> mongodump를 이용해서 json 파일로 넣고 json_import를 이용해서 테이블에 넣으면 되기 때문에 간단한 명령으로 쉽게 정리 됨. 
  단점은 KVS(Key Value Store)로 저장되기 때문에 쿼리가 살짝 귀찮아짐.. 기존 쿼리를 사용할 수 없다. 
SELECT doc->>"$.name" AS name FROM test.my_restaurants WHERE doc->>"$.cuisine" = "Italian"
   요런 느낌으로 쿼리를 짜야 함.
3. mongodump로 json으로 떨군 뒤에 jq로 읽어서 쉘로 필드를 뽑은 뒤에 mysql커맨드로 insert처리를 함. 

    #!/bin/bash
    # Useful date text
    TodayYYYYMMDDHH24MISS=`date '+%Y%m%d%H%M%S'`
    TodayYYYYMMDD=`date '+%Y%m%d'`
    TomorrowYYYYMMDD=`date +%Y%m%d --date '1 day'`
    YesterdayYYYYMMDD=`date +%Y%m%d --date '1 day ago'`
    NextMonthYYYYMMDD=`date +%Y%m%d --date '1 month'`
    PrevMonthYYYYMMDD=`date +%Y%m%d --date '1 month ago'`

    delete sqldump.sql

    jdata=`cat export.json | jq -r`
    jlen=$(echo $jdata | jq length)
    for jitem in $( seq 0 $(($len - 1)) )do
        field1=$(echo $jdata | jq .field1.[$jitem])
        field2=$(echo $jdata | jq .field2.[$jitem])
        field3=$(echo $jdata | jq .field3.[$jitem])
        if [ "$field1" != '' ]
        then
            echo "${s} \n insert into tablename (F1, F2, F3) values ($field1$field2$field3)" >>sqldump.sql
        fi
    done

그밖에 git등으로 제공하는 export 툴이나 T3등을 이용한 GUI툴 등 다양한 방법으로 데이터 처리가 가능합니다.



giip :: Free mixed RPA orchestration tool! 

댓글

이 블로그의 인기 게시물

Alter table 에서 modify 와 change 의 차이 :: SQL Server

두 개의 차이를 모르는 경우가 많아서 정리합니다.  modify는 필드의 속성값을 바꿀때 사용하구요.. change는 필드명을 바꿀떄 사용합니다.  alter table tbbs modify bNote varchar(2000) NULL; alter table tbbs change bNoteOrg bNoteNew varchar(2000) NULL; change에는 원래 필드와 바꾸고 싶은 필드명을 넣어서 필드명을 바꾸는 것이죠~ 더 많은 SQL Server 팁을 보려면  https://github.com/LowyShin/KnowledgeBase/tree/master/wiki/SQL-Server giip :: Control all Robots and Devices! Free inter-RPA orchestration tool! https://giipasp.azurewebsites.net/

[Classic ASP] Cookie가 삭제 안되는 문제

만든 쿠키가 삭제가 계속 안되서 여기저기 삽질을 했다. 모든 쿠키를 삭제하는 함수도 만들었다. Function CookieClear(cldomain) For Each cookie in Request.Cookies Response.Cookies(cookie).Domain = "." & cldomain Response.Cookies(cookie).Path = "/" Response.Cookies(cookie).Expires = DateAdd("d",-1,now()) Next End Function 그런데.. 안되서 계속 삽질하다가 하나 알았다.  littleworld.net littleworld.co.kr www.littleworld.net  의 모든 값을 지우려고 했으나.. 처음 만든 쿠키가 www.littleworld.net 인 관계로.. 처음에 www.littleworld.net 의 쿠키를 삭제 해야만 나머지가 지워졌다.. -ㅅ-;; 간단하지만 몰랐던 초보적인 사실.. ---- 누구나 쉽게 광고를! http://www.cashtalk.co.kr Free Infrastructure automation & management tool Global Infrastructure Integration Platform http://giip.littleworld.net Subscribe and publish your links as a book with friends  My Favorite Link Share http://link.littleworld.net

BI의 궁극판! Apache Drill을 써보자!

사실 Apache Drill 은 BI(Business Intelligence)라고 부르는 것 보다는 단순 데이터 연결 엔진이다. https://drill.apache.org/ 하지만 내가 왜 극찬을 하느냐면.. DBA로서 항상 문제가 되어왔던게, 이기종 데이터의 변환이나 처리였다. 포맷을 맞추는데 엄청난 시간이 걸리고, 데이터 임포트 실패가 무수하게 나고.. 한 번 잘못 데이터를 추출하면 다시 조정, 변환, 추출하는데 시간이 많이 걸린다. 그런데! Apache Drill은 그냥 RDB를 CSV랑 연결해서 조인해서 통계를 낼 수 있다. 그것도 표준 SQL을 사용하여! 예를 들어, CSV의 세 번째 컬럼이 price 이고, 물건의 판매이력을 PG사에서 CSV로 출력 받았다. 우리 DB와의 검증을 위해서는 수동으로 Import를 한 뒤에 포맷이 안맞아 잘리는 데이터가 있다면 다시 맞춰주고, 재 임포트를 수십 번, 그리고 나서 겨우 들어간 데이터를 조인하여 빠진 데이터를 분간한다. 숫자가 적다면 개발자가 개발로 처리할 수도 있지만, 건수가 하루에 300만건 짜리라면.. 한 달 온 파일은 9천만 건이다. 프로그램으로 고작 처리하는 것이 초당 500건. 거의 20만초, 에러 없이 약 56시간.. 에러가 생기면 다시 56시간.. ㅠㅡㅠ 이런게 현실이기 때문에 쿼리 말고는 방법이 없다. apache drill 의 진면목을 보자! 이번에는 좀 범용 적인 MySQL DB와 붙여 보자. . 난 이번에는 Mac에서 작업을 했기 때문에 그냥 다운 받아서 풀었음.. https://drill.apache.org/download/ 여기서 자기 OS에 맞는 버전을 받아서 설치하시길.. 압축을 풀고 나면 MySQL 커넥터를 붙여야 한다. https://dev.mysql.com/downloads/connector/j/5.1.html 여기서 다운로드 이런 커넥터 들을 붙일 때마다 콘피그를 수정해 줘야 하지만, 몇 번만