アウトプットができる技術者に

it's a time to take a new step !

Sybase ASE 入門 データのインポート (BCP)

コマンドラインから csv などの Textファイルを DBにインポートしたい場合

方法 は 下記のいずれか

  • bcp utility を使ってインポートする (データが多い場合に推奨)
  • insert 文でがんばる (データが少ない場合に推奨)
  • transfer 構文があるけどうまく使えず。importはASEフォーマットのみ?

検索すると「INPUT INTO ... 」が出てきますが使えません。これは GUI版のintractive SQL, SQL Anywhere(違う製品)のコマンドみたいです。

BCP(BulkCopy) 使い方

csvをインポートする
bcp ${table_name} in ${csv_path} -t, -c

${csv_path}は相対パスでも絶対パスでもOK

  • 特定のカラムのみをIMPORTする場合は、インポートファイルとテーブルのMappingファイルが必要。Mappingファイルは実行時に対話形式で生成可能。
    • 例えば、テーブルは4カラムあるけど、インポートファイルは2カラムだけとか。

Mappingファイルのフォーマットはこんな感じ。(公式資料より抜粋)
f:id:the_pleiades:20140123003302j:plain

エラーの許容行数を増やす
bcp ${table_name} in ${csv_path} -t, -c -m 1000

通常は10行エラーがあると、すべてのロードは中止となる。
m オプションで行数を指定することで、行数を変更可能。

BCP でちょっと困ること
  • ダブルクオートで囲ってあるデータはインポートできない -> 自分でがんばって取り除く。
  • 重複キー制約で落ちるため、大量データの更新目的には使えない。