Snowflake SQL API 引用¶
本主题记录了 SQL API 的操作、请求和响应。
操作¶
POST /api/v2/statements¶
若要提交一个或多个要执行的 SQL 语句,请向 /api/v2/statements 发送 POST 请求。您可以指定以异步方式执行语句。
请求语法¶
查询参数¶
参数 |
描述 |
|---|---|
|
(可选) API 请求的唯一 ID ( UUID (link removed))。请参阅 重新提交执行 SQL 语句的请求。 |
|
(可选)设置为 如果未指定该参数或将其设置为 false,则执行语句,如果在 45 秒内执行完毕,则返回执行结果。如果语句执行需要更长的时间才能完成,则返回语句句柄。 |
|
(可选)设置为 备注 不能在 GET 请求中指定此参数。 默认情况下,SQL NULL 值返回为值 将此查询参数设置为 false 时(例如 |
请求标头¶
请求必须包含 所有操作的请求标头 中所列的标头。
请求正文¶
(必填)请求正文必须包含:ref:`label-sql_api_reference_post_statements_request_body`中指定的对象。
响应¶
此操作可以返回下面列出的响应代码。
代码 |
描述 |
|---|---|
200 |
语句已成功执行。 对于此响应代码,响应可以具有以下标头: 如果在请求中提交了单个 SQL 语句, 则响应正文将包含一个 ResultSet 对象,其中包含了请求的数据。 备注 如果响应中的 以下是单个 SQL 语句的响应示例,其中,结果在单个分区中返回。 以下是单个 SQL 语句的响应示例,其中,结果需要在多个分区中返回; 如果在请求中提交了多个 SQL 语句, 则响应正文将包含一个 ResultSet 对象,其中包含有关多个语句执行状态的详细信息。 在这种情况下,响应不包含请求的数据。相反, 响应中包含字段 以下是指定多个 SQL 语句的请求的响应示例,其中:
|
202 |
仍在执行该语句。使用 响应正文包含一个 QueryStatus 对象,其中包含有关语句执行状态的详细信息。 以下是响应示例: |
408 |
语句的执行超出了超时期限。已取消执行该语句。 响应正文包含一个 QueryStatus 对象,其中包含有关取消语句执行的详细信息。 |
422 |
执行语句时出错。有关详细信息,请查看错误代码和错误消息。 响应正文包含一个 QueryFailureStatus 对象,其中包含有关错误的详细信息。 以下是响应示例: |
有关此操作返回的其他响应代码,请参阅 所有操作的响应代码。
GET /api/v2/statements/{statementHandle}¶
要查看语句的执行状态,请向 /api/v2/statements/{statementHandle} 发送 GET 请求。如果语句已成功执行,则响应正文将包含一个 ResultSet 对象,其中包含了请求的数据。
请求语法¶
路径参数¶
参数 |
描述 |
|---|---|
|
(必填)要查看的语句的句柄。可以通过 执行语句的请求 的响应中返回的 QueryStatus 对象获取该句柄。 |
查询参数¶
|
(可选) API 请求的唯一 ID ( UUID (link removed))。请参阅 重新提交执行 SQL 语句的请求。 |
|---|---|
|
(可选)要返回的分区号。每个分区的大小由 Snowflake 确定。 有关更多信息,请参阅 从响应中获取结果。 |
请求标头¶
请求必须包含 所有操作的请求标头 中所列的标头。
响应¶
此操作可以返回下面列出的响应代码。
代码 |
描述 |
|---|---|
200 |
语句已成功执行。 对于此响应代码,响应可以具有以下标头: 响应正文包含一个 ResultSet 对象,其中包含了请求的数据。 以下是一个响应示例,其中 |
202 |
仍在执行该语句。重复请求以查看语句执行的状态。 响应正文包含一个 QueryStatus 对象,其中包含有关语句执行状态的详细信息。 以下是响应示例: |
422 |
执行语句时出错。有关详细信息,请查看错误代码和错误消息。 响应正文包含一个 QueryFailureStatus 对象,其中包含有关错误的详细信息。 |
有关此操作返回的其他响应代码,请参阅 所有操作的响应代码。
POST /api/v2/statements/{statementHandle}/cancel¶
要取消对语句的执行,请向 /api/v2/statements/{statementHandle}/cancel 发送 POST 请求。
请求语法¶
路径参数¶
参数 |
描述 |
|---|---|
|
(必填)要查看的语句的句柄。可以通过 执行语句的请求 的响应中返回的 QueryStatus 对象获取该句柄。 |
查询参数¶
参数 |
描述 |
|---|---|
|
(可选) API 请求的唯一 ID ( UUID (link removed))。请参阅 重新提交执行 SQL 语句的请求。 |
请求标头¶
请求必须包含 所有操作的请求标头 中所列的标头。
响应¶
此操作可以返回下面列出的响应代码。
代码 |
描述 |
|---|---|
200 |
已成功取消执行该语句。 响应正文包含一个 CancelStatus 对象,其中包含有关取消语句的信息。 以下是响应示例: |
422 |
执行语句时出错。有关详细信息,请查看错误代码和错误消息。 响应正文包含一个 QueryFailureStatus 对象,其中包含有关错误的详细信息。 以下是响应示例: |
有关此操作返回的其他响应代码,请参阅 所有操作的响应代码。
所有操作的请求标头¶
以下请求标头适用于所有操作:
标头 |
必填还是可选? |
描述 |
|---|---|---|
|
必填 |
将其设置为 例如:
请参阅 对服务器进行身份验证。 |
|
必填 |
将其设置为响应正文中可接受的媒体类型(MIME 类型)列表。请包含类型 |
|
必填 |
将其设置为请求正文的媒体类型(MIME 类型)。将其设置为 |
|
必填 |
将其设置为应用程序的名称和版本(例如 |
|
可选 |
将此设置为以下某个值: 如果您省略了 即使此标头可选,您也可以选择指定此标头。您可以将标头设置为以下值之一: |
请求正文中的对象类型¶
向 /api/v2/statements/ 发送的 POST 请求正文¶
对于向 /api/v2/statements/ 端点发送的 POST 请求(请参阅 POST /api/v2/statements),其正文是一个 JSON 对象,用于指定要执行的 SQL 语句、语句上下文和结果集中的数据格式。您可以在请求正文中使用此对象来执行语句。
字段¶
字段 |
描述 |
|---|---|
|
(可选)要执行的 SQL 语句。请参阅 SQL API 的限制,了解受支持和不受支持的语句列表。 类型:字符串 |
|
(可选)语句执行超时(以秒为单位)。如果语句的执行时间超过指定的超时时间,则自动取消执行。若要将超时设置为最大值(604800 秒),请将超时设置为 0。如果未设置此字段,系统将使用 STATEMENT_TIMEOUT_IN_SECONDS 参数指定的超时。 类型:64 位带符号整数 示例: |
|
(可选)应在其中执行语句的数据库。此字段中的值区分大小写。 如果省略此字段, SQL API 将使用 用户 :code:`DEFAULT_NAMESPACE 属性 </sql-reference/sql/alter-user>` 值中的数据库。 类型:字符串 示例: |
|
(可选)应在其中执行语句的架构。 此字段中的值区分大小写。 如果省略此字段, SQL API 将使用 用户 :code:`DEFAULT_NAMESPACE 属性 </sql-reference/sql/alter-user>` 值中的架构。 类型:字符串 示例: |
|
(可选)执行语句时要使用的仓库。 此字段中的值区分大小写。 如果省略此字段, SQL API 将使用 用户 :code:`DEFAULT_WAREHOUSE 属性 </sql-reference/sql/alter-user>` 的值。 类型:字符串 示例: |
|
(可选)执行语句时要使用的角色。 此字段中的值区分大小写。 如果省略此字段, SQL API 将使用 用户 :code:`DEFAULT_ROLE 属性 </sql-reference/sql/alter-user>` 的值。 类型:字符串 示例: |
|
(可选) SQL 语句中 绑定变量 的值。执行语句时,Snowflake 会用这些指定的值替换语句中的占位符( 请注意,对于 SQL API 的 GA 版本,此字段的格式可能会发生变化。 类型:对象 示例: |
|
(可选)要为此请求设置的 会话参数。 类型:对象 (statements_parameters) |
示例¶
以下是正文对象的示例:
statements_parameters¶
statements_parameters 是一个 JSON 对象,用于指定要为此请求设置的 会话参数。此对象应位于向 /api/v2/statements 端点发送的 POST 请求正文的 parameters 字段中(请参阅 向 /api/v2/statements/ 发送的 POST 请求正文)。
备注
SQL API 仅支持下表中列出的会话参数。
字段¶
字段 |
描述 |
|---|---|
|
(可选)指定由 BINARY 到 VARCHAR 转换函数作为输出返回的 VARCHAR 值的格式。有关详细信息,请参阅 BINARY_OUTPUT_FORMAT。 类型:字符串 示例: |
|
(可选)指定要下载的每个查询结果集(或块)的大小上限(以 MB 为单位)。有关详细信息,请参阅 <label-client_result_chunk_size>` 。 类型:整型 示例: |
|
(可选)指定 DATE 数据类型的显示格式。有关详细信息,请参阅 <label-date_output_format>` 。有关使用参数确定查询结果输出格式的详细信息,请参阅 设置查询结果输出格式。 类型:字符串 示例: |
|
(在请求中指定多个 SQL 语句时为必填项)使用多语句功能时,指定在请求中提交的 SQL 语句数量。有效值为:
类型:字符串 示例: |
|
(可选)要与 SQL 语句关联的查询标记。有关详细信息,请参阅 QUERY_TAG 参数。 类型:字符串 示例: |
|
(可选)指定结果集中返回的最大行数,其中 0(默认值)表示没有最大行数。有关详细信息,请参阅 ROWS_PER_RESULTSET<label-rows_per_resultset> 参数 `。 类型:整型 示例:200 |
|
(可选)指定 TIME 数据类型的显示格式。有关详细信息,请参阅 <label-time_output_format>` 。有关使用参数确定查询结果输出格式的详细信息,请参阅 设置查询结果输出格式。 类型:字符串 示例: |
|
(可选)指定 TIMESTAMP_LTZ 数据类型的显示格式。有关详细信息,请参阅 <label-timestamp_ltz_output_format>` 。有关使用参数确定查询结果输出格式的详细信息,请参阅 设置查询结果输出格式。 类型:字符串 示例: |
|
(可选)指定 TIMESTAMP_NTZ 数据类型的显示格式。有关详细信息,请参阅 <label-timestamp_ntz_output_format>` 。有关使用参数确定查询结果输出格式的详细信息,请参阅 设置查询结果输出格式。 类型:字符串 示例: |
|
(可选)指定 TIMESTAMP 数据类型别名的显示格式。有关详细信息,请参阅 <label-timestamp_output_format>` 。有关使用参数确定查询结果输出格式的详细信息,请参阅 设置查询结果输出格式。 类型:字符串 示例: |
|
(可选)指定 TIMESTAMP_TZ 数据类型的显示格式。有关详细信息,请参阅 <label-timestamp_tz_output_format>` 。有关使用参数确定查询结果输出格式的详细信息,请参阅 设置查询结果输出格式。 类型:字符串 示例: |
|
(可选)执行语句时要使用的时区。有关详细信息,请参阅 TIMEZONE<label-timezone> 参数 `。 类型:字符串 示例: |
|
(可选)是否可以在连续调用同一查询时重复使用查询结果(只要原始结果未过期)。有关详细信息,请参阅 USE_CACHED_RESULT 参数 类型:字符串 示例: |
所有操作的响应代码¶
本部分列出了适用于所有操作的响应代码。
代码 |
描述 |
|---|---|
400 |
错误请求。 请求负载无效或格式不正确。如果应用程序未发送正确的请求负载,则会发生这种情况。响应正文可能包含错误代码和说明实际原因的消息。应用程序必须重新构造请求正文,然后重试。 以下是响应示例: |
401 |
未授权。 请求未获得授权。如果所附的访问令牌无效或丢失,则会发生这种情况。响应正文可能包含错误代码和说明实际原因的消息,例如令牌过期、无效。应用程序必须获取新的访问令牌,然后重试。 请参阅 对服务器进行身份验证。 以下是响应示例: |
403 |
禁止。 请求被禁止。如果在未启用 API 的情况下发出请求,则会发生这种情况。 |
404 |
未找到。 请求端点无效。如果 API 端点错误,则会发生这种情况。例如,如果应用程序请求 |
405 |
方法不允许。 请求方法与受支持的 API 不匹配。例如,如果应用程序使用 GET 方法调用 API,但端点只接受 POST,则会发生这种情况。应用程序在发送请求时必须使用受支持的方法。 以下是响应示例: |
415 |
请求标头 |
422 |
请求格式正确(即语法正确),但无法处理。 API 仅支持 |
429 |
请求过多。 请求数量达到速率限制。应用程序必须降低向 API 端点发送请求的频率。应用程序可能利用退避重试。建议使用指数抖动退避。 当服务器收到过多的并发请求时,也会发生此响应。API 的并发限制由 Snowflake 强制执行的并发限制确定。 以下是响应示例: |
500 |
内部服务器错误。 服务器遇到不可恢复的系统错误。响应正文可能包含错误代码和消息,以便提供进一步的指导。 您可以通过将 |
502 |
无效网关。 服务器充当网关或代理,从上游服务器收到无效响应。 您可以通过将 |
503 |
服务不可用。 由于服务器超时,请求未得到处理。应用程序可能利用退避重试。建议使用指数抖动退避。 |
504 |
网关超时。 由于服务器超时,请求未得到处理。应用程序可能利用退避重试。建议使用指数抖动退避。 |
522 |
无效 SSL 证书。 服务器无法验证提供的 SSL 证书。 |
所有操作的响应标头¶
响应可以包含以下标头:
标头 |
描述 |
|---|---|
|
此标头位于 :ref:` 执行语句的请求 <label-sql_api_reference_post_statements>` 和 :ref:` 查看语句执行状态的请求 <label-sql_api_reference_get_statements>` 的 200 响应中。 此标头提供了指向其他结果分区(例如第一个分区、最后一个分区等)的链接。此标头可以包含多个 URL 条目,并使用不同的 例如: |
响应正文中的对象类型¶
CancelStatus¶
CancelStatus 是一个 JSON 对象,其中包含有关取消语句执行的信息。此对象在 :ref:` 取消请求 <label-sql_api_reference_post_statements_cancel>` 的响应正文中返回。
字段¶
字段 |
描述 |
|---|---|
|
类型:字符串 |
|
类型:字符串 |
示例: |
类型:字符串 |
|
正在执行的语句的唯一标识符。 类型:字符串 ( UUID (link removed)) 示例: |
|
用于获取语句状态和结果集的 URL。 类型:字符串 ( URL) 示例: |
示例¶
QueryFailureStatus¶
QueryFailureStatus 是一个 JSON 对象,其中包含有关执行语句失败的信息。此对象在 :ref:` 执行语句的请求 <label-sql_api_reference_post_statements>` 的 422 响应正文中返回。
字段¶
字段 |
描述 |
|---|---|
|
类型:字符串 示例: |
|
类型:字符串 |
|
类型:字符串 示例: |
|
正在执行的语句的唯一标识符。 类型:字符串 ( UUID (link removed)) 示例: |
|
用于指定语句执行开始时间的时间戳。时间戳以纪元以来的毫秒数表示。 类型:64 位带符号整数 示例: |
|
用于获取语句状态和结果集的 URL。 类型:字符串 ( URL) 示例: |
示例¶
QueryStatus¶
QueryStatus 是一个 JSON 对象,其中包含有关语句执行状态的信息。此对象在以下内容中返回:
:ref:` 执行语句的请求 <label-sql_api_reference_post_statements>` 的 202 和 408 响应正文。
:ref:` 查看语句执行状态的请求 <label-sql_api_reference_get_statements>` 的 202 和 422 响应正文。
字段¶
字段 |
描述 |
|---|---|
|
类型:字符串 示例: |
|
类型:字符串 |
|
类型:字符串 示例: |
|
正在执行的语句的唯一标识符。 类型:字符串 ( UUID (link removed)) 示例: |
|
用于指定语句执行开始时间的时间戳。时间戳以纪元以来的毫秒数表示。 类型:64 位带符号整数 示例: |
|
用于获取语句状态和结果集的 URL。 类型:字符串 ( URL) 示例: |
示例¶
ResultSet¶
ResultSet 是一个 JSON 对象,其中包含语句执行结果。此对象在 :ref:` 执行语句的请求 <label-sql_api_reference_post_statements>` 和 :ref:` 查看语句执行状态的请求 <label-sql_api_reference_get_statements>` 的 200 响应正文中返回。
字段¶
字段 |
描述 |
|---|---|
|
类型:字符串 示例: |
|
类型:字符串 |
|
类型:字符串 示例: |
|
正在执行的语句的唯一标识符。 如果在请求中指定了多个语句,则此句柄对应于这些语句集。有关请求中各个语句的句柄,请参阅 类型:字符串 ( UUID (link removed)) 示例: |
|
为此请求执行的语句的唯一标识符数组。 类型:字符串数组 (UUID (link removed)) 示例: |
|
用于指定语句执行开始时间的时间戳。时间戳以纪元以来的毫秒数表示。 示例: |
|
用于获取语句状态和结果集的 URL。 类型:字符串 ( URL) 示例: |
|
有关返回的结果集的元数据。 类型:对象 (ResultSet_resultSetMetaData) |
|
如果请求包含单个 SQL 语句, 则此字段包含结果集数据。 结果集的格式是 JSON 格式的数组构成的数组:
类型:数组构成的数组 示例: 如果请求包含多个 SQL 语句, 则此字段仅包含“Multiple statements executed successfully”这一消息。若要检索请求中每个语句的结果,请从 |
|
对于 DML 语句,此字段包含有关受操作影响的行数的统计信息。 类型:对象 (ResultSet_stats) |
ResultSet_resultSetMetaData¶
ResultSet_resultSetMetaData 是一个 JSON 对象,其中包含有关语句执行结果的元数据。此对象位于 ResultSet 对象的 resultSetMetaData 字段中。
字段¶
字段 |
描述 |
|---|---|
|
要返回的分区的索引号(其中, 有关更多信息,请参阅 从响应中获取结果。 |
|
结果的总行数。 类型:64 位带符号整数 示例: |
|
结果集中数据的格式。 类型:字符串 |
|
描述结果集中的列的 ResultSet_resultSetMetaData_rowType 对象数组。 类型:ResultSet_resultSetMetaData_rowType 数组。 示例: |
ResultSet_resultSetMetaData_rowType ¶
ResultSet_resultSetMetaData_rowType 是一个 JSON 对象,用于描述一组结果中的一列。这些对象的数组位于 ResultSet_resultSetMetaData 对象的 rowType 字段中。
字段¶
字段 |
描述 |
|---|---|
|
列的名称。 类型:字符串 |
|
列的 Snowflake 数据类型。 类型:字符串 |
|
列的长度。 类型:64 位带符号整数 |
|
列的精度。 类型:64 位带符号整数 |
|
列的标度。 类型:64 位带符号整数 |
|
指定列是否可为空。 类型:布尔 |
示例¶
ResultSet_stats¶
ResultSet_stats 是一个 JSON 对象,其中包含有关 DML 语句执行情况的统计信息。此对象位于 ResultSet_resultSetMetaData 对象的 stats 字段中。
字段¶
字段 |
描述 |
|---|---|
|
插入的行数。 类型:64 位带符号整数 示例: |
|
更新的行数。 类型:64 位带符号整数 示例: |
|
删除的行数。 类型:64 位带符号整数 示例: |
|
更新的重复行数。 类型:64 位带符号整数 示例: |