すべてのプロダクト
Search
ドキュメントセンター

PolarDB:LOAD DATA 文を使用したデータのインポート

最終更新日:Mar 29, 2026

LOAD DATA は、テキストファイルから行を読み取り、PolarDB-X テーブルに挿入します。これは、フラットファイルを一括ロードする最も高速な方法であり、ローカルクライアント上のファイル(LOCAL)およびサーバー側のファイルの両方で動作します。

事前準備

  • クライアントで LOAD DATA LOCAL INFILE 文を実行する前に、local-infile を有効化してください。

  • LOAD DATA はトランザクションではありません。 インポート中にデータベースクラッシュなどの障害が発生した場合、一部の行のみが挿入され、他の行は挿入されない可能性があります。大規模なインポート後には、必ず行数を確認してください。

構文

LOAD DATA
    [LOCAL]
    INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [CHARACTER SET charset_name]
    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string']
        [ENCLOSED BY 'char']
        [ESCAPED BY 'char']
    ]
    [LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]
    [IGNORE number {LINES | ROWS}]
    [(col_name_or_mask [, col_name_or_mask] ...)]

パラメーター

パラメーター説明
LOCALクライアントホストからファイルを読み取ります。省略した場合、サーバーホストから読み取ります。
file_nameソースファイルのパスです。相対パスは、クライアントを起動したディレクトリを基準として解決されます。
REPLACE | IGNOREファイル内の行と既存の行でプライマリキーが重複した場合の動作を制御します。詳細については、「プライマリキーの重複処理」をご参照ください。
CHARACTER SET charset_name入力ファイルの文字セットです。
[FIELDS] TERMINATED BY 'string'フィールドデリミタです。デフォルト値:\t(タブ)。
[FIELDS] ENCLOSED BY 'char'フィールド値を囲む文字です。たとえば、ENCLOSED BY '"' を指定すると、挿入前に周囲の二重引用符が削除されます。
[FIELDS] ESCAPED BY 'char'エスケープ文字です。
[LINES] STARTING BY 'string'各行の先頭から解析前に削除するプレフィックスです。
[LINES] TERMINATED BY 'string'行デリミタです。デフォルト値:\n
IGNORE number LINES | IGNORE number ROWS先頭からスキップする行数です。ヘッダ行をスキップするために使用します。たとえば、IGNORE 1 LINES は最初の行をスキップします。
(col_name_or_mask, ...)ファイルの列とテーブルの列をマップします。列名を指定するとその列がインポートされ、ユーザー変数(例:@dummy)を指定するとその列は破棄されます。この句を省略した場合は、列が順番にマップされます。

プライマリキーの重複処理

ファイル内の行とテーブル内の既存の行でプライマリキーが重複した場合、指定するキーワードに応じて以下の動作になります。

キーワード動作使用タイミング
REPLACE既存の行が新しい行で置き換えられます。このファイルには、データの公式かつ最新のバージョンが含まれています。
IGNORE新しい行は静かに破棄され、既存の行が保持されます。ファイルに重複が含まれる可能性があるが、テーブル内の既存データを優先する場合。

ヘッダ行付きの区切り形式ファイルのインポート

以下の例では、パーティションテーブルを作成し、ローカルファイルからデータをロードします。このファイルでは、フィールド区切り文字としてカンマを使用し、各行の先頭から test のプレフィックスを削除し、1 行のヘッダ行をスキップします。

テーブルの作成:

CREATE TABLE test (
    a int(11) NOT NULL DEFAULT '0',
    b varchar(8) NOT NULL,
    PRIMARY KEY (a)
) DBPARTITION BY hash(a);

ソースファイル(~/test.txt):

x,y
test1,2
test2,3
test3,4
test4,5
test5,6
test7,8
test8,9

インポート文:

LOAD DATA LOCAL INFILE '~/test.txt'
    IGNORE
    INTO TABLE test
    FIELDS TERMINATED BY ','
    LINES STARTING BY 'test' TERMINATED BY '\n'
    IGNORE 1 LINES;

STARTING BY 'test' は、各行の先頭から test のプレフィックスを解析前に削除するため、test1,21,2 に変換されます。IGNORE 1 LINESx,y のヘッダ行をスキップします。

期待される結果:

SELECT * FROM test ORDER BY a;
+------+------+
| a    | b    |
+------+------+
|    1 | 2    |
|    2 | 3    |
|    3 | 4    |
|    4 | 5    |
|    5 | 6    |
|    7 | 8    |
|    8 | 9    |
+------+------+
7 rows in set (0.02 sec)

CSV ファイルのインポート

二重引用符で囲まれたフィールドとヘッダ行を持つ標準的な CSV ファイルの場合:

LOAD DATA LOCAL INFILE '/path/to/data.csv'
    INTO TABLE tbl_name
    FIELDS TERMINATED BY ',' ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
    IGNORE 1 LINES;

ソースファイル内の列をスキップ

ターゲットテーブルよりも列数が多いソースファイルから、選択した列のみをインポートするには、不要な列を破棄するプレースホルダーとしてユーザー変数を使用します。

以下の例では、3 列のファイルを 2 列のテーブルにインポートし、2 列目を破棄しています。

-- テーブル:test(x int, y int)
-- ファイルの列:col1, col2(破棄), col3
LOAD DATA LOCAL INFILE '/path/to/data.txt'
    INTO TABLE test
    (x, @dummy, y);

x にはファイルの最初の列の値が割り当てられ、@dummy は 2 列目の値を受けて破棄し、y には 3 列目の値が割り当てられます。