database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 7653 게시물 읽기
No. 7653
CSV 에서 COPY로 자료입력시, 특정 열의 자료만 입력하게끔 하고싶습니다
작성자
성제호(s_jeho)
작성일
2009-03-18 09:54ⓒ
2009-03-18 09:57ⓜ
조회수
7,288



안녕하세요, ^^ 자주 질문올리게 되네요..

CDR이란게 있습니다, 정확히 말하면 Call Detail Record 란 녀석인데,
통화내역인것이죠...
이게 장비에서 실시간으로 출력되고 30분마다 한번씩 파일로 정리되어 나옵니다

제가 하고싶은건, 이 30분마다 나오는 결과물을 DB에 입력하고싶은것인데요
이게 다행스럽게도 CSV 값으로 나와서 입력이 잘 될줄 알았는데,

열이..무려..354개정도 되네요.......쿨럭
그나마 메뉴얼에 이게 뭐다~ 하고 나온게 254개정도구요-_-;;

실제로 제가 쓸 업무에 이 수백개의 열중 쓰는건 열개도 채 안됩니다만,
이 많은 열중에 몇번째,몇번째 열만 테이블에 입력하게 하고싶은데,
자동화로 가능할까요?


시나리오는 대충 이렇습니다.


1. 30분마다 출력되는 파일을 scp로 원격 DB서버에 복사한다 (crontab을 이용해서.)
2. 복사된 파일을 db에 copy한다.(crontab, 파일유무 확인해서)



csv로 정리된 수백개의 행중에 특정 행들만 테이블에 복사할수 있을까- 가 질문의 요지입니다^^

오늘 하루도 힘차게! 수고하세용^^






추가, CDR 예시 입니다.
보안상 자세히는 보여드릴수 없으나..^^;;;


110,0625,195,000000,195,999999,03-16-2009,00000,0000000,1,0,0,000,000,0000000,2,09063,5261189,16:43:16.9,000000000,00009,03-16-2009,16:43:16.5,000000004,01,53020,F,0,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,3500,0041,6,3020,1278,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,0,0000,014,082821072133633,,,,,,,,,,,,,,,,,,000105000011609,000104000010829,,,,,,,,,0016258896,,,,,,,635261189,00000,,120058456001,,,,3,,0,005,635261189,,,20001,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,000,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,399,82821072133633,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

이 글에 대한 댓글이 총 5건 있습니다.

안녕하세요,


제가 알기로는 COPY 에서 특정 순서의 필드만 골라서 로딩하는 것은 없는 것으로 알고 있습니다. 제가 메뉴얼에서 못 본 것일 수도 있으니 레퍼런스 메뉴얼을 한번 참고해보세요.


CDR 데이터에서 특정 필드만 오려야 되는 상황이라면, 미리 그 특정열만 걸러서 새로운 파일을 만드는 Transform 작업을 한번 더 구현하셔도 되구요. 소프트웨어 예산에 여유가 있다면 상용 ETL 엔진을 구매하면 아주 쉽게(?) 처리가 가능합니다. 오픈소트 ETL 엔진도 위와 같은 응용은 아주 손쉽게 처리하는 기능을 가지고 있습니다.


상용 ETL엔진은 인포매티카나 데이터스테이지 등등...

오픈소스로는 PDI(KETTLE), Talend 등등...이 있습니다.


CDR 데이터적재의 목적이 아카이빙이나 DW라면 ETL 엔진을 도입하는 것도, 향후 유지보수나 개발시간 단축에 도움이 될 수 있습니다. 다만 말씀하신 부분이 간단히 로딩만 하면 되는 거라면 간단한 transform 단계를 만드는 것을 추천합니다.

김영우님이 2009-03-18 11:05에 작성한 댓글입니다. Edit

COPY tablename [ ( column [, ...] ) ]
    FROM { 'filename' | STDIN }
    [ [ WITH ]
          [ BINARY ]
          [ OIDS ]
          [ DELIMITER [ AS ] 'delimiter' ]
          [ NULL [ AS ] 'null string' ]
          [ CSV [ HEADER ]
                [ QUOTE [ AS ] 'quote' ]
                [ ESCAPE [ AS ] 'escape' ]
                [ FORCE NOT NULL column [, ...] ]



여기서 


column
 
An optional list of columns to be copied. If no column list is specified, all columns of the table will be copied. 

요게 좀 의심되는데.. 실제로 써보려니 어떤 형식으로 입력해야할지 모르겠네요..

copy test (column 1,3,5) from '/cdr.txt' with delimiter ',';

이렇게 쓰니 안되는데.. 컬럼이란 옵션이 뭘 의미하는지요?
존재하는 컬럼이 없을때 컬럼 전부를 복사한다고 하는데,
이 존재한다는 의미가 테이블에 등록되어있을때를 말하는것인지요?
그렇다면 컬럼값에는 컬럼명이 들어가는것인지요, 아니면 몇번째 순서가 들어가는지요-

헉헉..
성제호(s_jeho)님이 2009-03-18 11:36에 작성한 댓글입니다.

column 옵션은 말그대로 테이블의 컬럼을 지정하는 옵션입니다. 예를들면, 소스 파일과 컬럼 순서가 다른 경우에 컬럼 리스트를 지정해준다던지....... 아니면 특정 테이블에 5개의 컬럼이 있는데 3컬럼에만 데이터를 넣는데... 이런 경우엔 소스파일에 3개의 값 리스트가 존재하겠죠

김영우님이 2009-03-18 23:39에 작성한 댓글입니다. Edit

cvs 파일이면 python이니 ruby로 하시면 쉽게 핸들링 가능합니다.

 

성능은 나중에 생각하시고 파이썬 루비 예제를 찾으셔서 cvs내용 추출을 먼저 만드시고 그다음 db insert script작성하시면 쉽게 해결될거라 생각듭니다.

김병석(byung82)님이 2009-03-18 23:52에 작성한 댓글입니다.

답변해주셔서 감사합니다..^^
파이썬 설치해서 삽질해보고 있습니다ㅋ
잘되었음 좋겠네요....ㅠㅠ

성제호(s_jeho)님이 2009-03-19 09:47에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
7656PostgreSQL을 사용하고 있는 회사는? [1]
김연수
2009-03-19
7071
7655pgpool 새로운DB추가시 문의 드립니다
김태규
2009-03-19
6628
7654김영우님께 질문드립니다..ㅠㅠ 가공에 따른 코드 작성은 뭘로하는게 좋을까요? [3]
성제호
2009-03-18
8395
7653CSV 에서 COPY로 자료입력시, 특정 열의 자료만 입력하게끔 하고싶습니다 [5]
성제호
2009-03-18
7288
7652오랜 만에 질문 드립니다. [1]
이진영
2009-03-17
6392
7651신기배님 답변감사합니다. 추가로 문의 좀 드릴께요.. [4]
김태규
2009-03-17
7298
7650pgpool에 대하여 문의 드립니다 [1]
김태규
2009-03-16
7115
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.023초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다