データを読み込む

LOAD DATAステートメントのバッチは、データを TiDB テーブルにロードします。

あらすじ

LoadDataStmt
LOADDATALocalOptINFILEstringLitDuplicateOptINTOTABLETableNameCharsetOptFieldsLinesIgnoreLinesColumnNameOrUserVarListOptWithBracketsLoadDataSetSpecOpt

パラメーター

LocalOpt

LocalOptパラメータを構成することにより、インポートされたデータ ファイルがクライアントまたはサーバーに配置されるように指定できます。現在、TiDB はクライアントからのデータ インポートのみをサポートしています。したがって、データをインポートするときは、 LocalOptからLocalの値を設定します。

FieldsLines

パラメータFieldsLinesを設定することで、データ形式の処理方法を指定できます。

  • FIELDS TERMINATED BY : 各データの区切り文字を指定します。
  • FIELDS ENCLOSED BY : 各データの囲み文字を指定します。
  • LINES TERMINATED BY : 特定の文字で行を終了する場合は、行ターミネータを指定します。

例として、次のデータ形式を取り上げます。

"bob","20","street 1"\r\n "alice","33","street 1"\r\n

bob20 、およびstreet 1を抽出する場合は、区切り文字を','として指定し、囲み文字を'\"'として指定します。

FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n'

上記のパラメーターを指定しない場合、インポートされたデータはデフォルトで次のように処理されます。

FIELDS TERMINATED BY '\t' ENCLOSED BY '' LINES TERMINATED BY '\n'

IGNORE number LINES

IGNORE number LINESパラメータを設定すると、ファイルの最初のnumber行を無視できます。たとえば、 IGNORE 1 LINESを構成すると、ファイルの最初の行は無視されます。

CREATE TABLE trips ( trip_id bigint NOT NULL PRIMARY KEY AUTO_INCREMENT, duration integer not null, start_date datetime, end_date datetime, start_station_number integer, start_station varchar(255), end_station_number integer, end_station varchar(255), bike_number varchar(255), member_type varchar(255) );
Query OK, 0 rows affected (0.14 sec)

次の例では、 LOAD DATAを使用してデータをインポートします。区切り文字としてカンマを指定します。データを囲む二重引用符は無視されます。ファイルの最初の行は無視されます。

エラー メッセージERROR 1148 (42000): the used command is not allowed with this TiDB versionが表示された場合は、 エラー 1148 (42000): 使用されたコマンドは、この TiDB バージョンでは許可されていませんを参照してください。

LOAD DATA LOCAL INFILE '/mnt/evo970/data-sets/bikeshare-data/2017Q4-capitalbikeshare-tripdata.csv' INTO TABLE trips FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (duration, start_date, end_date, start_station_number, start_station, end_station_number, end_station, bike_number, member_type);
Query OK, 815264 rows affected (39.63 sec) Records: 815264 Deleted: 0 Skipped: 0 Warnings: 0

LOAD DATAは、 FIELDS ENCLOSED BYおよびFIELDS TERMINATED BYのパラメータとして、16 進 ASCII 文字式またはバイナリ ASCII 文字式の使用もサポートします。次の例を参照してください。

LOAD DATA LOCAL INFILE '/mnt/evo970/data-sets/bikeshare-data/2017Q4-capitalbikeshare-tripdata.csv' INTO TABLE trips FIELDS TERMINATED BY x'2c' ENCLOSED BY b'100010' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (duration, start_date, end_date, start_station_number, start_station, end_station_number, end_station, bike_number, member_type);

上記の例では、 x'2c',文字の 16 進数表現であり、 b'100010'"文字の 2 進数表現です。

MySQL の互換性

このステートメントは、解析されても無視される文字セット オプションを除いて、MySQL と完全に互換性があると理解されています。互換性の違いが見つかった場合は、GitHub で問題を介して報告するできます。

ノート:

TiDB の以前のリリースでは、20000 行ごとにLOAD DATAコミットされていました。デフォルトでは、TiDB はすべての行を 1 つのトランザクションでコミットするようになりました。これにより、TiDB 4.0 以前のバージョンからアップグレードした後にエラーERROR 8004 (HY000) at line 1: Transaction is too large, size: 100000058が発生する可能性があります。

このエラーを解決するための推奨される方法は、 tidb.tomlファイルのtxn-total-size-limitの値を増やすことです。この制限を増やすことができない場合は、 tidb_dml_batch_sizeから20000に設定することで以前の動作を復元することもできます。

こちらもご覧ください