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

AnalyticDB:インポートとエクスポート

最終更新日:Nov 09, 2025

このトピックでは、AnalyticDB MySQL でのデータのインポートとエクスポートに関する一般的な問題と解決策について説明します。

説明

一般的な問題のシナリオでプロダクトシリーズが指定されていない場合、その問題は AnalyticDB for MySQL Data Warehouse Edition にのみ適用されます。

一般的な問題の概要

非同期のインポートまたはエクスポートタスクを停止するにはどうすればよいですか?

AnalyticDB for MySQLコンソールにログインし、診断の最適化 ページの インポート/エクスポートタスク タブでターゲットの非同期タスクを見つけ、非同期タスクの 非同期タスク名 を確認してから、CANCEL JOB "${非同期タスク名}" 文を実行して非同期タスクをキャンセルします。非同期のインポートおよびエクスポートタスクの詳細については、「非同期インポートタスクの送信」をご参照ください。

SQL を使用して現在のデータベースで実行中のインポートタスクを表示するにはどうすればよいですか?

次の SQL 文を使用してクエリを実行します:

SELECT * FROM INFORMATION_SCHEMA.kepler_meta_async_jobs where status = "RUNNING"

JDBC を使用して AnalyticDB for MySQL クラスターにデータをインポートする際のパフォーマンスが低いのはなぜですか?

  • データソースのデータ生成速度が十分に速いことを確認します。データソースが別のシステムまたはファイルからのものである場合は、クライアントに出力のボトルネックがないか確認します。

  • データ処理速度を確保します。データの生成と消費が同期しているかを確認し、AnalyticDB for MySQL へのインポートを待機しているデータが十分にあることを確認します。

  • クライアントホストで適切なワークロードを維持しながら、CPU 使用率またはディスク I/O 使用量を確認して、システムリソースが十分であるかどうかを判断します。

Data Lakehouse Edition クラスター (APS) のインジェストエンドポイントには別途料金が発生しますか?

いいえ、インジェストエンドポイントに料金は発生しません。ただし、APS タスクはクラスターのリソースグループで実行する必要があり、リソースを消費してリソースコストが発生します。

OSS 外部テーブルを介してデータをインポートまたはエクスポートする場合、内部ネットワークアドレスとインターネットアドレスのどちらを選択すべきですか?

AnalyticDB for MySQL のバックエンドノードはインターネットではなく内部ネットワークを介して OSS にアクセスするため、OSS 外部テーブルを作成する際には内部ネットワークアドレスを選択する必要があります。

MaxCompute 外部テーブルの作成時に endpoint unreachable エラーを解決するにはどうすればよいですか?

原因: MaxCompute 外部テーブルの作成時に、指定された endpoint にアクセスできないため、endpoint unreachable エラーが発生します。

解決策: ENI ネットワークを有効にし、テーブル作成文の endpoint をインスタンスが配置されているリージョンに対応する VPC ネットワークのエンドポイントに置き換えてから、テーブル作成文を再度実行します。

重要
  • ENI ネットワークを有効または無効にすると、データベース接続が約 2 分間中断され、その間は読み取りと書き込みができません。ENI ネットワークを有効または無効にする前に、影響を慎重に評価してください。

  • AnalyticDB for MySQL コンソールにログインし、[クラスター管理] > [クラスター情報] に移動し、[ネットワーク情報] セクションで ENI ネットワークスイッチをオンにします。

MaxCompute 外部テーブルの作成時に Odps external table endpoint should not contain special character エラーを解決するにはどうすればよいですか?

原因: MaxCompute 外部テーブルの作成時に、endpoint の構成が正しくありません。

解決策: テーブル作成文の endpointインスタンスが配置されているリージョンに対応する VPC ネットワークのエンドポイントに置き換えてから、テーブル作成文を再度実行します。

MaxCompute 外部テーブルの作成時に Project not found - 'xxx' エラーを解決するにはどうすればよいですか?

  • 原因 1: プロジェクトが MaxCompute に存在しないか、プロジェクト名が間違っています。

    解決策: テーブル作成文のプロジェクト名を修正し、外部テーブルを再度作成します。

  • 原因 2: プロジェクトは MaxCompute に存在しますが、AnalyticDB for MySQL クラスターと同じリージョンにありません。

    解決策: AnalyticDB for MySQL クラスターと MaxCompute プロジェクトが同じリージョンにあることを確認してから、外部テーブルを再度作成します。

