このトピックでは、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] ...)] パラメーター
パラメーター | 説明 |
| オンプレミス ファイルからデータをインポートします。すべてのテキスト ファイルがサポートされています。 説明
|
| オンプレミス ファイルのパス。パスは、ディレクトリとファイル名で構成されます。 説明
|
| AnalyticDB for MySQL テーブルの名前。 |
| 重複するプライマリキーが使用されている場合、既存のデータをインポートするデータで上書きします。 |
| 重複するプライマリキーが使用されている場合、またはデータエラーが発生した場合に、インポートに失敗した行を無視します。特定の行はインポートに失敗する可能性があります。 |
| データの列を区切るために使用する区切り文字。デフォルト値は |
| 各列のデータを囲むために使用する文字。 たとえば、列のデータが |
| データの行を区切るために使用する区切り文字。デフォルト値は |
| データをインポートするときに、最初から無視する行数。 たとえば、 |
| インポートする列。このパラメーターを指定しない場合、データは列の順序に基づいてインポートされます。
|
使用上の注意
クライアントで
local-infile機能を有効にする必要があります。たとえば、MySQL クライアントで
local-infile機能を有効にするには、my.cnfファイルに次の構成を追加する必要があります。cat ~/.my.cnf [mysqld] local-infile [mysql] local-infilemy.cnfファイルの詳細については、「MySQL 公式ドキュメント」をご参照ください。データのインポートでは、操作の原子性を保証できません。
IGNOREモードでは、インポートに失敗したデータ行は無視されます。REPLACEモードでは、データ行のインポートに失敗した場合、後続のINSERT操作は終了します。その結果、特定のデータ行がインポートされない可能性があります。
SHOW WARNINGS文を実行して、失敗した行のエラー メッセージをクエリできます。
例
この例では、out.bak という名前のオンプレミスファイルのデータが、AnalyticDB for MySQL の test という名前のテーブルにインポートされます。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
... 管理する 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);MySQL クライアントで LOAD DATA 文を実行して、
out.bakという名前のオンプレミスファイルから AnalyticDB for MySQL のtestという名前のテーブルにデータをインポートします。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)