Skip to main content
Glama
aliyun

Hologres MCP Server

Official
by aliyun

execute_hg_select_sql

Query data from Hologres databases using SELECT SQL statements to retrieve specific information for analysis and decision-making.

Instructions

Execute SELECT SQL to query data from Hologres database.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYesThe (SELECT) SQL query to execute in Hologres database.

Implementation Reference

  • Core handler function that executes the SQL query for the execute_hg_select_sql tool (and others). Connects to Hologres database, executes the query, formats SELECT results as CSV-like text with columns and rows.
    def handle_call_tool(tool_name, query, serverless = False):
        """Handle callTool method."""
        config = get_db_config()
        try:
            with connect_with_retry() as conn:
                with conn.cursor() as cursor:
    
                    # 特殊处理 serverless computing 查询
                    if serverless:
                        cursor.execute("set hg_computing_resource='serverless'")
                    
                    # Execute the query
                    cursor.execute(query)
                    
                    # 特殊处理 ANALYZE 命令
                    if tool_name == "gather_hg_table_statistics":
                        return f"Successfully {query}"
                    
                    # 处理其他有返回结果的查询
                    if cursor.description:  # SELECT query
                        columns = [desc[0] for desc in cursor.description]
                        rows = cursor.fetchall()
                        result = [",".join(map(str, row)) for row in rows]
                        return "\n".join([",".join(columns)] + result)
                    elif tool_name == "execute_dml_sql":  # Non-SELECT query
                        row_count = cursor.rowcount
                        return f"Query executed successfully. {row_count} rows affected."
                    else:
                        return "Query executed successfully"
        except Exception as e:
            return f"Error executing query: {str(e)}"
  • Registration of the execute_hg_select_sql tool in the MCP server's list_tools() function, including name, description, and input schema.
    Tool(
        name="execute_hg_select_sql",
        description="Execute SELECT SQL to query data from Hologres database.",
        inputSchema={
            "type": "object",
            "properties": {
                "query": {
                    "type": "string",
                    "description": "The (SELECT) SQL query to execute in Hologres database."
                }
            },
            "required": ["query"]
        }
    ),
  • Specific dispatching and input validation logic for the execute_hg_select_sql tool within the call_tool handler, ensuring it's a SELECT query before passing to execution utility.
    if name == "execute_hg_select_sql":
        query = arguments.get("query")
        if not query:
            raise ValueError("Query is required")
        if not re.match(r"^\s*WITH\s+.*?SELECT\b", query, re.IGNORECASE) and not re.match(r"^\s*SELECT\b", query, re.IGNORECASE):
            raise ValueError("Query must be a SELECT statement or start with WITH followed by a SELECT statement")
  • Helper function used by the handler to establish a reliable database connection to Hologres with retries.
    def connect_with_retry(retries=3):
        attempt = 0
        err_msg = ""
        while attempt <= retries:
            try:
                config = get_db_config()
                conn = psycopg.connect(**config)
                conn.autocommit = True
                with conn.cursor() as cursor:
                    cursor.execute("SELECT 1;")
                    cursor.fetchone()
                return conn
            except psycopg.Error as e:
                err_msg = f"Connection failed: {e}"
                attempt += 1
                if attempt <= retries:
                    print(f"Retrying connection (attempt {attempt + 1} of {retries + 1})...")
                    time.sleep(5)  # 等待 2 秒后再次尝试连接
        raise psycopg.Error(f"Failed to connect to Hologres database after retrying: {err_msg}")

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/aliyun/alibabacloud-hologres-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server