Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何識別 Amazon Redshift 中的 Data API 查詢錯誤?
我想確定 Amazon Redshift Data API 查詢失敗的原因。
解決方法
Amazon Redshift Data API 是非同步的。您無需等待完成即可執行長時間執行的查詢。
當查詢失敗時,查詢的狀態不會立即顯示。使用 DescribeStatement API 動作來確定單一或多個查詢失敗的原因。
單一查詢
識別陳述式 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」(錯誤:關係「test_table」不存在)。
多個查詢
識別陳述式 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 或 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 建立事件驅動應用程式。
- 語言
- 中文 (繁體)
