インポートリソースの使用
このドキュメントのtidbcloud_import
リソースを使用して、 TiDB Cloudクラスターにデータをインポートする方法を学習できます。
tidbcloud_import
リソースの機能は次のとおりです。
- TiDB Cloud Serverless およびTiDB Cloud Dedicated クラスターのインポート タスクを作成します。
- ローカルディスクまたは Amazon S3 バケットからデータをインポートします。
- 進行中のインポート タスクをキャンセルします。
前提条件
インポートタスクを作成して実行する
インポート リソースを使用して、ローカル インポート タスクまたは Amazon S3 インポート タスクのいずれかを管理できます。
ローカルインポートタスクを作成して実行する
注記:
ローカル ファイルのインポートは、 TiDB Cloud Serverless クラスターでのみサポートされ、 TiDB Cloud Dedicated クラスターではサポートされません。
インポート用の CSV ファイルを作成します。例:
id;name;age 1;Alice;20 2;Bob;30import
ディレクトリを作成し、その中にmain.tf
を作成します。例:terraform { required_providers { tidbcloud = { source = "tidbcloud/tidbcloud" } } } provider "tidbcloud" { public_key = "your_public_key" private_key = "your_private_key" } resource "tidbcloud_import" "example_local" { project_id = "your_project_id" cluster_id = "your_cluster_id" type = "LOCAL" data_format = "CSV" csv_format = { separator = ";" } target_table = { database = "test" table = "import_test" } file_name = "your_csv_path" }ファイル内のリソース値 (プロジェクト ID、クラスター ID、CSV パスなど) を独自のものに置き換えます。
csv_format
の詳細は設定ページに記載されています。terraform apply
コマンドを実行してインポート タスクを作成し、yes
と入力して作成を確認し、インポートを開始します。$ terraform apply ... Plan: 1 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes tidbcloud_import.example_local: Creating... tidbcloud_import.example_local: Creation complete after 6s [id=781074]terraform state show tidbcloud_import.${resource-name}
使用してインポート タスクのステータスを確認します。$ terraform state show tidbcloud_import.example_local # tidbcloud_import.example_local: resource "tidbcloud_import" "example_local" { all_completed_tables = [ { message = "" result = "SUCCESS" table_name = "`test`.`import_test`" }, ] cluster_id = "1379661944641274168" completed_percent = 100 completed_tables = 1 created_at = "2023-02-06T05:39:46.000Z" csv_format = { separator = ";" } data_format = "CSV" elapsed_time_seconds = 48 file_name = "./t.csv" id = "781074" new_file_name = "2023-02-06T05:39:42Z-t.csv" pending_tables = 0 post_import_completed_percent = 100 processed_source_data_size = "31" project_id = "1372813089191151295" status = "IMPORTING" target_table = { database = "test" table = "import_test" } total_files = 0 total_size = "31" total_tables_count = 1 type = "LOCAL" }数分後にステータスを更新するには
terraform refresh
使用します。$ terraform refresh && terraform state show tidbcloud_import.example_local tidbcloud_import.example_local: Refreshing state... [id=781074] # tidbcloud_import.example_local: resource "tidbcloud_import" "example_local" { all_completed_tables = [ { message = "" result = "SUCCESS" table_name = "`test`.`import_test`" }, ] cluster_id = "1379661944641274168" completed_percent = 100 completed_tables = 1 created_at = "2023-02-06T05:39:46.000Z" csv_format = { separator = ";" } data_format = "CSV" elapsed_time_seconds = 49 file_name = "./t.csv" id = "781074" new_file_name = "2023-02-06T05:39:42Z-t.csv" pending_tables = 0 post_import_completed_percent = 100 processed_source_data_size = "31" project_id = "1372813089191151295" status = "COMPLETED" target_table = { database = "test" table = "import_test" } total_files = 0 total_size = "31" total_tables_count = 1 type = "LOCAL" }ステータスが
COMPLETED
に変わると、インポート タスクが完了したことを示します。MySQL CLI でインポートされたデータを確認します。
mysql> SELECT * FROM test.import_test; +------+-------+------+ | id | name | age | +------+-------+------+ | 1 | Alice | 20 | | 2 | Bob | 30 | +------+-------+------+ 2 rows in set (0.24 sec)
Amazon S3 インポートタスクを作成して実行する
注記:
TiDB Cloud がAmazon S3 バケット内のファイルにアクセスできるようにするには、まずAmazon S3 アクセスを構成する実行する必要があります。
import
ディレクトリを作成し、その中にmain.tf
を作成します。例:terraform { required_providers { tidbcloud = { source = "tidbcloud/tidbcloud" } } } provider "tidbcloud" { public_key = "your_public_key" private_key = "your_private_key" } resource "tidbcloud_import" "example_s3_csv" { project_id = "your_project_id" cluster_id = "your_cluster_id" type = "S3" data_format = "CSV" aws_role_arn = "your_arn" source_url = "your_url" } resource "tidbcloud_import" "example_s3_parquet" { project_id = "your_project_id" cluster_id = "your_cluster_id" type = "S3" data_format = "Parquet" aws_role_arn = "your_arn" source_url = "your_url" }terraform apply
コマンドを実行してインポート タスクを作成し、yes
と入力して作成を確認し、インポートを開始します。$ terraform apply ... Plan: 2 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes tidbcloud_import.example_s3_csv: Creating... tidbcloud_import.example_s3_csv: Creation complete after 3s [id=781075] tidbcloud_import.example_s3_parquet: Creating... tidbcloud_import.example_s3_parquet: Creation complete after 4s [id=781076]terraform refresh
とterraform state show tidbcloud_import.${resource-name}
使用して、インポート タスクのステータスを更新および確認します。
インポートタスクを更新する
インポート タスクを更新できません。
インポートタスクを削除する
Terraform の場合、インポート タスクを削除すると、対応するインポート リソースがキャンセルされます。
COMPLETED
インポート タスクをキャンセルすることはできません。キャンセルすると、次の例のようにDelete Error
取得されます。
$ terraform destroy
...
Plan: 0 to add, 0 to change, 1 to destroy.
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes
tidbcloud_import.example_local: Destroying... [id=781074]
╷
│ Error: Delete Error
│
│ Unable to call CancelImport, got error: [DELETE /api/internal/projects/{project_id}/clusters/{cluster_id}/imports/{id}][500] CancelImport default &{Code:59900104 Details:[] Message:failed to cancel
│ import}
╵
ステータスがIMPORTING
インポート タスクをキャンセルできます。例:
$ terraform destroy
...
Plan: 0 to add, 0 to change, 1 to destroy.
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes
tidbcloud_import.example_local: Destroying... [id=781074]
tidbcloud_import.example_local: Destruction complete after 0s
Destroy complete! Resources: 1 destroyed.
構成
インポート リソースで使用可能なすべての構成を取得するには、 構成ドキュメント参照してください。