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

AnalyticDB:データ ウェアハウス エディションにデータをインポートするための LOAD DATA の使用

最終更新日:Apr 10, 2025

このトピックでは、LOAD DATA 文を使用して、オンプレミス データを AnalyticDB for MySQL データ ウェアハウス エディション にインポートする方法について説明します。

構文

LOAD DATA LOCAL 
    INFILE 'file_name' 
    [REPLACE | IGNORE] 
    INTO TABLE table_name 
    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string'] 
        [[OPTIONALLY] ENCLOSED BY 'char'] 
    ]
    [LINES
        [TERMINATED BY 'string'] 
    ]
    [IGNORE number {LINES | ROWS}] 
    [(column_name_or_user_var
    [, column_name_or_user_var] ...)]    

パラメーター

パラメーター

説明

LOAD DATA LOCAL INFILE

オンプレミス ファイルからデータをインポートします。すべてのテキスト ファイルがサポートされています。

説明
  • V3.1.10.2 以降および V3.2.0 以降の AnalyticDB for MySQL クラスターでは、CSV ファイルからデータをインポートできます。デフォルトでは、CSV ファイルは OpenCSV 標準に準拠しています。CSV ファイルのカスタム区切り文字は構成できますが、行区切り文字や列ターミネータは構成できません。

  • CSV ファイルの OpenCSV 標準を無効にするには、SET adb_config LOAD_CSV_DATA_WITH_OPENCSV_FORMAT=false 文を実行します。

file_name

オンプレミス ファイルのパス。パスは、ディレクトリとファイル名で構成されます。

説明

file_name パラメーターで指定されたパスが相対パスの場合、オンプレミス ファイルのパスはクライアントのパスからの相対パスになります。

table_name

AnalyticDB for MySQL テーブルの名前。

REPLACE

重複するプライマリキーが使用されている場合、既存のデータをインポートするデータで上書きします。

IGNORE

重複するプライマリキーが使用されている場合、またはデータエラーが発生した場合に、インポートに失敗した行を無視します。特定の行はインポートに失敗する可能性があります。

[FIELDS] TERMINATED BY 'string'

データの列を区切るために使用する区切り文字。デフォルト値は \t で、MySQL データベースの列区切り文字と同じです。

[FIELDS] ENCLOSED BY 'char'

各列のデータを囲むために使用する文字。

たとえば、列のデータが "a" で、ENCLOSED BY "" 句を指定した場合、データがインポートされる前に二重引用符("")が "a" から削除されます。

[LINES] TERMINATED BY 'string'

データの行を区切るために使用する区切り文字。デフォルト値は \n です。

IGNORE number LINES

データをインポートするときに、最初から無視する行数。

たとえば、IGNORE 1 LINES は、データの最初の行が無視され、AnalyticDB for MySQL テーブルにインポートされないことを指定します。

(column_name_or_user_var,...)

インポートする列。このパラメーターを指定しない場合、データは列の順序に基づいてインポートされます。

  • インポートする列の数が AnalyticDB for MySQL テーブルの列の数よりも多い場合、システムは超過分の列を無視します。

  • インポートする列の数が AnalyticDB for MySQL テーブルの列の数よりも少ない場合、インポートされたデータで埋められない列にはデフォルト値が埋められます。

使用上の注意

  • クライアントで local-infile 機能を有効にする必要があります。

    たとえば、MySQL クライアントで local-infile 機能を有効にするには、my.cnf ファイルに次の構成を追加する必要があります。

    cat ~/.my.cnf
    [mysqld]
    local-infile
    [mysql]
    local-infile                    

    my.cnf ファイルの詳細については、「MySQL 公式ドキュメント」をご参照ください。

  • データのインポートでは、操作の原子性を保証できません。

    • IGNORE モードでは、インポートに失敗したデータ行は無視されます。

    • REPLACE モードでは、データ行のインポートに失敗した場合、後続の INSERT 操作は終了します。その結果、特定のデータ行がインポートされない可能性があります。

  • SHOW WARNINGS 文を実行して、失敗した行のエラー メッセージをクエリできます。

この例では、out.bak という名前のオンプレミスファイルのデータが、AnalyticDB for MySQLtest という名前のテーブルにインポートされます。out.bak ファイルには 5,000 行のデータが含まれています。列区切り文字は \t で、行区切り文字は \n です。次のデータエントリに示すように、8 行目のデータは無効です。

1 bb
2 bb
3 bb
4 bb
5 bb
6 bb
7 bb
bb   8
9 bb
...          
  1. 管理する AnalyticDB for MySQL クラスターに接続しますCREATE DATABASE 文と CREATE TABLE 文を実行して、test という名前のテーブルを adb_demo という名前のデータベースに作成し、オンプレミス ファイルからインポートするデータを格納します。

    CREATE TABLE test (
    a int NOT NULL DEFAULT '0', 
    b varchar NOT NULL, 
    PRIMARY KEY (a) 
    ) DISTRIBUTED by HASH(a);                
  2. MySQL クライアントで LOAD DATA 文を実行して、out.bak という名前のオンプレミスファイルから AnalyticDB for MySQLtest という名前のテーブルにデータをインポートします。

    • IGNORE モードで LOAD DATA 文を実行します。このモードでは、特定の行はインポートに失敗する可能性があります。サンプル文:

      LOAD DATA LOCAL INFILE '~/out.bak' IGNORE INTO TABLE test FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' ;

      次の文を実行して、インポート結果をクエリします。

      SELECT COUNT(1) FROM test;
      +----------+
      | count(1) |
      +----------+
      |     4999 |
      +----------+
      1 row in set (0.14 sec)
    • REPLACE モードで LOAD DATA 文を実行します。このモードでは、行のインポートに失敗した場合、後続のインポート操作はすぐに終了します。サンプル文:

      LOAD DATA LOCAL INFILE '~/out.bak' REPLACE INTO TABLE test FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' ;

      サンプル結果:

      ERROR 1064 (42000): [13000, 2019061210070703000511314203303000266] syntax error :syntax error => IDENTIFIER is not value type pos:34 row: 0 and ceil:0
    • データをインポートするときに、最初の 10 行のデータをスキップするには、LOAD DATA 文を実行します。サンプル文:

      LOAD DATA LOCAL INFILE '~/out.bak' REPLACE INTO TABLE test FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' IGNORE 10 LINES;

      サンプル結果:

      Query OK, 4990 rows affected (0.37 sec)