2016-07-21 1 views
0

궁극적 인 목표는 ngram 데이터 세트를 내 Greenplum 데이터베이스의 내부로드 테이블에 삽입하는 것입니다.Greenplum ngram 데이터 세트 : 누락 된 데이터

서버가 gpfdist입니다.

CREATE EXTERNAL TABLE ng_schema.fre2(
    id bigserial, 
    ngram text, 
    year int4, 
    match_count int4, 
    page_count int4, 
    volume_count int4) 
    LOCATION ('gpfdist://10.1.8.4:8081/ngram_2009h1/fre-all/2/*.csv') 
    FORMAT 'TEXT' (HEADER) 
    LOG ERRORS INTO ng_schema.load_e_fre2 SEGMENT REJECT LIMIT 500 rows; 

데이터 세트 모두 "CSV"라고,하지만 그들은 쉼표를 포함하지 않는 :

나는 (그린 플럼에) 외부 테이블을 만들었습니다. 탭이 있습니다.

#head -n20 *92.csv 
    ! 144 1836 2 2 2 
    .... 

다음으로, 나는 외부 테이블 테스트 :

SELECT * FROM fre2; 
    ERROR: Segment reject limit reached. Aborting operation. Last error was 
    missing data for column "volume_count"... 

내 로그 오류 테이블로 이동하고이를 참조하십시오

2016-07-21 20:51:49.05593+00 | fre2 | gpfdist://10.1.8.4:8081/ngram_2009h1/fre-all/2/*.csv [/mnt2/ngram_2009h1/fre-all/2/googlebooks-fre-all-2gram-20090715-0.csv] |   |   | missing data for column "volume_count" | ! Giscard  1979 2  2 
2     | 

나는 FORMAT 'TEXT' (HEADER)와 장난 시도했습니다. 나는 DELIMITER ' '을 추가했습니다. 나는 그것을 CSV으로 바꿨지만, 나는 다른 컬럼에 대한 데이터가 누락되어 버렸다.

문제는 "! Giscard"가 2 열로 계산된다는 것입니다. ngram에는 그 안에 공백이 있습니다. 또는 id bigserial?

변경 사항에 대한 아이디어가 있으십니까?

답변

1

이 경우 직렬 열이 문제가됩니다. 그러나보고있는 오류는 구문 분석 할 때 사용되는 구분 기호와 관련이있는 것으로 보입니다. 탭이나 스페이스를 사용하고 있습니까?

아래는 구분 기호로 탭을 사용하는 예이며 두 개의 표를 만듭니다. 외부 테이블은 데이터를 새 테이블로 읽는 데 사용됩니다. 여기서 핵심은 외부 테이블에 bigserial 열이 없다는 것입니다. 새 테이블에 데이터를로드하면 일련 ID가 자동으로 생성됩니다.

CREATE TABLE fre2_new( 
id bigserial, 
ngram text, 
year int4, 
match_count int4, 
page_count int4, 
volume_count int4); 

CREATE EXTERNAL TABLE fre2(
ngram text, 
year int4, 
match_count int4, 
page_count int4, 
volume_count int4) 
LOCATION ('gpfdist://mdw:8080/dat.txt') 
FORMAT 'TEXT' (DELIMITER E'\t') 
LOG ERRORS INTO load_e_fre2 SEGMENT REJECT LIMIT 500 rows; 


[[email protected] data]$ cat -vet dat.txt 
144^I1836^I2^I2^I2$ 
144^I1836^I2^I2^I2$ 
144^I1836^I2^I2^I2$ 
144^I1836^I2^I2^I2$ 

insert into fre2_new (ngram, year, match_count, page_count, volume_count) select * from fre2; 

gpadmin=# select * from fre2_new; 
id | ngram | year | match_count | page_count | volume_count 
----+-------+------+-------------+------------+-------------- 
    3 | 144 | 1836 |   2 |   2 |   2 
    1 | 144 | 1836 |   2 |   2 |   2 
    4 | 144 | 1836 |   2 |   2 |   2 
    2 | 144 | 1836 |   2 |   2 |   2 
+0

정말 고마워요 !! 수정 사항은 외부 테이블에'bigserial' id를 나열하는 것이 아니 었습니다. 나는 오류가 없다! 나는 (HEAD DELIMITER '\ t')','E '\ t''이 나를 위해 일하지 않았다. 헤더 행이 있기 때문에'HEAD'를 추가했습니다. – syuja

+0

잠깐, 'E'\ t''가 필요 끝내 버렸습니다! 다시 한 번 감사드립니다! – syuja