MaxCompute データのインポート時に「Roll back this write and commit by writing one row at a time」エラーを解決するにはどうすればよいですか?

原因: AnalyticDB MySQL 接続レイヤーの制限により、DataX を使用してデータをインポートする際にこのエラーが発生することがあります。

解決策: JDBC 接続文字列に rewriteBatchedStatements=false パラメーターを追加して変更し、データを再度インポートします。

MaxCompute データのインポート時に Query Exceeded Maximum Time Limit エラーを解決するにはどうすればよいですか?

原因: MaxCompute テーブルが大きいため、データのインポートに時間がかかり、AnalyticDB MySQL の INSERT 操作の時間制限を超えてしまいます。

解決策: INSERT_SELECT_TIMEOUT パラメーターを変更してから、データを再度インポートします。具体的な操作については、「Config および Hint の構成パラメーター」をご参照ください。

MaxCompute データのインポート時に cant submit job for job queue is full エラーを解決するにはどうすればよいですか?

原因: AnalyticDB for MySQL クラスターで同時に実行されている非同期タスクの数が制限を超えています。チケットを送信してテクニカルサポートに連絡し、クラスターで同時に実行できる非同期タスクの数の制限について問い合わせることができます。

解決策:

  • 送信された非同期タスクが完了するのを待ってから、非同期インポートタスクを再度送信する必要があります。非同期タスクのステータスのクエリ方法については、「非同期インポートタスクの送信」をご参照ください。

  • チケットを送信してテクニカルサポートに連絡し、クラスターで同時に実行できる非同期タスクの数の制限を変更することができます。

MaxCompute データのインポート時に Query execution error: odps partition num: 191 > 192, specific odps partitions エラーを解決するにはどうすればよいですか?

原因: AnalyticDB for MySQL クラスターによって同時にインポートされるパーティションの数が制限を超えています。

解決策: MaxCompute テーブルの特定のパーティション数に基づいて、SQL 文の前に Hint /*RC_INSERT_ODPS_MAX_PARTITION_NUM=<value>*/ を追加して、パーティションの制限を調整します。

MaxCompute データのクエリ時に ODPS Table XXX should be a partitioned table and has at least one partition in max_pt() function エラーを解決するにはどうすればよいですか?

原因: MaxCompute 外部テーブルが非パーティション外部テーブルであるため、MAX_PT 関数がエラーを報告します。

解決策: MaxCompute テーブルがパーティションテーブルであり、少なくとも 1 つのパーティションがあることを確認します。その後、MaxCompute 外部テーブルを再作成し、MAX_PT 関数を使用して外部テーブルデータをクエリします。

MaxCompute データのクエリ時に ErrorCode=NoSuchPartition, ErrorMessage=The specified partition does not exist エラーを解決するにはどうすればよいですか?

原因: MaxCompute 外部テーブルにパーティションがありません。

解決策: MaxCompute テーブルがパーティションテーブルであり、少なくとも 1 つのパーティションがあることを確認します。その後、MaxCompute 外部テーブルを再作成し、外部テーブルデータをクエリします。

MaxCompute データのクエリ時に Receive error response with code 500 エラーを解決するにはどうすればよいですか?

原因: AnalyticDB for MySQL は Native エンジンを使用して SQL 文を実行しますが、Native エンジンは MaxCompute 外部テーブルをサポートしていません。

解決策: SQL 文の前に Hint /*native_engine_task_enabled=false*/ を追加して Native エンジンを無効にし、Java エンジンを使用して SQL 文を実行します。

MaxCompute データのクエリ時に Query execution error を解決するにはどうすればよいですか?

  • 原因 1: MaxCompute の権限構成が正しくなく、AccessKey が MaxCompute テーブルを正しく読み取ることができません。

    解決策: MaxCompute の読み取りおよび書き込み権限を変更し、データを再度クエリします。

  • 原因 2: AnalyticDB for MySQL のテーブル構造と列名が MaxCompute のものと一致しません。

    解決策: MaxCompute テーブルと一致するテーブル構造と列名を持つ外部テーブルを AnalyticDB MySQL に再作成し、データを再度クエリします。

  • 原因 3: MaxCompute に対応するパーティションが存在しません。

    解決策: データクエリ文で指定された MaxCompute パーティションを変更し、データを再度クエリします。

  • 原因 4: MaxCompute に小さなファイルが多すぎます。

    解決策: MaxCompute で小さなファイルのマージ機能を有効にし、データを再度クエリします。文の例は次のとおりです。MaxCompute での小さなファイルのマージの詳細については、「小さなファイルをマージする」をご参照ください。

    ALTER TABLE tablename [PARTITION] MERGE SMALLFILES;

MaxCompute から AnalyticDB MySQL クラスターに配列型のデータをインポートするにはどうすればよいですか?

原因: MaxCompute 外部テーブルはネストされた型をサポートしていないため、array<string> 型のデータを直接 AnalyticDB MySQL にインポートすることはできません。

解決策: MaxCompute から OSS に Parquet 形式でデータをインポートできます。その後、AnalyticDB for MySQL は OSS に Parquet 形式で保存されているデータを読み取ることができます。

MaxCompute データのインポート速度を最適化するにはどうすればよいですか?

  • データノードの負荷が低い場合は、SQL_OUTPUT_BATCH_SIZE の値を調整してから、データを再度インポートできます。文の例は次のとおりです:

    set adb_config SQL_OUTPUT_BATCH_SIZE = 6000;
  • MaxCompute パーティションが多すぎる場合は、ENABLE_ODPS_MULTI_PARTITION_PART_MATCH の値を false に変更してから、データを再度インポートできます。文の例は次のとおりです:

    set adb_config ENABLE_ODPS_MULTI_PARTITION_PART_MATCH=false;

それでも問題が解決しない場合は、チケットを送信して Alibaba Cloud テクニカルサポートにお問い合わせください。

INSERT OVERWRITE 文を使用して AnalyticDB MySQL クラスターから MaxCompute 外部テーブルにデータをエクスポートする際に、データが上書きされないのはなぜですか?

MaxCompute 外部テーブルはデータの上書きをサポートしていません。

INSERT INTO SELECT 文を使用して MaxCompute 外部テーブルにデータを書き込む際に、ErrorCode=SlotExceeded, ErrorMessage=Region: cn-hangzhou Project: XXX Slot Quota Exceeded エラーが発生するのはなぜですか?

原因: MaxCompute 外部テーブルにデータを書き込む際に、書き込みスロットが MaxCompute の制限を超えています。

解決策: 次の 2 つの方法のいずれかを選択します:

  • データ転送にデータサービススタジオ専用リソースグループを使用できます。パブリックなデータ転送サービスリソースグループと比較して、専用のデータ転送サービスリソースグループにはより多くのスロットクォータがあります。

  • INSERT INTO SELECT インポートタスクのデフォルトの同時実行数は 16 です。SQL 文の前に Hint /*TASK_WRITER_COUNT=<value>*/ を追加して、同時実行数を減らすことができます。値の範囲は 0 より大きい整数です。

INSERT INTO SELECT 文を使用して MaxCompute 外部テーブルにデータを書き込む際に、Catalog Service Failed. ErrorCode:202. ErrorMessage:ODPS-0110044: Flow control triggered - Request rejected by catalog server throttling, threshold 8.00, fallback or retry later エラーが発生するのはなぜですか?

原因: MaxCompute 外部テーブルにデータを書き込む際に、新しいパーティションが関与する場合、MaxCompute 側で createPartition が呼び出されてパーティションが作成されます。パーティションの作成頻度が高すぎると、MaxCompute のフロー制御メカニズムがトリガーされ、エラーが発生します。

解決策: INSERT INTO SELECT インポートタスクで複数のパーティションが同時に書き込まれているかどうかを確認します。もしそうであれば、SQL 文の前に Hint /*TASK_WRITER_COUNT=<value>*/ を追加して同時実行数を減らします。値の範囲は 0 より大きい整数です。そうでない場合は、チケットを送信してテクニカルサポートに連絡して支援を求めてください。

インポートされた MaxCompute データ量が AnalyticDB MySQL クラスター内のデータ量と一致しないのはなぜですか?

原因: AnalyticDB MySQL は重複するプライマリキーデータを削除します。

解決策: MaxCompute に重複するプライマリキーデータがあるかどうかを確認してください。

ソースデータベースに AnalyticDB MySQL クラスターでサポートされていないデータ型が含まれている場合、DTS がデータを AnalyticDB MySQL クラスターに同期する際にエラーが発生しますか?

ソースデータベースに AnalyticDB for MySQL でサポートされていないデータ型 (地理的位置データ型など) が含まれている場合、AnalyticDB for MySQL は初期スキーマ同期中にサポートされていないデータ型の列を破棄します。

サポートされているデータ型の詳細については、「基本データ型」および複合データ型をご参照ください。

DTS は、データを AnalyticDB MySQL クラスターに同期する際に、ソーステーブルのフィールド型を変更することをサポートしていますか?

データ同期中に、ソーステーブルのフィールド型を変更できます。現在、整数データ型間および浮動小数点データ型間の変更のみがサポートされています。値の範囲が小さいデータ型から大きいデータ型への変更、または単精度データ型から倍精度データ型への変更のみが可能です。

  • 整数データ型: Tinyint、Smallint、Int、および Bigint の間で、小さい型から大きい型への変更がサポートされています。たとえば、Tinyint から Bigint への変更はサポートされていますが、Bigint から Tinyint への変更はサポートされていません。

  • 浮動小数点データ型: Float から Double への変更はサポートされていますが、Double から Float への変更はサポートされていません。

DTS がデータを AnalyticDB MySQL クラスターに同期する際に、ソーステーブルのデータ型を変更したことによるエラーを解決するにはどうすればよいですか?

エラー:

  • 'id' is LONG type, Can't change column type to DECIMAL
  • modify precision is not supported, col=id, type decimal, old=11, new=21

原因: 詳細については、「DTS は、データを AnalyticDB MySQL クラスターに同期する際に、ソーステーブルのフィールド型を変更することをサポートしていますか?」をご参照ください。

解決策:

  • データベース全体の同期ではない場合: このテーブルを再同期することをお勧めします (つまり、まず同期オブジェクトから削除し、次にターゲットデータベースでテーブルを削除し、その後このテーブルを同期オブジェクトに追加します)。DTS は、スキーマの取得を含む完全な同期を再度実行し、このタイプの DDL をスキップします。

  • データベース全体の同期の場合: エラーを報告したテーブルとは異なる名前で AnalyticDB MySQL に新しいテーブルを作成します。テーブル構造はソーステーブル構造と一致している必要があります。INSERT INTO SELECT を使用して、ソーステーブルから新しく作成されたテーブルにデータを書き込み、エラーを報告したテーブルを削除し、Rename を使用して新しいテーブルの名前をエラーを報告したテーブルの名前に変更します。DTS タスクを再起動します。

DTS がデータを AnalyticDB MySQL クラスターに同期する際に、無効な日付値によるエラーを解決するにはどうすればよいですか?

エラー:

Cannot parse "2013-05-00 00:00:00": Value 0 for dayOfMonth must be in the range [1,31]]

原因: AnalyticDB MySQL は無効な日付値の書き込みをサポートしていません。

解決策:

  • タスクが完全初期化フェーズにある場合は、ソーステーブルの値を有効な値に変更します (たとえば、上記のエラー値を 2013-05-01 00:00:00 に変更します)。

  • タスクが増分同期フェーズにある場合は、このテーブルを同期オブジェクトから削除し、ソーステーブルの値を有効な値に変更し、テーブルを同期オブジェクトに再度追加してから、同期タスクを再起動します。

  • タスクがデータベース全体の増分同期フェーズにある場合は、Alibaba Cloud テクニカルサポートに連絡して、無効な値の書き込みスイッチを有効にしてください。スイッチが有効になると、すべての無効な値の書き込みは null に変換されます。

DTS がデータを AnalyticDB MySQL クラスターに同期する際に、プライマリキーのないテーブルを同期したことによるエラーを解決するにはどうすればよいですか?

エラー:

DTS-077004: Record Replicator error. cause by [[17003,2020051513063717201600100703453067067] table not exist => xxx_table] 

原因: 現在、AnalyticDB MySQL はプライマリキーのないテーブルの同期をサポートしていません。

解決策: これはデータベース全体の同期中にのみ発生します。まず、ソースデータベースのテーブルにプライマリキーがないかどうかを判断する必要があります。もしそうであれば、ターゲットデータベースに手動でテーブルを作成し、新しく作成されたテーブルにプライマリキーがあることを確認してください。テーブルを作成した後、DTS タスクを再起動します。

DTS がデータを AnalyticDB MySQL クラスターに同期する際に、テーブルフィールドのデフォルト値が長すぎることによるエラーを解決するにはどうすればよいですか?

エラー:

default value is too long

解決策: チケットを送信して Alibaba Cloud テクニカルサポートに連絡し、AnalyticDB MySQL クラスターを最新バージョンにアップグレードしてください。

DTS がデータを AnalyticDB MySQL クラスターに同期する際に、16 MB を超えるレコードを書き込んだことによるエラーを解決するにはどうすればよいですか?

エラー:

com.mysql.jdbc.PacketTooBigException: Packet for query is too large (120468711 > 33554432). You can change this value on the server by setting the max_allowed_packet' variable.

解決策: チケットを送信して Alibaba Cloud テクニカルサポートに連絡し、AnalyticDB MySQL クラスターを最新バージョンにアップグレードしてください。

DTS がデータを AnalyticDB MySQL クラスターに同期する際に、ディスク領域が不足していることによるエラーを解決するにはどうすればよいですか?

エラー:

disk is over flow

解決策: 一部のデータを削除して十分なディスク領域を解放するか、Alibaba Cloud テクニカルサポートに連絡して AnalyticDB MySQL クラスターをスケールアウトします。十分なディスク領域があることを確認した後、DTS タスクを再起動します。

DTS がデータを AnalyticDB MySQL クラスターに同期する際に、テーブルまたはフィールドが見つからないことによるエラーを解決するにはどうすればよいですか?

エラー:

table not exist => t1

解決策: まず、DTS を構成する際にすべての DDL 同期 (テーブル作成文やその他の DDL 文など) を選択したかどうかを確認します。選択していない場合は、選択してください。

DTS がデータを AnalyticDB MySQL クラスターに同期する際に、マージされたフィールドから値を取得できない問題を解決するにはどうすればよいですか?

エラー:

No value present 

原因: 複数テーブルのマージシナリオで、ソーステーブルのいずれかのフィールドが変更された場合 (たとえば、新しいフィールドが追加された場合)、複数のソーステーブルのフィールドが不整合になります。ターゲットテーブルにデータを書き込む際に、上記のエラーが発生します。

解決策: チケットを送信して、DTS テクニカルサポートに連絡して支援を求めてください。

ソースインスタンスのデータベース名、テーブル名、または列名にハイフン (-) が含まれている場合、DTS がデータを AnalyticDB MySQL クラスターに同期する際にエラーが発生しますか?

AnalyticDB for MySQL はデータベース名、テーブル名、または列名にハイフン (-) を含めることを許可していないため、データ同期を確実に成功させるために、システムはハイフン (-) をアンダースコア (_) にマッピングします。

データ同期中にデータベース名、テーブル名、または列名が原因で他の同期障害が発生した場合 (テーブル名にスペースや漢字が含まれている場合など)、Alibaba Cloud テクニカルサポートにお問い合わせください。

説明

AnalyticDB for MySQL のその他の制限については、「制限」をご参照ください。

DTS がデータを AnalyticDB MySQL クラスターに同期する際のデータ遅延の問題をトラブルシューティングするにはどうすればよいですか?

  • デフォルトの DTS 同期リンク仕様は中間モードです。ソースデータベースのデータ書き込み量が多い場合、仕様の同期パフォーマンス制限を達成したい場合は、インスタンス構成をアップグレードする必要があります。

  • プライマリキーのないテーブルのプライマリキー選択は、ホット行の更新を引き起こす可能性があり、ホット行の更新は非常に遅いです。AnalyticDB for MySQL にチケットを送信して、この問題を解決できます。

  • AnalyticDB for MySQL クラスターの書き込みパフォーマンスがボトルネックに達した場合、AnalyticDB for MySQL の仕様をアップグレードする必要があります。

DataWorks がデータを AnalyticDB MySQL クラスターにインポートする際に、書き込み TPS が期待値を満たさないのはなぜですか?

クライアントのインポート圧力が不十分な場合、クラスターの CPU 使用率、ディスク IO 使用率、および書き込み応答時間は低いレベルになります。データベースサーバーはクライアントから送信されたデータを迅速に消費できますが、送信される総量が少ないため、書き込み TPS が期待値を満たしません。単一のインポートのバッチ挿入数を増やし、[タスクの最大同時実行数] を増やすことができます。データインポートのパフォーマンスは、インポート圧力の増加に伴い線形に増加します。

DataWorks がデータを AnalyticDB MySQL クラスターにインポートする際に、ターゲットテーブルでデータスキューが発生するのはなぜですか?

ターゲットテーブルでデータスキューが発生すると、クラスターの一部のノードが過負荷になり、インポートパフォーマンスに影響します。この場合、クラスターの CPU 使用率とディスク IO 使用率は低いレベルですが、書き込み応答時間は高くなります。同時に、[診断と最適化][データモデリング診断] ページで、スキュー診断テーブル内のターゲットテーブルを見つけることができます。テーブル構造を再設計してからデータをインポートできます。詳細については、「スキーマ設計」をご参照ください。

adb-import.sh を使用してローカルデータをインポートする際に、クライアントまたはそのサーバーに負荷のボトルネックがあるかどうかを確認するにはどうすればよいですか?

クライアントにボトルネックがある場合、データベースに対するストレステストを最大限に実行できません。次の 2 つの方法で、クライアントまたはそのサーバーに負荷のボトルネックがあるかどうかを確認できます:

  • AnalyticDB for MySQL コンソールにログインし、左側のナビゲーションウィンドウで [モニタリング情報][診断と最適化] をクリックして、クライアント自体またはそのサーバーに負荷のボトルネックがあるかどうかを確認します。

  • 次の一般的なコマンドを使用して、クライアント自体またはそのサーバーに負荷のボトルネックがあるかどうかを確認します。

コマンド

説明

top

CPU 使用率を表示します。

free

メモリ使用量を表示します。

vmstat 1 1000

総合的な負荷を表示します。

dstat -all --disk-util または iostat 1 1000

ディスクの読み取り帯域幅と使用率を表示します。

jstat -gc <pid> 1000

インポートツールの Java プロセスのガベージコレクション (GC) の詳細を表示します。GC が頻繁に発生する場合は、JVM パラメーター jvmopts のヒープメモリサイズを適切に拡張してみてください。たとえば、-Xmx16G -Xms16G に拡張します。

adb-import.sh を使用してローカルデータをインポートする際に、インポートスクリプトをパラメーター化するにはどうすればよいですか?

インポートファイルの行と列の区切り文字が一致していることを確認できる場合は、インポートスクリプトの tableName および dataPath パラメーターを変更できます。異なるテーブル名とファイルパスのパラメーターを渡すことで、1 つのスクリプトで複数のテーブルをインポートするという要件を満たすことができます。

例:

tableName=$1
dataPath=$2

パラメーター化を使用してインポートを実行します。

# sh adb-import.sh table_name001 /path/table_001
# sh adb-import.sh table_name002 /path/table_002
# sh adb-import.sh table_name003 /path/table_003

adb-import.sh を使用してローカルデータをインポートする際に、インポートプログラムをバックグラウンドで実行するにはどうすればよいですか?

次のコマンドを実行して、インポートプログラムをバックグラウンドで実行できます:

# nohup sh adb-import.sh &

インポートプログラムがバックグラウンドで実行を開始した後、次のコマンドを実行してログを確認できます。例外情報スタックが出力された場合は、インポートにエラーがあることを示しており、例外情報に基づいて問題をトラブルシューティングする必要があります。コマンドは次のとおりです:

# tail -f nohup.out

次のコマンドを使用して、インポートプロセスがまだ正常に実行されているかどうかを確認することもできます:

# ps -ef|grep import

adb-import.sh を使用してローカルデータをインポートする際に、インポートプログラムでエラー行を無視するにはどうすればよいですか?

インポートプログラムのエラー行は、次の 2 つのカテゴリに分類できます:

  • SQL 実行エラー。

    このタイプのエラーについては、パラメーター ignoreErrors=true を設定することでエラー行を無視できます。この場合、詳細なエラーファイル、開始行番号 (batchSize が設定されているため、エラー行は開始行番号から batchSize 行以内にあります)、および実行に失敗した SQL が実行結果に出力されます。

  • ファイル内の列数が期待値を満たしていない。

    ファイル内の列数が期待値を満たしていない場合、システムはファイルのインポートを直ちに停止し、エラーメッセージを出力します。ただし、このエラーは無効なファイルが原因であるため、無視されず、手動でファイルの正しさを確認する必要があります。このタイプのエラーでは、次のエラーメッセージが出力されます:

    [ERROR] 2021-03-22 00:46:40,444 [producer- /test2/data/lineitem.csv.split00.100-41] analyticdb.tool.ImportTool
    (ImportTool.java:591) -bad line found and stop import! 16, file = /test2/data/tpch100g/lineitem.csv.split00.100, rowCount = 7, current row = 3|123|179698|145|73200.15|0.06|0.00|R|F|1994-02-02|1994-01-04|1994-02-
    23|NONE|AIR|ongside of the furiously brave acco|

