Submitting a SQL Statement - ExecuteSql
Function
This API is used to submit and execute a SQL statement in an MRS cluster. It is suitable for running data query and analysis tasks via the API. The execution result can be queried using the API for obtaining SQL results.
Constraints
None
Debugging
You can debug this API in API Explorer. Automatic authentication is supported. API Explorer can automatically generate sample SDK code and supports sample SDK code debugging.
Authorization Information
Each account has all the permissions required to call all APIs, but IAM users must be assigned the required permissions.
- If you are using role/policy-based authorization, see Permissions Policies and Supported Actions for details on the required permissions.
- If you are using identity policy-based authorization, the following identity policy-based permissions are required.
URI
- Format
- Parameter description
Table 1 URI parameters Parameter
Mandatory
Type
Description
project_id
Yes
String
Definition
Project ID. For details about how to obtain the project ID, see Obtaining a Project ID.
Constraints
N/A
Range
The value must consist of 1 to 64 characters. Only letters and digits are allowed.
Default Value
N/A
cluster_id
Yes
String
Definition
Cluster ID. For details about how to obtain the cluster ID, see Obtaining a Cluster ID.
Constraints
N/A
Range
The value can contain 1 to 64 characters, including only letters, digits, underscores (_), and hyphens (-).
Default Value
N/A
Request Parameters
| Parameter | Mandatory | Type | Description |
|---|---|---|---|
| sql_type | Yes | String | Definition SQL type. Currently, only the SQL of the presto type is supported. Constraints
Range presto: A distributed SQL query engine Default Value N/A |
| sql_content | Yes | String | Definition SQL statement to be executed Currently, only a single SQL statement can be executed at a time, and the statement cannot contain a semicolon (;). Constraints N/A Range N/A Default Value N/A |
| database | No | String | Definition Database where the SQL statement is executed on. Constraints N/A Range N/A Default Value default |
| archive_path | No | String | Definition Directory for storing the dumped SQL execution results. Only the select statement dumps query results. Currently, the query results can be dumped only to OBS. Constraints N/A Range N/A Default Value N/A |
Response Parameters
Status code: 200
| Parameter | Type | Description |
|---|---|---|
| id | String | Definition Execution ID of the SQL statement. An ID is generated only when executing SELECT, SHOW, or DESC statements. The ID is empty for other operations. Range N/A |
| message | String | Definition Error message Range N/A |
| statement | String | Definition Ongoing SQL statement Range N/A |
| status | String | Definition SQL execution status Range
|
| result_location | String | Definition Path for archiving the final results of the SQL query statement Only the SELECT statement dumps the SQL execution results to result_location. Range N/A |
| content | Array<Array<String>> | Definition Execution result of the SQL statement. This parameter returns the execution result only for non-SELECT SQL statements. It is an empty array if no result is returned. The outer array represents the result rows, and the inner array of strings represents the field value details of each row. Range N/A |
Status code: 400
| Parameter | Type | Description |
|---|---|---|
| error_code | String | Definition Error code. Range 400: The operation failed. |
| error_msg | String | Definition Error message. Range 400: The operation failed. |
Example Request
Submit a Presto SQL statement.
POST https://{endpoint}/v2/{project_id}/clusters/{cluster_id}/sql-execution
{
"sql_type" : "presto",
"sql_content" : "show tables",
"database" : "default",
"archive_path" : "obs://my-bucket/path"
} Example Response
Status code: 200
The SQL statement is submitted successfully.
{
"id" : "20190909_011820_00151_xxxxx",
"statement" : "show tables",
"status" : "FINISHED",
"result_location" : " obs://my_bucket/uuid_date/xxxx.csv",
"content" : [ [ "t1", null ], [ null, "t2" ], [ null, "t3" ] ]
} Status code: 400
Failed to submit the SQL statement.
{
"error_code" : "MRS.0011",
"message": "Failed to submit SQL to the executor. The cluster ID is xxxx"
} SDK Sample Code
The SDK sample code is as follows.
Java
Submit a Presto SQL statement.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | package com.huaweicloud.sdk.test; import com.huaweicloud.sdk.core.auth.ICredential; import com.huaweicloud.sdk.core.auth.BasicCredentials; import com.huaweicloud.sdk.core.exception.ConnectionException; import com.huaweicloud.sdk.core.exception.RequestTimeoutException; import com.huaweicloud.sdk.core.exception.ServiceResponseException; import com.huaweicloud.sdk.mrs.v2.region.MrsRegion; import com.huaweicloud.sdk.mrs.v2.*; import com.huaweicloud.sdk.mrs.v2.model.*; public class ExecuteSqlSolution { public static void main(String[] args) { // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security. // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment String ak = System.getenv("CLOUD_SDK_AK"); String sk = System.getenv("CLOUD_SDK_SK"); String projectId = "{project_id}"; ICredential auth = new BasicCredentials() .withProjectId(projectId) .withAk(ak) .withSk(sk); MrsClient client = MrsClient.newBuilder() .withCredential(auth) .withRegion(MrsRegion.valueOf("<YOUR REGION>")) .build(); ExecuteSqlRequest request = new ExecuteSqlRequest(); request.withClusterId("{cluster_id}"); SqlExecutionReq body = new SqlExecutionReq(); body.withArchivePath("obs://my-bucket/path"); body.withDatabase("default"); body.withSqlContent("show tables"); body.withSqlType("presto"); request.withBody(body); try { ExecuteSqlResponse response = client.executeSql(request); System.out.println(response.toString()); } catch (ConnectionException e) { e.printStackTrace(); } catch (RequestTimeoutException e) { e.printStackTrace(); } catch (ServiceResponseException e) { e.printStackTrace(); System.out.println(e.getHttpStatusCode()); System.out.println(e.getRequestId()); System.out.println(e.getErrorCode()); System.out.println(e.getErrorMsg()); } } } |
Python
Submit a Presto SQL statement.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | # coding: utf-8 import os from huaweicloudsdkcore.auth.credentials import BasicCredentials from huaweicloudsdkmrs.v2.region.mrs_region import MrsRegion from huaweicloudsdkcore.exceptions import exceptions from huaweicloudsdkmrs.v2 import * if __name__ == "__main__": # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security. # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment ak = os.environ["CLOUD_SDK_AK"] sk = os.environ["CLOUD_SDK_SK"] projectId = "{project_id}" credentials = BasicCredentials(ak, sk, projectId) client = MrsClient.new_builder() \ .with_credentials(credentials) \ .with_region(MrsRegion.value_of("<YOUR REGION>")) \ .build() try: request = ExecuteSqlRequest() request.cluster_id = "{cluster_id}" request.body = SqlExecutionReq( archive_path="obs://my-bucket/path", database="default", sql_content="show tables", sql_type="presto" ) response = client.execute_sql(request) print(response) except exceptions.ClientRequestException as e: print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg) |
Go
Submit a Presto SQL statement.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | package main import ( "fmt" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic" mrs "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/mrs/v2" "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/mrs/v2/model" region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/mrs/v2/region" ) func main() { // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security. // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment ak := os.Getenv("CLOUD_SDK_AK") sk := os.Getenv("CLOUD_SDK_SK") projectId := "{project_id}" auth, err := basic.NewCredentialsBuilder(). WithAk(ak). WithSk(sk). WithProjectId(projectId). SafeBuild() if err != nil { fmt.Println(err) return } hcClient, err := mrs.MrsClientBuilder(). WithRegion(region.ValueOf("<YOUR REGION>")). WithCredential(auth). SafeBuild() if err != nil { fmt.Println(err) return } client := mrs.NewMrsClient(hcClient) request := &model.ExecuteSqlRequest{} request.ClusterId = "{cluster_id}" archivePathSqlExecutionReq:= "obs://my-bucket/path" databaseSqlExecutionReq:= "default" request.Body = &model.SqlExecutionReq{ ArchivePath: &archivePathSqlExecutionReq, Database: &databaseSqlExecutionReq, SqlContent: "show tables", SqlType: "presto", } response, err := client.ExecuteSql(request) if err == nil { fmt.Printf("%+v\n", response) } else { fmt.Println(err) } } |
More
For SDK sample code of more programming languages, see the Sample Code tab in API Explorer. SDK sample code can be automatically generated.
Status Codes
See Status Codes.
Error Codes
See Error Codes.
What is your overall rating for this page?
Thank you very much for your feedback. We will continue working to improve the documentation.See the reply and handling status in My Cloud VOC.
For any further questions, feel free to contact us through the chatbot.
Chatbot