2023-05-15

[]20ドル払ったら解決するのかなぁ

User

LOAD DATA INFILEでCSVを分割して読み込むことは可能なのでしょうか。そのときautoincrementのidがあった場合はどうしたらよろしいでしょうか。

ChatGPT

はい、LOAD DATA INFILEステートメント使用してCSVファイルを分割して読み込むことは可能です。CSVファイルを分割するには、LOAD DATA INFILEステートメントファイル名の部分にワイルドカード使用することができます

以下は、例としてMySQLデータベースでのLOAD DATA INFILEステートメント使用方法です。

LOAD DATA INFILE 'path/to/files/file*.csv'
INTO TABLE your_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(col1, col2, col3); -- 列のリスト

上記の例では、path/to/files/ディレクトリ内のfile*.csvというパターンに一致するすべてのCSVファイルが読み込まれます。また、FIELDS TERMINATED BY句とLINES TERMINATED BY句を使用して、フィールドと行の区切り文字指定していますさらに、col1, col2, col3のように列のリスト指定することで、CSVファイル対応する列とテーブルの列をマッピングします。

autoincrementのidがある場合、LOAD DATA INFILEステートメントでは自動的に次の値を生成することはできません。そのため、CSVファイル内に明示的にid列が存在する場合は、id列を指定して読み込む必要がありますid列がCSVファイル存在しない場合は、テーブル定義id列をautoincrementに設定しておく必要があります。その場合データベース自動的に新しい値を生成します。

例えば、以下のようなテーブル定義があるとします。

CREATE TABLE your_table (
  id INT AUTO_INCREMENT PRIMARY KEY,
  col1 VARCHAR(50),
  col2 VARCHAR(50),
  col3 VARCHAR(50)
);

この場合、LOAD DATA INFILEステートメントid列を省略することで、自動的に新しい値が生成されます

LOAD DATA INFILE 'path/to/files/file*.csv'
INTO TABLE your_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(col1, col2, col3);

このようにして、CSVファイルデータを分割して読み込むことができます。ただし、autoincrementのid列は明示的に指定するか、データベースによって自動的に生成されるようにテーブルを設定する必要があります

結論

SETしないと動かない。

分割するとauto incrementの値が飛ぶ。

結局問題解決になってない。

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん