如何识别与 Amazon Redshift 中的 Data API 相关的错误?

3 分钟阅读
0

如何确定 Amazon Redshift 中的 Data API 查询失败的原因?

解决方案

Amazon Redshift Data API 是异步的,这意味着您可以运行长时间执行的查询,而不必等待查询完成。当 Data 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 语句返回 ExecuteStatementOutput,其中就包括语句 ID。您可以使用 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"(错误:关系 "test_table" 不存在)。

多个查询

要这很对集群运行多个查询,请使用 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":(“错误”:)部分显示了每条子语句的确切错误。

要排查 Data API 的问题,请参阅排查 Amazon Redshift Data API 问题

监控 Data API 事件

可以使用 Amazon EventBridge 监控 Data API 事件。这些信息可以发送到与 Amazon Simple Notification Service (Amazon SNS) 集成的 AWS Lambda 函数,以此发送通知。有关更多信息,请参阅使用 AWS Lambda 和 Amazon Redshift Data API 构建事件驱动的应用程序


AWS 官方
AWS 官方已更新 1 年前