変換ルールでApsaraDB RDS for MySQLからデータをロードする必要がある場合、データのロードまたは更新時にエラーが発生する可能性があります。 このトピックでは、エラーと解決策について説明します。
データ変換エンジンがLogstoreからデータを読み取った後、エンジンはデータを変換します。 変換ルールでOSS (Object Storage Service) 、ApsaraDB RDS、その他のLogstoreなどの外部リソースからデータをロードする必要がある場合、データのロードまたは更新時にエラーが発生する可能性があります。
Log Serviceコンソールでのリソース関数の不正使用
- 変換ルール
res_rds_mysql(address="xx",username="xx",password="xx",database="xx")
- エラーログ
aliyun.log.logexception.LogException: {"errorCode": "InvalidEtlConfig", "errorMessage": "ETL config doesn't pass security check, detail: invalid type detected: <class '_ast.Expr'>", "requestId": ""}
- トラブルシューティング
構文が無効なため、エラーが発生します。 このエラーは、リソース関数res_rds_mysql、res_log_logstore_pull、またはres_oss_file関数がLog Serviceコンソールで個別に使用されている場合によく発生します。
- ソリューション
Log Serviceコンソールでリソース関数を個別に使用することはできないため、リソース関数をe_table_mapやe_search_table_mapなどの他の関数と組み合わせて使用します。
無効なパラメーター設定
- 変換ルール
e_table_map(res_rds_mysql(address="xx",username="xx",password="xx",database="xx"),field="processid",output_fields=["name","xixi"])
- エラーログ
"errorMessage\": \"When sql is not set, table must be set\\nDetail: None\"
- トラブルシューティング
tableまたはsqlパラメーターが設定されているかどうかを確認します。
- ソリューション
tableパラメーターが設定されていない場合は、必要なテーブルを見つけるためにSQL文を指定する必要があります。 この状況でSQL文を指定しないと、必要なテーブルが見つからず、データを読み込むことができません。 tableパラメーターとsqlパラメーターのいずれかを設定する必要があります。
無効な出力フィールド
- 変換ルール
e_table_map(res_rds_mysql(address="x",username="xx",password="xx",database="xx",table="test"),field="processid",output_fields=["name","xixi"])
- エラーログ
"errorMessage\": \"trans_comp_lookup: output field xixi doesn't exist in lookup table\\nDetail: None\
- トラブルシューティング
output_fieldsパラメーターのフィールドは、必要なテーブルに存在しません。
- ソリューション
テーブルに含まれるフィールドを確認し、output_fieldsパラメーターの無効なフィールドを置き換えます。
無効なパラメータタイプの設定
- 変換ルール
e_table_map(res_rds_mysql(address="xxx",username=1234,password="xx",database="xx",table="xx"),field="processid",output_fields=["name","xixi"])
- エラーログ
"errorMessage\": \"username not a string type\\nInvalid Settings
- トラブルシューティング
usernameパラメーターの値がstring型ではありません。
- ソリューション
string型の値を指定します。
ネットワークまたは権限エラー
- 変換ルール
e_table_map(res_rds_mysql(address="xxx",username=xxx,password="xx",database="test999",table="xx"),field="processid",output_fields=["name","xixi"])
- エラーログ1
メッセージ: データベース接続に失敗しました。原因 :( 1045、「ユーザー 'user1' @ '192.0.2.1 '(パスワードを使用: YES) 」のアクセスが拒否されました)
- エラーログ2
メッセージ: データベース接続に失敗しました。原因: (1049, "Unknown Database 'test999')
- トラブルシューティング
設定が有効か、ネットワークが接続されているか、必要なApsaraDB RDS for MySQLインスタンスで必要なホワイトリストが設定されているかを確認します。 接続エラーが発生した場合、エラーログの原因フィールドにエラーの詳細な原因が含まれます。 原因に基づいてエラーをトラブルシューティングできます。 一般的なエラーには、権限の欠如、パスワードの誤り、および無効なアドレスが含まれます。
- ソリューション
関数を再構成し、データ変換タスクを再開します。
SQL構文エラー
- 変換ルール
e_table_map(res_rds_mysql(address="xxx" 、username=xxx、password="xx" 、database="xx" 、sql="inset into test values(1、" aini ")" 、field="processid" 、output_fields=["name" 、"xixi"]))
- エラーログ
"errorMessage\": \"The sql_query field only supports database query syntax\\nInvalid Settings \\\"insert into test values(1,aini)\\\"\\nDetail: None\", \"requestId\": \"\"}
- トラブルシューティング
SQL構文が無効です。 データベースからのデータの読み取りおよびデータベースへのデータの書き込みに使用されるSQL構文が有効であることを確認します。 データベースへのデータの書き込みに使用されるSQL構文にエラーが見つかった場合、エラー
fetch data error
が発生する可能性があります。 このような状況では、エラーの原因を分析する必要があります。 - ソリューション
SQL構文を修正します。 リソース関数はSELECTのみをサポートします。
連続変換中のエラー
- 変換ルール
e_table_map(res_rds_mysql(address="xxx",username=xxx,password="xx",database="xx",table="test,field=" processid ",output_fields=[" name "," xixi "],refresh_interval=30))
- エラーログ
"errorMessage\": \"データベース接続に失敗しました。原因 :( 2003, \\\" 'rm -wz9z68i4itrk4v8d9yo.mysql.rds.aliyuncs.com 'でMySQLサーバーに接続できません (タイムアウト))
- トラブルシューティング
このエラーは、必要なApsaraDB RDS for MySQLインスタンスの特定のホワイトリストがクリアされたために発生します。 継続的な変換中にネットワークの中断などのエラーが発生した場合、データ変換タスクは自動的に再試行されます。 権限の取り消しやテーブルの誤った削除などのエラーが発生した場合は、手動で権限を付与するか、テーブルを復元する必要があります。
- ソリューション
エラーの原因に基づいて、ApsaraDB RDS for MySQLインスタンスのデータベースでテーブルまたは権限が変更されているかどうかを確認します。