Amazon Redshift の Data API に関連するエラーを特定する方法を教えてください。
Amazon Redshift の Data API クエリが失敗した理由を特定する方法を教えてください。
解決方法
Amazon Redshift Data API は非同期なので、実行時間の長いクエリが完了するのを待たずに実行できます。Data API クエリが失敗しても、クエリのステータスはすぐには表示されません。失敗の原因を特定するには、単一または複数のクエリに対して DescribeStatement アクションを使用します。DescribeStatement を実行するには、ステートメント ID が必要です。
単一クエリ
クラスターに対して 1 つのクエリを実行するには、ExecuteStatement アクションを使用してステートメント ID を返します。
**注意:**以下のコマンド例では、AWS Secrets Manager の認証方法を使用しています。このコマンドは、クラスターに対して SQL ステートメントを実行し、結果を取得するための識別子を返します。
aws redshift-data execute-statement --region us-east-1 --secret arn:aws:secretsmanager:us-east-1:123456789012:secret:myuser-secret-hKgPWn --cluster-identifier redshift-cluster-1 --sql "select * from test_table;" --database dev
注意: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
出力は次のようになります。
{ "ClusterIdentifier": "redshift-cluster-1", "CreatedAt": "2022-09-16T12:22:31.894000+05:30", "Database": "dev", "Id": "458c568d-717b-4f36-90bd-e642bfb06cbf", "SecretArn": "arn:aws:secretsmanager:us-east-1:123456789012:secret:myuser-secret-hKgPWn" }
前述の SQL ステートメントは、ステートメント ID を含む ExecuteStatementOutput を返します。DescribeStatement を使用してステートメント ID を入力すると、クエリのステータスを確認できます。
aws redshift-data describe-statement --id 458c568d-717b-4f36-90bd-e642bfb06cbf
DescribeStatement の出力には、次の追加情報が表示されます。
- RedshiftPid
- クエリの継続時間
- 行数
- 結果セットのサイズ
- RedshiftQueryID
出力は次のようになります。
{ "ClusterIdentifier": "redshift-cluster-1", "CreatedAt": "2022-09-16T12:22:31.894000+05:30", "Duration": -1, "Error": "ERROR: relation \"test_table\" does not exist", "HasResultSet": false, "Id": "458c568d-717b-4f36-90bd-e642bfb06cbf", "QueryString": "select * from test_table;", "RedshiftPid": 1074727629, "RedshiftQueryId": -1, "ResultRows": -1,< "ResultSize": -1, "SecretArn": "arn:aws:secretsmanager:us-east-1:123456789012:secret:myuser-secret-hKgPWn", "Status": "FAILED", "UpdatedAt": "2022-09-16T12:22:32.365000+05:30" }
前の応答の "Error": セクションに、正確なエラーが表示されます。前の例では、「ERROR: relation "test_table" does not exist」となります。
複数のクエリ
クラスターに対して複数のクエリを実行するには、BatchExecuteStatement アクションを使用してステートメント ID を返します。
aws redshift-data batch-execute-statement --region us-east-1 --secret-arn arn:aws:secretsmanager:us-east-1:123456789012:secret:myuser-secret-hKgPWn --cluster-identifier redshift-cluster-1 --database dev --sqls "select * from test_table;" "select * from another_table;"
出力は次のようになります。
{ "ClusterIdentifier": "redshift-cluster-1", "CreatedAt": "2022-09-16T12:37:16.707000+05:30", "Database": "dev", "Id": "08b4b917-9faf-498a-964f-e82a5959d1cb", "SecretArn": "arn:aws:secretsmanager:us-east-1:123456789012:secret:myuser-secret-hKgPWn" }
クエリのステータスを取得するには、前の応答のステートメント ID を指定した DescribeStatement を使用します。
aws redshift-data describe-statement --id 08b4b917-9faf-498a-964f-e82a5959d1cb
出力は次のようになります。
{ "ClusterIdentifier ": "redshift-cluster-1 ", "CreatedAt ": "2022-09-16T12:37:16.707000+05:30 ", "Duration ": 0, "Error ": "Query #1 failed with ERROR: relation \ "test_table\" does not exist ", "HasResultSet ": false, "Id ": "08b4b917-9faf-498a-964f-e82a5959d1cb ", "RedshiftPid ": 1074705048, "RedshiftQueryId ": 0, "ResultRows ":-1, "ResultSize ": -1, "SecretArn ": "arn:aws:secretsmanager:us-east-1:123456789012:secret:myuser-secret-hKgPWn ", "Status ": "FAILED ", "SubStatements ": [ { "CreatedAt ": "2022-09-16T12:37:16.905000+05:30 ", "Duration ": -1, "Error ": "ERROR: relation \ "test_table\" does not exist ", "HasResultSet ": false, "Id ": "08b4b917-9faf-498a-964f-e82a5959d1cb:1", "QueryString ": "select * from test_table; ", "RedshiftQueryId ": -1, "ResultRows ": -1, "ResultSize ": -1, "Status ": "FAILED ", "UpdatedAt ": "2022-09-16T12:37:17.263000+05:30 " }, { "CreatedAt ": "2022-09-16T12:37:16.905000+05:30", "Duration ": -1, "Error ": "Connection or an prior query failed. ", "HasResultSet ": false, "Id ": "08b4b917-9faf-498a-964f-e82a5959d1cb:2 ", "QueryString ": "select * from another_table;", "RedshiftQueryId ": 0, "ResultRows ": -1, "ResultSize": -1, "Status ": "ABORTED ", "UpdatedAt ": "2022-09-16T12:37:17.263000+05:30 " } ], "UpdatedAt ": "2022-09-16T12:37:17.288000+05:30 " }
上記の出力には、マルチステートメントのクエリのすべてのサブステートメントのステータスが表示されます。前の応答の "Error": セクションに、各サブステートメントの正確なエラーが表示されます。
Data API の問題をトラブルシューティングするには、「Amazon Redshift Data API に関する問題のトラブルシューティング」を参照してください。
Data API イベントの監視
Data API イベントは Amazon EventBridge を使用して監視できます。この情報は、Amazon Simple Notification Service (Amazon SNS) と統合されている AWS Lambda 関数に送信して通知を送信できます。詳細については、「AWS Lambda と Amazon Redshift Data API を使用したイベント駆動型アプリケーションの構築」を参照してください。

関連するコンテンツ
- 質問済み 2年前lg...
- AWS公式更新しました 2年前
- AWS公式更新しました 4年前