Amazon Redshift の Data API に関連するエラーを特定する方法を教えてください。

所要時間3分
0

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 を使用したイベント駆動型アプリケーションの構築」を参照してください。


AWS公式
AWS公式更新しました 1年前
コメントはありません