変換ルールでApsaraDB RDS for MySQLからデータをプルする必要がある場合、データのプルまたは更新時にエラーが発生する可能性があります。 このトピックでは、エラーと解決策について説明します。
データ変換エンジンがLogstoreからデータを読み取った後、エンジンはデータを変換します。 変換ルールでOSS (Object Storage Service) 、ApsaraDB RDS、その他のLogstoreなどの外部リソースからデータをプルする必要がある場合、データのプルまたは更新時にエラーが発生する可能性があります。
Simple 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関数がSimple Log Serviceコンソールで個別に使用されている場合によく発生します。
解決策
リソース関数は、Simple 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"])
エラーログ
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"])
エラーログ
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"])
エラーログ
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
message: Database connection failed, cause: (1045, "Access denied for user 'user1'@'192.0.2.1' (using password: YES)")
エラーログ2
message: Database connection failed, cause: (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\": \"Database connection failed, cause: (2003, \\\"Can't connect to MySQL server on 'rm-wz9z68i4itrk4v8d9yo.mysql.rds.aliyuncs.com' (timed out))
対処方法
このエラーは、必要なApsaraDB RDS for MySQLインスタンスの特定のホワイトリストがクリアされたために発生します。 継続的な変換中にネットワークの中断などのエラーが発生した場合、データ変換ジョブは自動的にリトライされます。 権限の取り消しやテーブルの誤った削除などのエラーが発生した場合は、手動で権限を付与するか、テーブルを復元する必要があります。
解決策
エラーの原因に基づいて、ApsaraDB RDS for MySQLインスタンスのデータベースでテーブルまたは権限が変更されているかどうかを確認します。