You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Trino SQL Server Connector调用system.execute存储过程报错求助

DBT + Trino SQL Server Connector 更新分区存储过程调用问题解决

问题场景

通过DBT结合Trino的SQL Server Connector,尝试执行语句更新全局分区,具体需求是调用存储过程执行ALTER PARTITION SCHEME PS_FunctionName NEXT USED [PRIMARY],但遇到三类错误:

  • 模型中用WITH子句嵌套CALL:Mismatched input CALL. Expecting: '<query>'
  • Starburst直接执行CALL:mismatched input "execute". Expecting '<identifer>'
  • 改用DBT call block:仍触发相同的execute匹配错误

错误根源

  1. WITH子句限制:WITH要求后续必须是查询语句,CALL属于执行类语句,无法嵌套,这是第一个错误的直接原因。
  2. 存储过程调用语法错误:Trino的SQL Server Connector不支持system.execute这种写法,混淆了Trino内部存储过程和SQL Server原生存储过程的调用方式,Starburst解析时会把system.execute当作Trino内部标识符,找不到匹配项,导致报错。

解决步骤

1. 修正跨连接器存储过程调用语法

SQL Server中执行动态DDL需用sp_executesql系统存储过程,Trino中调用SQL Server端的存储过程必须指定对应的catalog和schema,正确语句如下:

CALL your_sqlserver_catalog.dbo.sp_executesql('ALTER PARTITION SCHEME PS_FunctionName NEXT USED [PRIMARY]')

把your_sqlserver_catalog替换为你配置的SQL Server连接器对应的catalog名称。

2. 在DBT中正确执行无返回语句

DBT模型默认期望返回结果集,CALL语句无返回,需用run_query()宏或自定义操作执行:

方案一:自定义DBT操作(推荐独立执行场景)

创建macro文件(如macros/update_partition_scheme.sql):

{% macro update_partition_scheme() %}
    {% set sql %}
        CALL your_sqlserver_catalog.dbo.sp_executesql('ALTER PARTITION SCHEME PS_FunctionName NEXT USED [PRIMARY]')
    {% endset %}
    {% do run_query(sql) %}
{% endmacro %}

命令行执行:

dbt run-operation update_partition_scheme

方案二:模型内结合查询执行(适用于后续要加时间戳查询的场景)

直接在模型中先执行分区更新,再写查询逻辑:

{{ config(materialized='table') }}

-- 执行分区更新
{% set update_sql %}
    CALL your_sqlserver_catalog.dbo.sp_executesql('ALTER PARTITION SCHEME PS_FunctionName NEXT USED [PRIMARY]')
{% endset %}
{% do run_query(update_sql) %}

-- 后续的时间戳查询示例
SELECT * FROM your_target_table WHERE created_at >= CURRENT_TIMESTAMP - INTERVAL '7 days'

3. 先在Starburst验证语法

先在Starburst控制台执行修正后的CALL语句,确认能成功执行再移植到DBT,避免后续排查麻烦。

内容的提问来源于stack exchange,提问作者Kate Ottenwess

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 08:20:06