Help Center/ MapReduce Service/ API Reference/ API V2/ SQL APIs/ Submitting a SQL Statement - ExecuteSql
Updated on 2026-09-15 GMT+08:00

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.

    Action

    Access Level

    Resource Type (*: required)

    Condition Key

    Alias

    Dependency

    mrs:cluster:createSql

    Write

    cluster *

    • g:ResourceTag/<tag-key>

    • g:EnterpriseProjectId

    • mrs:sql:execute
    • mrs:job:checkSql

    -

URI

  • Format

    POST /v2/{project_id}/clusters/{cluster_id}/sql-execution

  • 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

Table 2 Request parameters

Parameter

Mandatory

Type

Description

sql_type

Yes

String

Definition

SQL type. Currently, only the SQL of the presto type is supported.

Constraints

  • The SQL of the presto type can be submitted and executed only in clusters containing the Presto component.
  • This parameter is available only for MRS 2.0.6.1, 2.1.0.7, 3.1.2, or later clusters.

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

Table 3 Response parameters

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

  • QUEUED: queuing
  • WAITING_FOR_RESOURCES: waiting for resources
  • PLANNING: being planning
  • STARTING: being started
  • RUNNING: running
  • FINISHING: to be completed
  • FINISHED: completed
  • FAILED: execution failed

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

Table 4 Response body parameters

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.