2016-07-21 7 views
0

私の究極の目標は、Greenplumデータベースの内部ロードテーブルにngramデータセットを挿入することです。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" と言うが、彼らはカンマを含まない:

私は(Greenplumは上)外部表を作成しました。それらはタブを含んでいます。

#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"... 

私は私のログのエラーテーブルに行くと、この参照してください。私はFORMAT 'TEXT' (HEADER)で遊んでみました

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     | 

を。私はDELIMITER ' 'を追加しました。私はCSVに変更しましたが、別の列のデータが失われてしまいます。

2つの列に対して「!Giscard」がカウントされていると思います。 ngramにはスペースがあります。

また、エラーがid bigserialである可能性がありますか?

変更するアイデアはありますか?

答えて

1

この場合、シリアル列が問題になります。しかし、表示されているエラーは、解析時に使用されている区切り文字に関連しているようです。タブやスペースを使用していますか?

以下は、区切り文字にタブを使用して2つのテーブルを作成する例です。外部テーブルは、新しいテーブルにデータを読み込むために使用されます。ここの鍵は、外部テーブルに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

ありがとうございます!この修正は、外部テーブルに 'big big'をリストアップすることではありませんでした。私は間違いがない!私は '(HEAD DELIMITER '\ t')'、 'E '\ t''は私のために働いていませんでした。ヘッダー行があるので、 'HEAD'を追加しました。 – syuja

+0

待って、 'E '\ t''が必要になった!再度、感謝します! – syuja

関連する問題