SQL FME 中的服务器执行计划
SQL Server execution plan in FME
我想使用 FME 来处理来自 SQL 服务器的执行计划(我试图为查询中使用的每个字段获取一个 table 行)。
SET SHOWPLAN_XML ON
函数必须在其自己的批处理中 运行。对我们来说,正常的方法是 GO
运算符,然而这不是 T-SQL 的一部分,但通常由 sqlcmd 和 osql 实用程序解释,因此 FME SQL 解释器不明白它。我在一个 SQLExecutor 转换中尝试了 运行ning '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
我想使用 FME 来处理来自 SQL 服务器的执行计划(我试图为查询中使用的每个字段获取一个 table 行)。
SET SHOWPLAN_XML ON
函数必须在其自己的批处理中 运行。对我们来说,正常的方法是 GO
运算符,然而这不是 T-SQL 的一部分,但通常由 sqlcmd 和 osql 实用程序解释,因此 FME SQL 解释器不明白它。我在一个 SQLExecutor 转换中尝试了 运行ning '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