Teradata Query Band

Aus BI-Snippets - Business Intelligence Code und Module
Wechseln zu: Navigation, Suche

Query Band ist eine Technik auf der Teradata, mit der man eine Query mit Key Value Attributen versehen kann. Auf diese Weise können Abfrage durch das RDBMS beispielsweise prioristiert werden. Neben diesem Einsatzszenario kann man Query Bands als Anwender auch dafür nutzen, die Effizienz der Abfragen nachträglich zu analysieren.

Query Band aktivieren

SET QUERY_BAND = 'key=value;key2=value2;key3=value3;' FOR SESSION|TRANSACTION;

Der String 'key=value;key2=value2;key3=value3;' enthält alle gewünschten "Key-Value" Tupel, die man auf der kommenden Abfrage definieren möchte. Die Keys dürfen lediglich nicht die Zeichen = ; und nul enthalten. Die Values dürfen nicht nul oder ; enthalten.

Query analysieren

Neben den Möglichkeiten des LoadBalancing kann man nun mit folgender Abfrage die Query pro Step untersuchen:

SELECT
     TB1.Queryid, 
     TB1.queryband,
     TB1.StartTime,
     TB1.FirstStepTime,
     TB1.delayTime,
     TB1.NumResultRows,
     TB1.NumSteps,
     TB1.ReqPhysIOKB/1024/1024       as IOUsage_GB,
     TB1.SpoolUsage/1024/1024/1024   as SpoolUsage_GB,
     TB1.MinAmpIO                    as MIN_AMP_IO_COUNT,
     TB1.MAxAmPIO                    as MAX_AMP_IO_COUNT,
     TB1.ParserCPUTime,
     TB1.AMPCPUTime,
     TB1.MinAmpCPUTime/60            as MIN_amp_cpu_minutes,
     TB1.MaxAmpCPUTime/60            as MAX_amp_cpu_minutes,
     TB1.SpoolUsage,
     TB1.ErrorCode, 
     TB1.ErrorText,
     substr(TB2.SqlTextInfo,1,1000) as sqlTextInfo
FROM
     DBC.DBQLOGTBL TB1
INNER JOIN
     DBC.DBQLSQLTBL TB2
     ON TB1.QueryID = TB2.QueryID
     AND TB1.ProcID = TB2.ProcID
WHERE 
     GetQueryBandValue(tb1.queryband,2,'key1') = 'value1'
     and GetQueryBandValue(tb1.queryband,2,'key2') = 'value2'
     and tb1.queryband is not null

Die Funktion "GetQueryBandValue" nimmt als Parameter das QueryBand aus den Log Tabellen und den Key, den man dazu erhalten möchte. Diese beispielhafte Abfrage gibt einem dann unterschiedliche Informationen über die Abfrage zurück, wie bspw. Laufzeiten, Verzögerungen und Spoolusage.

Query Band schließen

Möchte man das Query Band manuell zurücksetzen kann man dies mit folgendem Statement tun:

SET QUERY_BAND = '' FOR SESSION|TRANSACTION;