使用 Amazon Redshift 数据 API
您可以使用内置的 Amazon Redshift 数据 API 访问您的 Amazon Redshift 数据库。使用此 API,您可以通过基于 Web 服务的应用程序(包括 Amazon Lambda、Amazon SageMaker 笔记本和 Amazon Cloud9)访问 Amazon Redshift 数据。有关这些应用程序的更多信息,请参阅 Amazon Lambda
数据 API 不需要与集群的持久连接。相反,它提供了安全 HTTP 终端节点以及与 Amazon 开发工具包的集成。您可以使用终端节点运行 SQL 语句,而无需管理连接。对数据 API 的调用是异步的。
数据 API 使用存储在 Amazon Secrets Manager 中的凭证或临时数据库凭证。您无需使用任何一种授权方法在 API 调用中传递密码。有关 Amazon Secrets Manager 的更多信息,请参阅 Amazon Secrets Manager 用户指南中的什么是 Amazon Secrets Manager?
有关数据 API 操作的更多信息,请参阅 Amazon Redshift 数据 API 参考。
使用 Amazon Redshift 数据 API
在您使用 Amazon Redshift 数据 API 之前,请查看以下步骤:
确定您作为数据 API 的调用者是否获得授权。有关授权的更多信息,请参阅授予对 Amazon Redshift 数据 API 的访问权限。
确定是否计划使用来自 Secrets Manager 的身份验证凭据或临时凭证调用数据 API。有关更多信息,请参阅在调用 Amazon Redshift 数据 API 时选择身份验证凭证。
如果您将 Secrets Manager 用于身份验证凭证,请设置密码。有关更多信息,请参阅在 Amazon Secrets Manager 中存储数据库凭证。
查看调用数据 API 时的注意事项和限制。有关更多信息,请参阅调用 Amazon Redshift 数据 API 时的注意事项。
从 Amazon Command Line Interface (Amazon CLI)、您自己的代码中调用数据 API,或使用 Amazon Redshift 控制台中的查询编辑器。有关从 Amazon CLI 进行调用的示例,请参阅调用 Data API。
调用 Amazon Redshift 数据 API 时的注意事项
调用数据 API 时,请注意以下事项:
有关提供了数据 API 的 Amazon Web Services 区域的列表,请参阅《Amazon Web Services 一般参考》中为 Redshift 数据 API 列出的端点。
查询的最长持续时间为 24 小时。
每个 Amazon Redshift 集群的活动查询(
STARTED
和SUBMITTED
查询)最大数为 200 个。查询结果的最大大小为 100 MB。如果调用返回的响应数据超过 100 MB,则调用将结束。
查询结果的最长保留时间为 24 小时。
最大查询语句大小为 100 KB。
数据 API 可用于查询以下节点类型的单节点和多节点集群:
dc2.large
dc2.8xlarge
ds2.xlarge
ds2.8xlarge
ra3.xlplus
ra3.4xlarge
ra3.16xlarge
集群必须在基于 Amazon VPC 服务的 Virtual Private Cloud (VPC) 中。
原定设置情况下,与
ExecuteStatement
或BatchExecuteStatement
API 操作的运行者具有相同的 IAM 角色或 IAM 权限的用户可以使用CancelStatement
、DescribeStatement
、GetStatementResult
和ListStatements
API 操作对同一个语句进行操作。要从另一个用户对同一 SQL 语句执行操作,该用户必须能够代入运行 SQL 语句的用户的 IAM 角色。有关如何代入角色的更多信息,请参阅授予对 Amazon Redshift 数据 API 的访问权限。-
BatchExecuteStatement
API 操作的Sqls
参数中的 SQL 语句将作为单个事务运行。它们按数组的顺序连续运行。后续的 SQL 语句要等到数组中的前一条语句完成后才会开始。如果任何 SQL 语句失败,由于它们作为一个事务运行,所有工作都将回滚。 在
ExecuteStatement
或BatchExecuteStatement
API 操作中使用的客户端令牌的最长保留时间为 8 小时。
在调用 Amazon Redshift 数据 API 时选择身份验证凭证
当您调用数据 API 时,您对某些 API 操作使用以下身份验证方法之一。每种方法都需要不同的参数组合。
- Amazon Secrets Manager
-
使用此方法,提供存储在 Amazon Secrets Manager 中的
secret-arn
密钥值。指定的密钥包含用于连接到您指定的database
的凭证。在连接到集群时,还可以提供数据库名称以及与密钥中的集群匹配的集群标识符。在连接到无服务器工作组时,也要提供数据库名称。 - 临时凭证
-
利用此方法,在连接到集群时,需要指定集群标识符、数据库名称和数据库用户名。此外,需具有调用
redshift:GetClusterCredentials
操作的权限。在连接到无服务器工作组时,需指定数据库名称。
使用任何一种方法,您还可以提供 region
值,该值指定您的集群所在的 Amazon 区域。
调用 Amazon Redshift 数据 API 时映射 JDBC 数据类型
下表将 Java 数据库连接 (JDBC) 数据类型映射到您在数据 API 调用中指定的数据类型。
JDBC 数据类型 |
Data API 数据类型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
其他类型(包括与日期和时间有关的类型) |
|
字符串值将传递到 Amazon Redshift 数据库并隐式转换为数据库数据类型。
注意
目前,数据 API 不支持通用唯一标识符 (UUID) 的数组。
在调用 Amazon Redshift 数据 API 时运行带有参数的 SQL 语句
您可以通过使用 SQL 语句部分的参数调用数据 API 操作来控制提交到数据库引擎的 SQL 文本。命名参数提供了一种灵活的方式来传入参数,而无需在 SQL 文本中对参数进行硬编码。它们可以帮助您重复使用 SQL 文本并避免 SQL 注入问题。
以下示例显示 execute statement
Amazon CLI 命令的 parameters
字段的命名参数。
--parameters "[{\"name\": \"id\", \"value\": \"1\"},{\"name\": \"address\", \"value\": \"Seattle\"}]"
使用命名参数时,请注意以下事项:
命名参数可以按任意顺序排列,并且参数可以在 SQL 文本中多次使用。前面示例中显示的参数选项,值
1
和Seattle
插入到表列id
和address
中。在 SQL 文本中,您可以按如下方式指定命名参数:--sql "insert into mytable values (:id, :address)"
SQL 运行时,数据将隐式转换为数据类型。有关数据类型转换的更多信息,请参阅 Amazon Redshift 数据库开发人员指南中的数据类型。
您不能将值设置为 NULL。数据 API 将其解释为文本字符串
NULL
。以下示例将id
替换为文本字符串null
。不是 SQL NULL 值。--parameters "[{\"name\": \"id\", \"value\": \"null\"}]"
无法设置零长度值。数据 API SQL 语句失败。下面的示例尝试设置
id
长度值为零,导致 SQL 语句失败。--parameters "[{\"name\": \"id\", \"value\": \"\"}]"
不能在带有参数的 SQL 语句中设置表名。数据 API 遵循 JDBC
PreparedStatement
的规则。describe statement
操作的输出返回 SQL 语句的查询参数。仅
execute-statement
操作支持带有参数的 SQL 语句。
在调用 Amazon Redshift 数据 API 时运行带有幂等性令牌的 SQL 语句
当您发出变更 API 请求时,该请求通常会在操作的异步工作流完成之前返回结果。即使请求已经返回结果,操作在完成之前也可能会超时或遇到其他服务器问题。这样就很难确定请求是否成功,并且会导致进行多次重试以确保操作成功完成。但是,如果原始请求和后续重试成功,则会多次完成操作。这意味着您可能会更新比预期更多的资源。
幂等性确保 API 请求完成不超过一次。对于幂等性请求,如果原始请求成功完成,则后续重试也会成功完成,而不会执行任何后续操作。数据 API ExecuteStatement
和 BatchExecuteStatement
操作具有可选的 ClientToken
幂等性参数。ClientToken
在 8 小时后过期。
重要
如果您从 Amazon SDK 调用 ExecuteStatement
和 BatchExecuteStatement
操作,它会自动生成客户端令牌以供重试时使用。在这种情况下,我们不建议将 client-token
参数与 ExecuteStatement
和 BatchExecuteStatement
操作一起使用。查看 CloudTrail 日志以查看 ClientToken
。有关 CloudTrail 日志示例,请参阅 Amazon Redshift 数据 API 示例。
以下 execute-statement
Amazon CLI 命令说明了幂等性的可选 client-token
参数。
aws redshift-data execute-statement
--region us-west-2
--secret arn:aws:secretsmanager:us-west-2:123456789012:secret:myuser-secret-hKgPWn
--cluster-identifier mycluster-test
--sql "select * from stl_query limit 1"
--database dev
--client-token b855dced-259b-444c-bc7b-d3e8e33f94g1
下表显示了幂等性 API 请求可能获得的一些常见响应,并提供了重试建议。
响应 | 建议 | 注释 |
---|---|---|
200 (OK) [200(正常)] |
不重试 |
原始请求成功完成。成功返回任何后续重试。 |
400 系列响应代码 |
不重试 |
请求存在问题,原因如下:
如果请求涉及正在改变状态的资源,则重试请求可能会成功。 |
500-series response codes(500 系列响应代码) |
重试 |
该错误是由 Amazon 服务器端问题引起,通常是暂时性的。使用适当的退避策略重复发出请求。 |
有关 Amazon Redshift 响应代码的信息,请参阅《Amazon Redshift API 参考》中的常见错误。