1

大きなフラット ファイルからデータを取り込むために書いているプロセスで問題に直面しています。次のように、UTF8仕様のpythonラッパーを使用してフラットファイルを前処理しています。 wrFile = io.open("outFile","w+",encoding='utf8')

次を使用して、ソースファイルを1行ずつ読み取っています。 lineACT = linecache.getline("inFile", i+j) lineNxt = linecache.getline("inFile", i+j+1)

さらに、行を前処理した後、次のようにファイルを書き込んでいます wrFile.write(lineACT)

postgresqlこれで、次のクエリを使用してファイルを外部テーブルに取り込む準備が整いました。ローダー アプリケーションが記述されJava、プロパティ ファイルを使用してすべての構成が渡されます。

-- CREATE EXTERNAL TABLE FOR A SPECIFIC CLIENT
CREATE  EXTERNAL TABLE outTable (  col1 character(3), col2 
character(3),..... )
LOCATION ( '<LocationOf outFile>' )
FORMAT    'CUSTOM' (formatter=fixedwidth_in,col1='3',col2='3'......)
LOG ERRORS INTO errorTable SEGMENT REJECT LIMIT 2 ROWS;

-- INSERT INTO DELTA TABLE
INSERT  INTO deltaTable
SELECT  col1, col2,......
FROM    outTable
;

-- DROP EXTERNAL TABLE
DROP  EXTERNAL TABLE IF EXISTS outTable;

ボックスでこれを実行するとUNIX、例外がスローされます。

Cause: org.postgresql.util.PSQLException: ERROR: Segment reject limit reached. Aborting operation. Last error was: Expected line size from the formatting string: 1655, but the actual size is: 455  (seg43 slice1 uxpbdpsdw06.dstcorp.net:1028 pid=335160)

注: outFile の各行は 1655 文字です。outTabledeltaTableの両方の列構造も 1655 です。errorTable にチェックインすると、errmsg列に次のように表示されます。

invalid byte sequence for encoding "UTF8": 0x00

今、私がチェックしたデータベースのエンコーディングプロパティが原因で、データベースがファイル内のnull文字を受け入れていないと推測しています'0x00''UTF8'

次のbashコマンドを使用して、ファイルからヌル文字を削除しようとしました:

sed 's/\x0/-9/g' outFile > outFile_

&

tr < outFile -d '\000' > outFile_

しかし、今まで何も機能していません。誰かがこれを機能させる方法について何か提案をしてもらえますか?

--

前もって感謝します!

4

1 に答える 1