このトピックでは、AnalyticDB for MySQL でのデータのインポートとエクスポートに関する一般的な問題とソリューションを説明します。
製品ラインの指定がない場合、この問題は AnalyticDB for MySQL (Data Warehouse Edition) にのみ適用されます。
よくある質問
-
JDBC プログラムを使用して AnalyticDB for MySQL クラスターにデータをインポートする場合、インポートのパフォーマンスが低いのはなぜですか。
-
Lakehouse Edition クラスターの Data Integration (APS) 機能には、別途料金が発生しますか。
-
OSS 外部テーブルを使用してデータをインポートまたはエクスポートする場合、内部エンドポイントとパブリックエンドポイントのどちらを使用すべきですか。
-
MaxCompute 外部テーブルの作成時に "endpoint unreachable" エラーが発生した場合、どのように解決すればよいですか。
-
MaxCompute 外部テーブルの作成時に "Project not found - 'xxx'" エラーが発生した場合、どのように解決すればよいですか。
-
MaxCompute からデータをインポートする際に "Query Exceeded Maximum Time Limit" エラーが発生した場合、どのように解決すればよいですか。
-
MaxCompute からデータをインポートする際に "cant submit job for job queue is full" エラーが発生した場合、どのように解決すればよいですか。
-
MaxCompute でデータをクエリする際に "Receive error response with code 500" エラーが発生した場合、どのように解決すればよいですか。
-
MaxCompute でデータをクエリする際に "Query execution error" が発生した場合、どのように解決すればよいですか。
-
MaxCompute の配列データ型のデータを AnalyticDB for MySQL クラスターにインポートするにはどうすればよいですか。
-
AnalyticDB for MySQL クラスターのデータが MaxCompute のソースデータと一致しないのはなぜですか。
-
ソースデータベースにサポートされていないデータ型が含まれている場合、AnalyticDB for MySQL クラスターへの DTS 同期は失敗しますか。
-
DTS を使用して AnalyticDB for MySQL クラスターにデータを同期する場合、ソーステーブルの列のデータ型を変更できますか。
-
DTS を使用して AnalyticDB for MySQL クラスターにデータを同期する場合、ソーステーブルでデータ型を変更したことが原因で発生したエラーはどのように解決すればよいですか。
-
DTS を使用して AnalyticDB for MySQL クラスターにデータを同期する場合、無効な日付値の書き込みが原因で発生したエラーはどのように解決すればよいですか。
-
DTS を使用して AnalyticDB for MySQL クラスターにデータを同期する場合、主キーのないテーブルを同期する際に発生したエラーはどのように解決すればよいですか。
-
DTS を使用して AnalyticDB for MySQL クラスターにデータを同期する場合、列のデフォルト値が長すぎることが原因で発生したエラーはどのように解決すればよいですか。
-
DTS を使用して AnalyticDB for MySQL クラスターにデータを同期する場合、16 MB を超える単一レコードの書き込みが原因で発生したエラーはどのように解決すればよいですか。
-
DTS を使用して AnalyticDB for MySQL クラスターにデータを同期する場合、ディスク容量不足が原因で発生したエラーはどのように解決すればよいですか。
-
DTS を使用して AnalyticDB for MySQL クラスターにデータを同期する場合、テーブルまたは列が見つからないことが原因で発生したエラーはどのように解決すればよいですか。
-
DTS を使用して AnalyticDB for MySQL クラスターにデータを同期する場合、複数テーブルのマージ中に列の値を取得できないケースにはどのように対処すればよいですか。
-
DTS を使用して AnalyticDB for MySQL クラスターにデータを同期する場合、ソースデータベース、テーブル、または列名にハイフン (-) を含めることはできますか。
-
DTS 同期中に AnalyticDB for MySQL クラスターで発生するデータレイテンシーの問題は、どのようにトラブルシューティングすればよいですか。
-
DataWorks を使用して AnalyticDB for MySQL クラスターにデータをインポートする場合、書き込み TPS が想定より低いのはなぜですか。
-
DataWorks を使用して AnalyticDB for MySQL クラスターにデータをインポートする場合、ターゲットテーブルでデータスキューが発生するのはなぜですか。
-
adb-import.sh スクリプトを使用してローカルデータをインポートする場合、クライアント側とサーバー側のどちらの負荷がパフォーマンスボトルネックかを判断するにはどうすればよいですか。
-
adb-import.sh スクリプトを使用してローカルデータをインポートする場合、インポートスクリプトをパラメータ化するにはどうすればよいですか。
-
adb-import.sh スクリプトを使用してローカルデータをインポートする場合、インポートジョブをバックグラウンドで実行するにはどうすればよいですか。
-
adb-import.sh スクリプトを使用してローカルデータをインポートする場合、インポート中にエラー行を無視するにはどうすればよいですか。
-
adb-import.sh スクリプトを使用してローカルデータをインポートする場合、インポート失敗の原因を絞り込むにはどうすればよいですか。
-
adb-import.sh スクリプトを使用してローカルデータをインポートする場合、Windows 環境でインポートプログラムを実行するにはどうすればよいですか。
-
ソースの RDS インスタンスがリリースされた場合、その SQL バックアップファイルを AnalyticDB for MySQL にインポートするにはどうすればよいですか。
非同期インポート/エクスポートジョブのキャンセル
AnalyticDB for MySQLコンソールにログインします。診断の最適化 ページで、インポート/エクスポートタスク タブをクリックします。対象のジョブを見つけ、その 非同期タスク名 をコピーします。次に、CANCEL JOB "${asynchronous job name}" コマンドを実行してジョブをキャンセルします。詳細については、「非同期インポート/エクスポートジョブの送信」をご参照ください。
実行中のインポートジョブの表示
次のクエリを実行します。
SELECT * FROM INFORMATION_SCHEMA.kepler_meta_async_jobs where status = "RUNNING"
JDBC データインポートのパフォーマンス低下
-
データソースが十分なレートでデータを生成していることを確認してください。ほかのシステムまたはファイルからデータを読み取っている場合は、クライアント側で出力のボトルネックが発生していないか確認してください。
-
データ処理が効率的であり、データ生成に追従できていることを確認してください。これにより、AnalyticDB for MySQL にインポートできる状態のデータを十分にキューに保持できます。
-
クライアントマシンに十分なシステムリソースがあることを確認してください。CPU 使用率やディスク I/O 使用率などのメトリクスを確認し、ボトルネックの可能性を特定してください。
Link データインジェスト (APS) の料金
いいえ。データインジェスト機能 (APS) 自体は無料です。ただし、APS タスクはクラスター内のリソースグループで動作し、課金対象のリソースを消費します。
OSS 外部テーブルの内部アドレスまたはパブリックアドレス
OSS 外部テーブルを作成する場合は、内部アドレスを使用してください。AnalyticDB for MySQL のバックエンドノードは、パブリックネットワークではなく内部ネットワーク経由で OSS にアクセスします。
MaxCompute 外部テーブルのエンドポイント到達不能エラー
原因:エンドポイント到達不能エラーは、MaxCompute 外部テーブルに指定されたエンドポイントにアクセスできない場合に発生します。
解決策:ENI ネットワークを有効にし、CREATE TABLE 文のエンドポイントをインスタンスのリージョンの VPC エンドポイントに置き換えてから、文を再実行してください。
-
ENI ネットワークを有効または無効にすると、データベース接続性が約 2 分間中断され、その間は読み取りおよび書き込み操作を実行できません。ENI ネットワークを有効または無効にする前に、潜在的な影響を慎重に評価してください。
-
AnalyticDB for MySQL コンソール にログインします。に移動します。 [ネットワーク情報] セクションで、ENI ネットワークスイッチをオンにします。
'Odps external table endpoint should not contain special character' エラー
原因:エンドポイントが正しく設定されていません。
解決策: CREATE TABLE ステートメント内の エンドポイント を インスタンスのリージョンの VPC エンドポイント に置き換え、ステートメントを再実行してください。
"Project not found - 'xxx'" エラー
-
原因:指定したプロジェクトが MaxCompute に存在しないか、またはプロジェクト名のスペルが誤っています。
解決策:テーブル作成ステートメント内のプロジェクト名を修正し、外部テーブルの作成を再試行してください。
-
原因:プロジェクトは MaxCompute に存在しますが、 AnalyticDB for MySQL クラスターと同じリージョンにありません。
解決策: AnalyticDB for MySQL クラスターと MaxCompute プロジェクトが同じリージョンにあることを確認して、外部テーブルの作成を再試行してください。
MaxCompute データインポート時のエラー:「Rollback this write and commit one row at a time」
原因:このエラーは、DataX を使用してデータをインポートする際に、AnalyticDB for MySQL 接続レイヤーの制限が原因で発生します。
解決策:JDBC 接続文字列に rewriteBatchedStatements=false パラメーターを追加し、インポートをリトライしてください。
"Query Exceeded Maximum Time Limit" エラー
原因:このエラーは、大きな MaxCompute テーブルからデータをインポートする際に、AnalyticDB for MySQL の INSERT 操作のタイムアウトを超えると発生します。
解決策:INSERT_SELECT_TIMEOUT パラメーターを変更し、インポートをリトライしてください。詳細については、「config および hint パラメーター」をご参照ください。
エラー:「can't submit job: job queue is full」
原因:お客様の AnalyticDB for MySQL クラスターにおける同時非同期タスクの数が上限を超えています。チケットを起票して、クラスターの同時実行数の上限を確認できます。
解決策:
-
送信済みの非同期タスクが完了するのを待ってから、非同期インポートタスクを再送信してください。非同期タスクのステータスを確認するには、「非同期インポートタスクの送信」をご参照ください。
-
チケットを送信して、お使いのクラスターの同時実行数の上限引き上げをリクエストできます。
MaxCompute からデータをインポートする際の "Query execution error: odps partition num: 192 > 191, specific odps partitions"
原因: 1 回のインポート操作でのパーティション数が、AnalyticDB for MySQL クラスターの制限を超えています。
解決策: MaxCompute テーブルの具体的なパーティション数に応じて、SQL ステートメントの前にヒント /*RC_INSERT_ODPS_MAX_PARTITION_NUM=<value>*/ を追加し、パーティション数の制限を調整してください。
max_pt() 関数にはパーティションテーブルが必要
原因:このエラーは、非パーティション MaxCompute 外部テーブルに MAX_PT() 関数を適用した場合に発生します。
解決策: MaxCompute テーブルがパーティションテーブルで、少なくとも 1 つのパーティションがあることを確認してください。その後、MaxCompute 外部テーブルを再作成し、MAX_PT() 関数を使用してクエリを実行してください。
MaxCompute データのクエリ時に発生する「ErrorCode=NoSuchPartition」エラー
原因:MaxCompute の外部テーブルにパーティションが存在しません。
解決策:MaxCompute テーブルに少なくとも 1 つのパーティションが含まれていることを確認してください (パーティション操作)。その後、外部テーブルを再作成し、データをクエリしてください。
MaxCompute データのクエリ時のコード 500 エラー
原因:AnalyticDB for MySQL は SQL ステートメントの実行にネイティブエンジンを使用しますが、ネイティブエンジンは MaxCompute 外部テーブルをサポートしていません。
解決策:SQL ステートメントの先頭にヒント /*native_engine_task_enabled=false*/ を追加してネイティブエンジンを無効化し、Java エンジンでステートメントを実行してください。
MaxCompute データのクエリ実行エラー
-
原因 1:MaxCompute の権限設定が正しくないため、AccessKey が MaxCompute テーブルを読み取れません。
解決策:MaxCompute の読み取りおよび書き込み権限を更新し、クエリを再実行してください。
-
原因 2:AnalyticDB for MySQL テーブルと MaxCompute テーブルとで、スキーマまたは列名が一致しません。
解決策:AnalyticDB for MySQL で、MaxCompute テーブルのスキーマとカラム名に一致するように外部テーブルを再作成してください。その後、クエリを再実行してください。
-
原因 3:指定した MaxCompute パーティションが存在しません。
解決策:クエリで指定した MaxCompute パーティションを修正し、クエリを再実行してください。
-
原因 4:MaxCompute テーブルにスモールファイルが多すぎます。
解決策:MaxCompute のスモールファイルをマージしてから、クエリを再実行してください。以下のサンプルステートメントを使用してください。詳細については、「スモールファイルのマージ」をご参照ください。
ALTER TABLE tablename [PARTITION] MERGE SMALLFILES;
MaxCompute から AnalyticDB for MySQL への配列<文字列>のインポート
原因: MaxCompute の外部テーブルはネストされた型をサポートしていないため、配列<文字列>データを AnalyticDB for 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 テクニカルサポートに チケットを送信 してください。
MaxCompute 外部テーブルへのデータの上書きの失敗
MaxCompute 外部テーブルはデータの上書きをサポートしていません。
MaxCompute の INSERT INTO SELECT における "Slot Quota Exceeded" エラー
原因:書き込み操作に必要なスロット数が、スロットクォータを超えています。
ソリューション:次のいずれかの方法を使用してください。
-
Data Integration 用の専用リソースグループを使用できます。 Data Integration 用のパブリックリソースグループよりも高いスロットクォータが提供されます。
-
INSERT INTO SELECTタスクのデフォルトの同時実行数は 16 です。SQL ステートメントの先頭に/*TASK_WRITER_COUNT=<value>*/ヒントを追加して、同時実行数を減らしてください。valueは 0 より大きい整数にする必要があります。
MaxCompute 外部テーブル書き込み時のフロー制御エラー
原因:MaxCompute 外部テーブルにデータを書き込む際に、操作によって新しいパーティションが作成される場合、MaxCompute は createPartition 操作を呼び出します。パーティションを高頻度で作成すると、MaxCompute のスロットリングメカニズムがトリガーされ、このエラーが発生します。
解決策:INSERT INTO SELECT タスクが複数のパーティションに同時にデータを書き込んでいるかどうかを確認してください。該当する場合は、SQL ステートメントに /*TASK_WRITER_COUNT=<value>*/ ヒントを追加して同時実行数を減らしてください。値は 0 より大きい整数である必要があります。これでも問題が解決しない場合は、チケットを送信 してください。
レコード数の不一致
原因:AnalyticDB for MySQL は、主キーが重複するレコードを自動的に削除します。
解決策:MaxCompute のソースデータに、主キーが重複するレコードがないか确认してください。
サポートされていないデータ型の処理
ソースデータベースに、AnalyticDB for MySQL でサポートされていないデータ型 (地理空間データ型など) が含まれている場合、AnalyticDB for MySQL はスキーマの初期化時に対応する列をドロップします。
同期中のデータ型の変更
データ同期中に、ソーステーブルの列のデータ型を変更できます。この機能は、整数データ型間、または浮動小数点データ型間の変更のみをサポートしています。データ型は、単精度から倍精度への変更など、より広い範囲のデータ型にのみ変更できます。
-
整数データ型:
Tinyint、Smallint、Int、Bigintの間で、より小さい型からより大きい型に変更できます。たとえば、TinyintからBigintへの変更はサポートされていますが、BigintからTinyintへの変更はサポートされていません。 -
浮動小数点データ型:
FloatからDoubleへの変更は可能ですが、DoubleからFloatへの変更はできません。
DTS による AnalyticDB for MySQL クラスターへのデータ同期:データ型の変更によるエラー
エラー:
‘id' is LONG type, Can't change column type to DECIMALmodify precision is not supported, col=id, type decimal, old=11, new=21
原因:同期中にソーステーブルのデータ型を変更すると、DTS はこの DDL 操作をサポートしていないため、このエラーが発生します。詳細については、「DTS は、AnalyticDB for MySQL クラスターへのデータ同期中にソーステーブルのデータ型を変更することをサポートしていますか?」をご参照ください。
解決策:
-
特定オブジェクトの同期:テーブルを再同期します。これを行うには、同期オブジェクトからテーブルを削除し、ターゲットデータベースからも削除した後、再度同期オブジェクトに追加します。これにより、DTS は新しい完全同期とスキーママイグレーションを実行し、サポートされていない DDL 操作を回避します。
-
データベースの完全同期:AnalyticDB for MySQL で、ソーステーブルと同じテーブル構造で、名前の異なる新しいテーブルを作成します。
INSERT INTO SELECTを使用して、元のテーブルから新しいテーブルにデータをコピーします。次に、エラーのある元のテーブルを削除し、新しいテーブルの名前を元の名前に変更して、DTS タスクを再起動します。
DTS から AnalyticDB for MySQL へ:無効な日付値エラーの解決
エラーメッセージ:
Cannot parse "2013-05-00 00:00:00": Value 0 for dayOfMonth must be in the range [1,31]]
原因:AnalyticDB for MySQL は、無効な日付値の書き込みをサポートしていません。
解決策:
-
同期タスクが完全初期化フェーズにある場合は、ソーステーブルの値を修正してください。たとえば、「2013-05-00 00:00:00」を「2013-05-01 00:00:00」に変更します。
-
同期タスクが増分同期フェーズにある場合は、同期オブジェクトからテーブルを削除し、ソーステーブルの無効な値を修正し、テーブルを同期オブジェクトに再度追加して、同期タスクを再起動してください。
-
同期タスクがデータベースの完全同期の増分同期フェーズにある場合は、Alibaba Cloud テクニカルサポートに連絡して、無効な日付値を null として書き込むためのスイッチを有効にしてもらってください。
DTS から AnalyticDB for MySQL へ:プライマリキーのないテーブルの同期エラー
エラーメッセージ:
DTS-077004: Record Replicator error. cause by [[17003,2020051513063717201600100703453067067] table not exist => xxx_table]
原因:AnalyticDB for MySQL は、プライマリキーのないテーブルの同期をサポートしていません。
解決策:このエラーを解決するには、ターゲットデータベースにプライマリキーを持つテーブルを手動で作成し、DTS タスクを再起動してください。
DTS 同期:「default value is too long」エラー
エラーメッセージ:
default value is too long
解決策:Alibaba Cloud テクニカルサポートにチケットを送信し、AnalyticDB for MySQL クラスターの最新バージョンへのアップグレードを依頼してください。
DTS から AnalyticDB for MySQL への同期:レコードサイズエラー (>32 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 for MySQL クラスターを最新バージョンにアップグレードするよう依頼してください。
DTS から AnalyticDB for MySQL へ:ディスク領域不足のエラー
エラーメッセージ:
disk is over flow
解決策:不要なデータを削除してディスク領域を解放するか、Alibaba Cloud テクニカルサポートに連絡し、AnalyticDB for MySQL クラスターをスケールアップしてください。十分なディスク領域が利用可能になったら、DTS タスクを再起動してください。
DTS エラーの解決:テーブルまたはカラムの欠落
エラーメッセージ:
table not exist => t1
解決策: DTS の設定で、すべての DDL ステートメントを同期するオプションが選択されていることを確認してください。
複数テーブルのマージにおける欠損値
エラー:
No value present
原因:複数テーブルのマージにおいて、ソーステーブルに新しいフィールドを追加するなどのスキーマ変更を行うと、このエラーが発生します。この変更によりソーステーブル間でスキーマの不一致が生じ、DTS がターゲットテーブルにデータを書き込めなくなります。
解決策:DTS テクニカルサポートにチケットを送信してください。
データベース、テーブル、またはカラム名のハイフン
AnalyticDB for MySQL では、データベース、テーブル、またはカラム名にハイフン (-) を使用できません。データ同期を確実に行うため、DTS は自動的にハイフン (-) をアンダースコア (_) に置き換えます。
スペースや中国語文字を含むなど、データベース、テーブル、またはカラム名に関する他の問題が原因でデータ同期が失敗する場合は、Alibaba Cloud テクニカルサポートにお問い合わせください。
AnalyticDB for MySQL の使用制限の詳細については、「使用制限」をご参照ください。
DTS 同期中のデータレイテンシーのトラブルシューティング
-
DTS 同期リンクは、デフォルトで
medium仕様を使用します。ソースデータベースの書き込み負荷が高い場合は、パフォーマンスを最大限に高めるために インスタンス構成をアップグレード する必要があります。 -
プライマリキーのないテーブルの場合、代わりとして選択されたカラムが、非常に低速な
ホット行の更新を引き起こす可能性があります。この問題を解決するには、 AnalyticDB for MySQL にチケットを送信してください。 -
AnalyticDB for MySQL クラスターの書き込みパフォーマンスがボトルネックになった場合は、 AnalyticDB for MySQL の仕様をアップグレードする必要があります。
DataWorks データインポート時の低い書き込み TPS
クライアントの負荷が不十分であると、クラスターの CPU 使用率、ディスク I/O 使用率、および書き込み応答時間の低下につながります。 データベースサーバーは受信データを迅速に消費できますが、データ量が少ないため、書き込み TPS は想定よりも低くなります。 パフォーマンスを向上させるには、インポートタスクの バッチサイズ と Maximum Concurrency を増やします。 通常、データインポートのパフォーマンスは、クライアント側の負荷に応じて線形にスケールします。
DataWorks から AnalyticDB for MySQL へのインポートにおけるデータの偏り
ターゲットテーブルでデータスキューが発生すると、一部のクラスターノードが過負荷になり、インポートパフォーマンスが低下します。この状況では、クラスターの CPU 使用率とディスク I/O は低いですが、書き込み応答時間は高くなります。スキューしたテーブルは、診断の最適化 > データモデリング診断 ページで特定できます。この問題を解決するには、テーブル構造を再設計してからデータを再インポートします。詳細については、「テーブル構造の設計」をご参照ください。
adb-import.sh のクライアントボトルネックの特定
クライアント側のボトルネックにより、データベースのロードを最大化できない場合があります。以下の方法を使用して、クライアントまたはそのホストサーバーのボトルネックを特定してください。
-
AnalyticDB for MySQL コンソールにログインします。左側のナビゲーションペインで、監視情報 と 診断と最適化 をクリックし、潜在的なボトルネックがないかパフォーマンスメトリックを確認します。
-
クライアントまたはそのホストサーバーで次のコマンドを実行して、ボトルネックを特定してください。
|
コマンド |
説明 |
|
top |
CPU 使用量を表示します。 |
|
free |
メモリ使用量を表示します。 |
|
vmstat 1 1000 |
全体のロードを表示します。 |
|
dstat -all --disk-util または iostat 1 1000 |
ディスク読み取り帯域幅と使用率を表示します。 |
|
jstat -gc <pid> 1000 |
インポートツールの Java プロセスのガベージコレクション (GC) の詳細を表示します。GC が頻繁に発生する場合は、 |
adb-import.sh スクリプトのパラメーター化
インポートファイルで一貫した行と列の区切り文字が使用されている場合、スクリプトを修正して tableName と dataPath をパラメーターとして受け取るように変更できます。これにより、異なるテーブル名とファイルパスを引数として渡すことで、単一のスクリプトを使用して複数のテーブルにデータをインポートできるようになります。
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 ステートメントは 1,000 文字に切り捨てられます。完全なステートメントを表示するには、
failureSqlPrintLengthLimitパラメーターの値を増やしてください。たとえば、1,500 に設定できます。printErrorSql=true failureSqlPrintLengthLimit=1500; -
インポートツールは SQL ステートメントをバッチで処理し、
batchSizeパラメーターで制御される 1 つのバッチには数千行が含まれる場合があります。このため、エラーの原因となっている行を特定することが困難になります。問題のある行を切り分けるには、batchSizeパラメーターの値を減らしてください。たとえば、10 に設定できます。batchSize=10; -
エラーが含まれている分割ファイルを特定した場合は、そのファイルのみをインポートすることでエラーを再現できます。これを行うには、
dataPathパラメーターを変更して、問題のあるファイルを直接指定してください。dataPath=/u01/this/is/the/directory/where/product_info/stores/file007;
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>]
|
パラメーター |
必須 |
説明 |
|
|
はい |
AnalyticDB for MySQL クラスターの接続アドレス。 |
|
|
AnalyticDB for MySQL クラスターのデータベースアカウント。 |
|
|
|
AnalyticDB for MySQL データベースアカウントのパスワード。 |
|
|
|
The port number for the AnalyticDB for MySQL cluster. |
|
|
|
AnalyticDB for MySQL のクラスターデータベース名。 |
|
|
|
ソースファイルまたはフォルダーの絶対パス。次のシナリオがサポートされています:
|
|
|
|
宛先テーブルの名前。 |
|
|
|
いいえ |
インポート完了後にフラグファイルを生成します。デフォルト値は空の文字列で、その場合はファイルは生成されません。フラグファイルを生成するには、その名前を指定します。たとえば、 |
|
|
説明
最適なバッチ書き込みパフォーマンスを得るには、この値を 1024 から 4096 に設定することを推奨します。 |
|
|
|
パスワードの暗号化を有効にします。デフォルト:false。 |
|
|
|
各ファイルのインポート後に、宛先テーブルの実際の行数を出力します。デフォルト:false。 |
|
|
|
ファイルのヘッダー行をスキップします。デフォルト:false。 |
|
|
|
列内のバックスラッシュ ( 説明
文字をエスケープすると、クライアント側の解析パフォーマンスに影響します。ソースファイルにこれらの文字が含まれていない場合は、このパラメーターを false に設定することを推奨します。 |
|
|
|
データインポート中に失敗したバッチを無視します。デフォルト:false。 |
|
|
|
ファイルの先頭からスキップする行数。これは |
|
|
|
列区切り文字。デフォルトでは、AnalyticDB for MySQL は可視文字 |
|
|
|
フォルダーからインポートする際に並行して読み取るファイルの最大数。デフォルト: |
|
|
|
Specifies whether to set |
|
|
|
エラーの原因となった SQL ステートメントを出力します。デフォルト:true。 |
|
|
|
AnalyticDB for MySQL データベースのコネクションプールのサイズ。デフォルト:2。 |
|
|
|
ファイルエンコーディング。有効な値:GBK、UTF-8。デフォルト:UTF-8。 |
|
|
|
INSERT ステートメントを実行せずに出力します。デフォルト:false (ステートメントは実行されます)。 |
|
|
|
行区切り文字。デフォルトでは、AnalyticDB for MySQL は可視文字 |
|
|
|
エラーが発生し、 |
|
|
|
INSERT SQL コマンド用のバッファ数。これにより、INSERT SQL コマンドを AnalyticDB for MySQL に送信する際に、パイプライン処理と I/O と計算の分離が可能になり、クライアントのパフォーマンスが向上します。デフォルト値:128。 |
|
|
|
|
|
|
|
出力する失敗した SQL ステートメントの最大長。デフォルト:1000。 |
|
|
|
追加のデータベース接続パラメーター。デフォルト: 例: |
例:
-
例 1:デフォルトのパラメーターを使用して単一のファイルをインポートする場合:
java -Xmx8G -Xms8G -jar adb-import-tool.jar -h yourhost.ads.aliyuncs.com -u adbuser -p password -P 3306 -D test --dataFile /data/lineitem.sample --tableName LINEITEM -
例 2:最大スループットに最適化して、フォルダー内のすべてのファイルをインポートする場合:
java -Xmx16G -Xms16G -jar adb-import-tool.jar -h yourhost.ads.aliyuncs.com -u adbuser -p password -P 3306 -D test --dataFile /data/tpch100g --tableName LINEITEM --concurrency 64 --batchSize 2048
ソース RDS インスタンスがリリース済みの場合、SQL バックアップファイルを AnalyticDB for MySQL にインポートするにはどうすればよいですか?
AnalyticDB for MySQL は、ダンプファイル内の DDL ステートメントに構文の互換性がない可能性があるため、mysql コマンドラインクライアントによる SQL ダンプファイルの直接実行をサポートしていません。ソース RDS インスタンスがリリース済みで、SQL バックアップファイルしか残っていない場合は、次の 2 つの手順に従ってデータインポートを完了してください:
-
ステップ1:SQL ファイルをセルフマネージド MySQL データベースに復元する。ECS インスタンス上またはオンプレミス環境で MySQL インスタンスをセットアップし、mysql コマンドラインクライアントを使用して、SQL ファイルをセルフマネージド MySQL データベースにインポートします。詳細については、「CSV または SQL ファイルからセルフマネージドデータベースに RDS データを復元する」をご参照ください。
-
ステップ2:セルフマネージド MySQL から AnalyticDB for MySQL にデータをインポートする。データがセルフマネージド MySQL データベースに復元された後、外部テーブルを使用して、データを AnalyticDB for MySQL クラスターにインポートします。詳細については、「セルフマネージド MySQL データベースからデータをインポートする」をご参照ください。