ローカル ファイルをTiDB Cloudにインポートする
ローカル ファイルをTiDB Cloudに直接インポートできます。数回クリックするだけでタスク構成が完了し、ローカル CSV データが TiDB クラスターにすぐにインポートされます。この方法を使用すると、クラウドstorageバケット パスとロール ARN を指定する必要がありません。インポートプロセス全体は迅速かつスムーズです。
現在、この方法では、1 つのタスクに対して 1 つの CSV ファイルを既存のテーブルまたは新しいテーブルにインポートすることがサポートされています。
制限事項
- 現在、 TiDB Cloudは、1 つのタスクに対して 50 MiB 以内の CSV 形式でのローカル ファイルのインポートのみをサポートしています。
- ローカル ファイルのインポートは、TiDB サーバーレス クラスターでのみサポートされており、TiDB 専用クラスターではサポートされていません。
- 複数のインポート タスクを同時に実行することはできません。
- CSV ファイルをTiDB Cloudの既存のテーブルにインポートし、ターゲット テーブルにソース ファイルよりも多くの列がある場合、追加の列は状況に応じて異なる方法で処理されます。
- 追加の列が主キーまたは一意キーではない場合、エラーは報告されません。代わりに、これらの追加の列にはデフォルト値が設定されます。
- 追加の列が主キーまたは一意キーであり、
auto_increment
またはauto_random
属性を持たない場合、エラーが報告されます。その場合は、次のいずれかの戦略を選択することをお勧めします。- これらの主キー列または一意キー列を含むソース ファイルを提供します。
- 主キーまたは一意キー列の属性を
auto_increment
またはauto_random
に設定します。
- 列名が TiDB で予約されているキーワードの場合、 TiDB Cloud は自動的にバッククォート
`
を追加して列名を囲みます。たとえば、列名がorder
の場合、 TiDB Cloud は自動的にバッククォート`
追加して`order`
に変更し、データをターゲット テーブルにインポートします。
ローカルファイルをインポートする
ターゲットクラスターのインポートページを開きます。
TiDB Cloudコンソールにログインし、プロジェクトのクラスターページに移動します。
ヒント:
複数のプロジェクトがある場合は、
左下隅の をクリックして、別のプロジェクトに切り替えます。 ターゲット クラスターの名前をクリックして概要ページに移動し、左側のナビゲーション ペインで[インポート]をクリックします。
[**インポート]**ページでは、ローカル ファイルをアップロード領域に直接ドラッグ アンド ドロップするか、アップロード領域をクリックして対象のローカル ファイルを選択してアップロードできます。 1 つのタスクに対してアップロードできるのは、50 MiB 未満の CSV ファイル 1 つだけであることに注意してください。ローカル ファイルが 50 MiB より大きい場合は、 50 MiB を超えるローカル ファイルをインポートするにはどうすればよいですか?を参照してください。
[ターゲット]領域で、ターゲット データベースとターゲット テーブルを選択するか、名前を直接入力して新しいデータベースまたは新しいテーブルを作成します。名前は文字 (a から z と AZ) または数字 (0 から 9) で始まる必要があり、文字 (a から z と AZ)、数字 (0 から 9)、およびアンダースコア (_) 文字を含めることができます。 「プレビュー」をクリックします。
表を確認してください。
構成可能なテーブル列のリストが表示されます。各行には、 TiDB Cloudによって推定されたテーブル列名、推定されたテーブル列タイプ、および CSV ファイルからプレビューされたデータが表示されます。
TiDB Cloudの既存のテーブルにデータをインポートする場合、テーブル定義から列リストが抽出され、プレビューされたデータが列名によって対応する列にマッピングされます。
新しいテーブルを作成する場合は、CSV ファイルから列リストが抽出され、 TiDB Cloudによって列タイプが推測されます。たとえば、プレビューされたデータがすべて整数の場合、推論される列の型はint (整数) になります。
列名とデータ型を設定します。
CSV ファイルの最初の行に列名が記録されている場合は、[**最初の行を列名として使用]**が選択されていることを確認してください。これはデフォルトで選択されています。
CSV ファイルに列名の行がない場合は、 「最初の行を列名として使用」を選択しないでください。この場合:
対象テーブルがすでに存在する場合、CSV ファイル内の列が順番に対象テーブルにインポートされます。余分な列は切り捨てられ、欠落している列にはデフォルト値が埋められます。
ターゲット テーブルを作成するためにTiDB Cloudが必要な場合は、各列の名前を入力します。列名は次の要件を満たす必要があります。
- 名前は、文字 (a ~ z と A ~ Z)、数字 (0 ~ 9)、文字 (中国語や日本語など)、およびアンダースコア (
_
) 文字のみで構成されている必要があります。 - 他の特殊文字はサポートされていません。
- 名前の長さは 65 文字未満である必要があります。
必要に応じてデータ型を変更することもできます。
- 名前は、文字 (a ~ z と A ~ Z)、数字 (0 ~ 9)、文字 (中国語や日本語など)、およびアンダースコア (
新しいターゲット テーブルの場合、主キーを設定できます。列を主キーとして選択することも、複数の列を選択して複合主キーを作成することもできます。複合主キーは、列名を選択した順序で作成されます。
注記:
- テーブルの主キーはクラスター化インデックスであり、作成後に削除することはできません。
- 主キー フィールドに対応するデータが一意であり、空でないことを確認してください。そうしないと、インポート タスクでデータの不整合が発生します。
必要に応じて CSV 構成を編集します。
また、 [CSV 構成の編集]をクリックして、バックスラッシュ エスケープ、区切り記号、および区切り記号を構成して、よりきめ細かい制御を行うこともできます。 CSV 構成の詳細については、 データをインポートするための CSV 構成を参照してください。
[プレビュー]ページでは、データのプレビューを表示できます。 [インポートの開始]をクリックします。
インポートの進行状況は、「インポート タスクの詳細」ページで確認できます。警告や失敗したタスクがある場合は、詳細を確認して解決することができます。
インポート タスクが完了したら、 [Chat2Query でデータを探索]をクリックして、インポートされたデータをクエリできます。 Chat2Query の使用方法の詳細については、 AI を活用した Chat2Query でデータを探索するを参照してください。
[インポート]ページで、 [アクション]列の[ビュー]をクリックして、インポート タスクの詳細を確認できます。
FAQ
TiDB Cloudのインポート機能を使用して、指定した一部の列のみをインポートできますか?
いいえ。現在、インポート機能を使用する場合、CSV ファイルのすべての列を既存のテーブルにインポートすることしかできません。
指定した一部の列のみをインポートするには、MySQL クライアントを使用して TiDB クラスターに接続し、 LOAD DATA
を使用してインポートする列を指定します。例えば:
CREATE TABLE `import_test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL,
`address` varchar(64) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
LOAD DATA LOCAL INFILE 'load.txt' INTO TABLE import_test FIELDS TERMINATED BY ',' (name, address);
mysql
を使用してERROR 2068 (HY000): LOAD DATA LOCAL INFILE file request rejected due to restrictions on access.
見つかった場合は、接続文字列に--local-infile=true
を追加できます。
TiDB Cloudにデータをインポートした後、予約済みキーワードを含む列をクエリできないのはなぜですか?
列名が TiDB で予約されているキーワード場合、 TiDB Cloud は自動的にバッククォート`
追加して列名を囲み、データをターゲット テーブルにインポートします。列をクエリするときは、バッククォート`
を追加して列名を囲む必要があります。たとえば、列名がorder
の場合、その列に対して`order`
をクエリする必要があります。
50 MiB を超えるローカル ファイルをインポートするにはどうすればよいですか?
ファイルが 50 MiB より大きい場合は、 split [-l ${line_count}]
ユーティリティを使用してファイルを複数の小さいファイルに分割できます (Linux または macOS のみ)。たとえば、 split -l 100000 tidb-01.csv small_files
を実行すると、 tidb-01.csv
という名前のファイルが行長100000
で分割され、分割されたファイルの名前はsmall_files${suffix}
なります。次に、これらの小さなファイルを 1 つずつTiDB Cloudにインポートできます。
次のスクリプトを参照してください。
#!/bin/bash
n=$1
file_path=$2
file_extension="${file_path##*.}"
file_name="${file_path%.*}"
lines_per_file=$(( $(wc -l < $file_path) / $n ))
split -d -a 1 -l $lines_per_file $file_path $file_name.
for (( i=0; i<$n; i++ ))
do
mv $file_name.$i $file_name.$i.$file_extension
done
n
とファイル名を入力して、スクリプトを実行できます。スクリプトは、元のファイル拡張子を維持したまま、ファイルをn
の等しい部分に分割します。例えば:
> sh ./split.sh 3 mytest.customer.csv
> ls -h | grep mytest
mytest.customer.0.csv
mytest.customer.1.csv
mytest.customer.2.csv
mytest.customer.csv