adb-import.sh を使用してローカルデータをインポートする際に、インポートの失敗のトラブルシューティングの範囲を絞り込むにはどうすればよいですか?

インポート失敗の原因をより迅速に特定するために、次の側面から失敗原因の範囲を絞り込むことができます:

  • インポートが失敗した場合、AnalyticDB for MySQL インポートツールはエラーログと詳細なエラー理由を出力します。デフォルトでは、SQL 文は切り捨てられます (最大 1000 文字)。より完全な SQL 情報を出力するには、次のコマンドを使用して failureSqlPrintLengthLimit パラメーターを適切な値 (1500 など) に拡張できます:

    printErrorSql=true
    failureSqlPrintLengthLimit=1500;
  • SQL には batchSize が設定されているため、通常は数千行のバッチで SQL を実行するため、エラー行を特定するのに役立ちません。batchSize パラメーターを減らす (たとえば、10 に設定する) ことで、エラー行の特定に役立ちます。パラメーターの変更コマンドは次のとおりです:

    batchSize=10;
  • ファイルが分割されており、どのファイルスライスにエラー行が含まれているかがわかっている場合、問題を再現するには、dataPath パラメーターを変更してエラー行を含む単一のファイルをインポートし、エラーメッセージを確認できます。文は次のとおりです:

    dataPath=/u01/this/is/the/directory/where/product_info/stores/file007;

adb-import.sh を使用してローカルデータをインポートする際に、Windows 環境でインポートプログラムを実行するにはどうすればよいですか?

Windows 環境ではバッチ処理スクリプトが提供されていません。次の方法で直接 JAR ファイルを呼び出して実行できます:

usage: java -jar adb-import-tool.jar [-a <arg>] [-b <arg>] [-B <arg>] [-c <arg>] 
      [-D <arg>] [-d <arg>] [-E <arg>] [-f <arg>] [-h <arg>] [-I <arg>] 
      [-k <arg>] [-l <arg>] [-m <arg>] [-n <arg>] [-N <arg>] [-O <arg>]
      [-o <arg>] [-p <arg>] [-P <arg>] [-Q <arg>] [-s <arg>]  [-S <arg>]
      [-t <arg>] [-T <arg>] [-u <arg>] [-w <arg>][-x <arg>] [-y <arg>] [-z <arg>]

パラメーター

必須

説明

-h,--ip <arg>

必須

AnalyticDB for MySQL クラスターのエンドポイント。

-u,--username <arg>

AnalyticDB for MySQL クラスターのデータベースアカウント。

-p,--password <arg>

AnalyticDB for MySQL クラスターのデータベースアカウントに対応するパスワード。

-P,--port <arg>

AnalyticDB for MySQL クラスターが使用するポート番号。

-D,--databaseName <arg>

AnalyticDB for MySQL クラスターのデータベース名。

-f,--dataFile <arg>

インポートするファイルまたはフォルダの絶対パス。次のインポートシナリオがサポートされています:

  • 単一のファイルまたは単一のフォルダのみをインポートする。

  • 複数のファイルを同時にインポートする。複数のファイルのパスはカンマ (,) で区切ります。

-t,--tableName <arg>

インポートするテーブルの名前。

-a,--createEmptyFinishFilePath <arg>

任意

インポート完了後にフラグファイルを生成するかどうか。デフォルトは空の文字列で、フラグファイルを生成しないことを示します。フラグファイルを生成するには、ファイル名を入力するだけです。たとえば、-a file_a を設定して、file_a という名前のフラグファイルを生成できます。

-b,--batchSize <arg>

INSERT INTO tablename VALUES (..),(..) でバッチで書き込む VALUES の数を設定します。デフォルト値: 1。

説明

バッチデータ書き込みの効果をより良く実現するために、この値を 1024 から 4096 の間に設定することをお勧めします。

-B,--encryptPassword <arg>

暗号化アルゴリズムを使用してデータベースのパスワードを暗号化するかどうか。デフォルト値: false。データベースのパスワードを暗号化アルゴリズムで暗号化しないことを示します。

-c,--printRowCount <arg>

各ファイルがインポートされた後、ターゲットテーブルの実際の行数を出力するかどうか。デフォルト値: false。出力しないことを示します。

-d,--skipHeader <arg>

テーブルヘッダーをスキップするかどうか。デフォルト値: false。テーブルヘッダーをスキップしないことを示します。

-E,--escapeSlashAndSingleQuote <arg>

列内の \ および ' 記号をエスケープするかどうか。デフォルト値: true。エスケープが必要であることを示します。

