簡體   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