Redshift 원격로드를 사용하여 JSON을 복사

5990 단어 redshiftAWS

소개


  • Redshift는 JSON COPY를 지원하지 않습니다. ⇨ 2014.03.27 갱신 JSON 대응 패턴
  • 그래서 JSON의 데이터를 넣으려면 한 번 CSV 등으로 변환하고 S3에 두고 나서 Redshift에 COPY하고 있는 분도 많지 않을까요.
  • 거기서, 리모트 로드라고 하는 기능을 사용하면 JSON로 보존되고 있는 데이터에서도 Redshift에 COPY 할 수 있으므로 소개하고 싶습니다.

  • 이 문서의 목적



    특정 EC2 인스턴스의 JSON 형식으로 저장된 데이터를 CSV로 변환하여 Redshift로 복사

    이 문서의 단계에 따라
    htp // // cs. 아 ws. 아마존. 이 m/레 d시 ft/ㅁ st/dg/ぉ아아 g-다타-f로 m-레모테-호 sts. HTML

    사전 준비


  • 호스트 머신(EC2)
  • 데이터 소스(호스트 시스템에서)
  • 호스트 컴퓨터에 액세스할 수 있는 컴퓨터
  • 실행 중인 Redshift 클러스터

  • 절차


  • Redshift의 관리 콘솔을 열고,Clusters > Configuration > SSH Ingestion Settings 안에 있는 Cluster Public KeyNode IP AddressesPublic IP 를 삼가합니다.

  • 호스트 시스템의 EC2 인스턴스에 1에서 조사한 Cluster Public Key~/.ssh/authorized_keys에 추가합니다.
  • 호스트 머신의 EC2 인스턴스의 SecurityGroup에 Redshift 클러스터 IP (1의 Public IP )에서 SSH 권한을 추가합니다.
  • 호스트 머신의 EC2 인스턴스 공개 키를 삼가/etc/ssh/ssh_host_rsa_key.pub
  • 매니페스트 파일 만들기
  • { 
       "entries": [ 
         {"endpoint":"<EC2インスタンスのIP>", 
           "command": "<実行するコマンド>",
           "mandatory":true, 
           "publickey": "<4.で調べた鍵>", 
           "username": "<SSHで入るときのユーザー名>"},
           ・・以下繰り返しで、複数のホストを指定可能
        ] 
    }
    
  • 매니페스트 파일 업로드
  • COPY 명령 실행
  • COPY 명령의 from에 매니페스트 파일을 지정하고 옵션에 ssh를 붙이면 됩니다.

  • copy sales
    from 's3://mybucket/ssh_manifest' credentials 
    'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>'
    ssh;
    

    실제로 해보겠습니다.


    $ git clone https://github.com/kwmt/goinstall
    $ cd goinstall/
    $ sudo ./goinstall.sh ec2-user
    $ export GOROOT=/usr/local/go
    $ export GOPATH=$HOME/_go
    $ export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
    
    $ go get github.com/jehiah/json2csv
    
    $ cat /tmp/test.csv
    2014-03-25,1,web
    2014-03-26,1,iphone
    2014-03-26,2,web
    
    $ cat /tmp/test.json
    {"date":"2014-03-25","uid":1,"device":"pc"}
    {"date":"2014-03-26","uid":2,"device":"pc","hoge":"moge"}
    {"date":"2014-03-26","uid":3,"device":"iphone","hoge":"moge","hage":"fuga"}
    {"date":"2014-03-26","uid":100}
    {"uid":200,"device":"pc","date":"2014-03-27"}
    {"date":"2014-03-28","device":"iphone","uid":300}
    
    $ cat /tmp/test.json|/home/ec2-user/_go/bin/json2csv -k date,uid,device -p
    date,uid,device
    2014-03-25,1,pc
    2014-03-26,2,pc
    2014-03-26,3,iphone
    2014-03-26,100,""
    2014-03-27,200,pc
    2014-03-28,300,iphone
    
    create table dau_temp (
     date DATE not null sortkey encode delta,
     uid bigint encode delta,
     device varchar(max) encode lzo
    );
    
    COPY dau_temp from 's3://mybucket/manifest-20140325i.json'
    CREDENTIALS ''
    csv
    TIMEFORMAT AS 'auto'
    COMPUPDATE OFF
    ssh
    ;
    
    COPY dau_temp from 's3://mybucket/manifest-20140326a.json'
    CREDENTIALS ''
    csv
    TIMEFORMAT AS 'auto'
    COMPUPDATE OFF
    ssh
    NOLOAD
    ;
    INFO:  Load into table 'dau_temp' completed, 0 record(s) loaded successfully.
    COPY
    Time: 922.599 ms
    
    # COPY dau_temp from 's3://mybucket/manifest-20140325i.json'
    CREDENTIALS ''
    csv
    TIMEFORMAT AS 'auto'
    COMPUPDATE OFF
    ssh
    ;
    INFO:  Load into table 'dau_temp' completed, 6 record(s) loaded successfully.
    COPY
    Time: 716.052 ms
    
    # select * from dau_temp;
        date    | uid | device
    ------------+-----+--------
     2014-03-25 |   1 | pc
     2014-03-26 |   3 | iphone
     2014-03-27 | 200 | pc
     2014-03-25 |   1 | pc
     2014-03-26 |   3 | iphone
     2014-03-27 | 200 | pc
     2014-03-26 |   2 | pc
     2014-03-26 | 100 |
     2014-03-28 | 300 | iphone
     2014-03-26 |   2 | pc
     2014-03-26 | 100 |
     2014-03-28 | 300 | iphone
    (12 rows)
    
    Time: 121.124 ms
    

    속도 비교


  • json
  • Time: 668.326 ms
    Time: 690.624 ms
    Time: 630.213 ms
    Time: 543.657 ms
    Time: 791.359 ms
    Time: 668.934 ms
    Time: 618.174 ms
    Time: 829.587 ms
    Time: 559.560 ms
    Time: 572.987 ms
    Time: 561.357 ms
    
  • csv(gzip)
  • Time: 786.218 ms
    Time: 683.168 ms
    Time: 501.840 ms
    Time: 520.358 ms
    Time: 517.781 ms
    Time: 524.366 ms
    Time: 594.286 ms
    Time: 512.236 ms
    Time: 530.166 ms
    Time: 500.772 ms
    
    "command": "cat /tmp/dau-20140325.csv"
    Time: 1157.993 ms
    Time: 1006.971 ms
    Time: 1006.659 ms
    Time: 1036.481 ms
    Time: 1197.493 ms
    Time: 1029.445 ms
    Time: 977.649 ms
    Time: 1069.595 ms
    Time: 927.599 ms
    Time: 967.063 sm
    
    
    "command": "cat /tmp/dau-20140325.json|/home/ec2-user/_go/bin/json2csv -k "date,uid,device",
    Time: 2359.493 ms
    Time: 2420.866 ms
    Time: 2133.271 ms
    Time: 2314.561 ms
    Time: 2241.016 ms
    Time: 2083.953 ms
    Time: 2220.802 ms
    Time: 2228.559 ms
    Time: 2147.016 ms
    Time: 2173.630 ms
    
    real    0m2.034s
    user    0m0.604s
    sys     0m0.288s
    
    real    0m2.102s
    user    0m0.636s
    sys     0m0.332s
    
    real    0m2.102s
    user    0m0.572s
    sys     0m0.392s
    

    기타

    좋은 웹페이지 즐겨찾기