説明

エスケープは、クライアントの文字列解析に一定のパフォーマンスへの影響を与えます。インポートするファイルにエスケープ文字がないことを確認できる場合は、このパラメーターを false に設定できます。

-I,--ignoreErrors <arg>

データインポート中にエラーが発生した場合に、失敗したバッチを無視するかどうか。デフォルト値: false。無視しないことを示します。

-k,--skipLineNum <arg>

スキップする行数。IGNORE number {LINES | ROWS} パラメーターに似ています。デフォルト値: 0。スキップしないことを示します。

-l,--delimiter <arg>

列区切り文字。AnalyticDB for MySQL は、デフォルトで可視文字 \\| を列区切り文字として使用します。また、不可視文字を区切り文字として使用することもサポートしています。不可視文字を使用するには、16 進数表現を使用する必要があります。たとえば、\x07\x07 は 16 進数で hex0707 と表現する必要があります。

-m,--maxConcurrentNumOfFilesToImport <arg>

dataFile がフォルダの場合、並行して読み取るファイルの数。デフォルト値: Integer.MAX_VALUE。すべてのファイルを読み取ることを示します。

-n,--nullAsQuotes <arg>

インポートするファイルに || がある場合、それを '' に設定するかどうか。デフォルト値: false。||'' に設定せず、null として設定することを示します。

-N,--printErrorSql <arg>

データインポート中にエラーが発生した場合に、エラーの原因となった SQL を出力するかどうか。デフォルト値: true。エラー SQL を出力することを示します。

-O,--connectionPoolSize <arg>

AnalyticDB for MySQL データベースの接続プールサイズ。デフォルト値: 2。

-o,--encoding <arg>

ファイルエンコーディング。有効な値: GBK または UTF-8 (デフォルト)。

-Q,--disableInsertOnlyPrintSql <arg>

データベースにデータをインポートする際に、INSERT を実行せずに INSERT SQL コマンドのみを出力するかどうか。任意。デフォルト値: false。INSERT を実行することを示します。

-s,--lineSeparator <arg>

行区切り文字。AnalyticDB for MySQL は、デフォルトで可視文字 \\n を行区切り文字として使用します。また、不可視文字を区切り文字として使用することもサポートしています。不可視文字を使用するには、16 進数表現を使用する必要があります。たとえば、\x0d\x06\x08\x0a は 16 進数で hex0d06080a と表現する必要があります。

-S,--printErrorStackTrace <arg>

データインポート中にエラーが発生し、printErrorSql=true の場合に、エラーのスタック情報を出力するかどうか。デフォルト値: false。出力しないことを示します。

-w,--windowSize <arg>

INSERT SQL のバッファーサイズ。これにより、AnalyticDB for MySQL に INSERT SQL コマンドを送信する際に、パイプラインの高速化と IO と計算の分離が容易になり、クライアントのパフォーマンスが向上します。デフォルト値: 128。

-x,--insertWithColumnNames <arg>

INSERT INTO コマンドを実行する際に列名を含めるかどうか、つまり、INSERT INTO tb(column1, column2) コマンドを実行してデータをインポートするかどうか。デフォルト値: true。インポート時に列名が必要であることを示します。

-y,--failureSqlPrintLengthLimit <arg>

INSERT コマンドが失敗し、エラー SQL を出力する必要がある場合、このパラメーターを使用して出力するエラー SQL の切り捨て長さを設定します。デフォルト値: 1000。

-z,--connectionUrlParam <arg>

データベース接続パラメーター。デフォルト値: ?characterEncoding=utf-8

例: ?characterEncoding=utf-8&autoReconnect=true

例:

  • 例 1: デフォルトのパラメーター構成を使用して単一のファイルをインポートします。コマンドは次のとおりです:

    java -Xmx8G -Xms8G -jar adb-import-tool.jar -hyourhost.ads.aliyuncs.com -uadbuser -ppassword -P3306 -Dtest --dataFile /data/lineitem.sample --tableName LINEITEM
  • 例 2: フォルダ内のすべてのファイルをインポートする際に、関連するパラメーターを変更してスループットを最大化します。コマンドは次のとおりです:

    java -Xmx16G -Xms16G -jar adb-import-tool.jar -hyourhost.ads.aliyuncs.com -uadbuser -ppassword -P3306 -Dtest --dataFile /data/tpch100g --tableName LINEITEM --concurrency 64 --batchSize 2048