Get Hands-on with Amazon EKS - Workshop Event Series
Whether you're taking your first steps with Kubernetes or you're an experienced practitioner looking to sharpen your skills, our Amazon EKS workshop series delivers practical, real-world experience that moves you forward. Learn directly from AWS solutions architects and EKS specialists through hands-on sessions designed to build your confidence with Kubernetes. Register now and start building with Amazon EKS!
Amazon Redshift で Data API クエリのエラーを特定する方法を教えてください。
Amazon Redshift Data API クエリが失敗した理由を調査したいです。
解決策
Amazon Redshift Data API は非同期です。実行時間の長いクエリを実行する際、完了を待つ必要はありません。
クエリが失敗した場合、そのクエリのステータスはすぐには表示されません。DescribeStatement API アクションを使用すると、1 つまたは複数のクエリが失敗した理由を特定できます。
単一クエリ
ステートメント ID を特定する
Amazon Redshift クラスターに対して単一クエリを実行するには、まずステートメント ID を取得します。
ステートメント ID を取得するには、ExecuteStatement API アクションを実行します。次のコマンド例では、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
出力例:
{ "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" }
出力の Id セクションにステートメント ID が表示されます。
ステータスを確認する
クエリのステータスを確認するには、DescribeStatement を使用してステートメント ID を入力します。
aws redshift-data describe-statement --id 458c568d-717b-4f36-90bd-e642bfb06cbf
出力例:
{ "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」
複数のクエリ
ステートメント ID を特定する
Amazon Redshift クラスターに対して複数のクエリを実行するには、まずステートメント ID を取得します。
ステートメント ID を取得するには、BatchExecuteStatement API アクションを使用します。次の例を参照してください。
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 セクションにステートメント ID が表示されます。
ステータスを確認する
クエリのステータスを確認するには、DescribeStatement を使用してステートメント ID を入力します。
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 " }
出力には、マルチステートメントクエリ内の個々の SQL ステートメントのステータスが表示されます。出力の Error セクションに各ステートメントのエラーが表示されます。
Data API での問題をトラブルシューティングする方法については、「Amazon Redshift Data API での問題のトラブルシューティング」を参照してください。
注: ExecuteStatement API または BatchExecuteStatement API 操作の実行者と同じ AWS Identity and Access Management (IAM) ロールまたは IAM アクセス許可を持つユーザーは、DescribeStatement を使用して同じステートメントを操作できます。別のユーザーが同じ SQL ステートメントを操作する場合は、その SQL ステートメントを実行したユーザーの IAM ロールを引き受ける必要があります。
詳細については、「Amazon Redshift Data API を呼び出す際の考慮事項」を参照してください。
Data API イベントを監視する
Amazon EventBridge は、Data API イベントを監視します。この情報を AWS Lambda 関数に送信すると、その関数は Amazon Simple Notification Service (Amazon SNS) に接続して通知を配信します。
詳細については、「AWS Lambda と Amazon Redshift Data API を使用してイベント駆動アプリケーションをビルドする」を参照してください。
関連するコンテンツ
AWS公式更新しました 6ヶ月前