2017-05-28 9 views
0

私はCSVファイルをPostgres(バージョン9.6.3)にインポートする必要があり、これを行うための最善の方法を理解する助けが必要です。ミリ秒を含むdatetimeフィールドを持つCSVファイルをPostgresにインポートするには?

CSVのフォーマットは次のとおりですが、ファイルを実際にインポートする最良の方法を理解しているだけでなく、テーブルで 'time'フィールドを格納するために使用するデータタイプも不明ですミリ秒が含まれており、としてフォーマットされた「YYYY.MM.DD HH:MM:SS.MS」

Time,Col1,Col2,Col3,Col4 
2017.05.01 00:00:02.851,1.09062,1.09057,4.35,5.42 
2017.05.01 00:00:03.368,1.09062,1.09058,3.22,1 
... 

私はそれを使用することができpgAdminでクライアントを持っていますが、私は、コマンドラインからの生のSQLを使用しても開いていますかPython(Python 3.6)を使用してテーブルを作成し、データをインポートします。

インポートするファイルのサイズは20mbsから数百mbsですので、これを実行する最も簡単な方法を探しています。

何か助けや指導をいただければ幸いです。

ありがとうございました!

答えて

1

あなたのテーブルには、(列に対するnumeric typesのいずれかを選択します。)このようになります。

create table my_table(
    time timestamp, 
    col1 numeric, 
    col2 numeric, 
    col3 numeric, 
    col4 numeric); 

使用copy command、例えば:

copy my_table from '/data/my_file.csv' (format csv, header); 

select * from my_table; 

      time   | col1 | col2 | col3 | col4 
-------------------------+---------+---------+------+------ 
2017-05-01 00:00:02.851 | 1.09062 | 1.09057 | 4.35 | 5.42 
2017-05-01 00:00:03.368 | 1.09062 | 1.09058 | 3.22 | 1 
(2 rows) 

ファイルは、あなたがそれをインポートすることができ非常に大きい場合ログされていないテーブルに変更した後、そのテーブルをログに記録します(alter table参照)。これにより、インポートの時間を短縮できます。

alter table my_table set unlogged; 
copy my_table from '/data/my_file.csv' (format csv, header); 
alter table my_table set logged; 

Postgresを所有しているオペレーティングシステムユーザーは、ファイルへの読み取りアクセス権を持っている必要があります。

+0

ありがとう、私はすぐにこれをテストし、すべてがうまくいくなら「正解」とマークします。 CVSファイルの時間フィールドの書式設定があなたの例のようにインポートされるかどうかは分かりませんが、ダッシュ ' - 'で区切ってYYYY MMなどを表示しますが、私のCSVでは完全な停止/ピリオド 'を使用します。私はこれが問題を引き起こさないことを望んでおり、インポートプロセス中に変換されることを期待しています...あなたの助けに感謝します... –

+1

私はちょうどこれをテストし、それは動作するはずです。 – klin

+0

あなたは絶対星です、ありがとう! –

関連する問題