繁体   English   中英

SQL FME 中的服务器执行计划

[英]SQL Server execution plan in FME

我想使用 FME 来处理来自 SQL 服务器的执行计划(我试图为查询中使用的每个字段获取一个包含一行的表)。

function 上的SET SHOWPLAN_XML ON必须在它自己的批次中运行。 对我们来说,正常的方法是GO运算符,但这不是 T-SQL 的一部分,但通常由 sqlcmd 和 osql 实用程序解释,因此 FME SQL 解释器不理解它。 我尝试在一个 SQLExecutor 转换中运行“SET SHOWPLAN_XML ON”,然后在下一个 SQLExecutor 中运行查询,但每个转换似乎都创建了自己的连接,这意味着 Showplan 设置不会从一个转换器持续到下一个转换器。

有一个脑波并设法使用 python 变压器使用pyodbc运行它。 这可以在它们自己的批处理中执行查询,同时保持单个连接。 我的 Python Caller tramsformer 是这样的:

import fmeobjects
import pyodbc

class FeatureCreator(object):
    def __init__(self):
        pass
        
    def input(self,feature):
        newFeature = fmeobjects.FMEFeature()
        
        connectionStr = f"DRIVER={{SQL Server}};SERVER={FME_MacroValues['Server']};Trusted_Connection=yes;"
        if FME_MacroValues['Database'] != '':
            connectionStr += f"DATABASE={FME_MacroValues['Database']};"
        connection = pyodbc.connect(connectionStr)
        cursor = connection.cursor()

        cursor.execute("SET SHOWPLAN_XML ON;")
        cursor.commit()
        cursor.execute(feature.getAttribute('query'))
        
        results = cursor.fetchall()[0][0]
        newFeature.setAttribute("showplan", results)
        
        self.pyoutput(newFeature)
        
    def close(self):
        pass



暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM