Amazon Redshift의 데이터 API와 관련된 오류를 식별하려면 어떻게 해야 하나요?

3분 분량
0

Amazon Redshift의 데이터 API 쿼리가 실패한 이유를 식별하려면 어떻게 해야 하나요?

해결 방법

Amazon Redshift 데이터 API는 비동기식이므로 쿼리가 완료될 때까지 기다릴 필요 없이 오래 실행되는 쿼리를 실행할 수 있습니다. 데이터 API 쿼리가 실패하는 경우 쿼리 상태가 즉시 표시되지 않습니다. 실패 원인을 확인하려면 단일 또는 여러 쿼리에 대해 DescribeStatement 작업을 사용하세요. DescribeStatement를 실행하려면 명령문 ID가 있어야 합니다.

단일 쿼리

클러스터에 대해 단일 쿼리를 실행하려면 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"
}

쿼리 상태를 가져오려면 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 "
}

위 출력에는 다중 명령문 쿼리에 대한 모든 하위 명령문의 상태가 표시됩니다. 위 응답의 “Error”: 섹션에 각 하위 명령문의 정확한 오류가 표시됩니다.

데이터 API와 관련된 문제를 해결하려면 Amazon Redshift 데이터 API의 문제 해결을 참조하세요.

데이터 API 이벤트 모니터링

데이터 API 이벤트는 Amazon EventBridge를 사용하여 모니터링할 수 있습니다. 이 정보는 Amazon Simple Notification Service(SNS)와 통합된 AWS Lambda 함수로 전송하여 알림을 보낼 수 있습니다. 자세한 내용은 AWS Lambda 및 Amazon Redshift 데이터 API를 사용한 이벤트 기반 애플리케이션 구축을 참조하세요.


AWS 공식
AWS 공식업데이트됨 일 년 전