SnowConvert AI – Teradata – BTEQ¶
Übersetzungsreferenzen zur Konvertierung von Teradata-BTEQ-Dateien in Python
Basic Teradata Query (BTEQ) ist ein allgemeines, befehlsbasiertes Programm, das es Benutzern auf einer Workstation ermöglicht, mit einem oder mehreren Teradata-Datenbanksystemen zu kommunizieren und Berichte sowohl für die Druck- als auch für die Bildschirmausgabe zu formatieren.
To simulate the BTEQ functionality for Teradata in Snowflake, BTEQ files and commands are transformed to Python code, similar to the transformations performed for MultiLoad and FastLoad scripts. The generated code uses the Snowflake Python project called snowconvert.helpers which contains the required functions to simulate the BTEQ statements in Snowflake.
Übersetzung von BTEQ-Befehlen¶
Die folgende Tabelle zeigt die Konvertierung der BTEQ-Befehle in Snowflake.
Teradata |
Snowflake |
Anmerkungen |
|---|---|---|
ERRORCODE != 0 |
snowconvert.helpers.error_code != 0 |
|
.EXPORT DATA FILE=fileName |
Export.report(„fileName“, „,“) |
Die Funktion hat keine Funktionalität |
.EXPORT INDICDATA FILE=fileName |
Export.report(„fileName“, „,“) |
Die Funktion hat keine Funktionalität |
.EXPORT REPORT FILE=fileName |
Export.report(„fileName“, „,“) |
Die Funktion hat keine Funktionalität |
.EXPORT DIF FILE=fileName |
Export.report(„fileName“, „,“) |
Die Funktion hat keine Funktionalität |
.EXPORT RESET |
Export.reset() |
Die Funktion hat keine Funktionalität |
.IF ERRORCODE! = 0 THEN.QUIT ERRORCODE |
Wenn snowconvert.helpers.error_code != 0: snowconvert.helpers.quit_application (snowconvert.helpers.error_code) |
|
.IMPORT RESET |
snowconvert.helpers.import_reset() |
Die Funktion hat keine Funktionalität |
.LABEL newLabel |
def NEWLABEL(): |
|
.LOGOFF |
Die Anweisung ist kommentiert |
|
.LOGON |
Die Anweisung ist kommentiert |
|
.LOGMECH |
Die Anweisung ist kommentiert |
|
.OS /fs/fs01/bin/filename.sh ‚load‘ |
snowconvert.helpers.os(„“/fs/fs01/bin/filename.sh ‚load‘ „“) |
|
.RUN FILE=newFile |
for statement in snowconvert.helpers.readrun(„newFile“): eval(statement) |
|
.SET DEFAULTS |
Export.defaults() |
Die Funktion hat keine Funktionalität |
.SETERRORLEVEL 3807 SEVERITY 0 |
snowconvert.helpers.set_error_level(3807, 0) |
|
.SET RECORMODE OFF |
Export.record_mode(False) |
|
.SET RECORMODE ON |
Export.record_mode(True) |
|
.SETSEPARATOR ‚|‘ |
Export.separator_string(‚|‘) |
Die Funktion hat keine Funktionalität |
.SETWIDTH 120 |
Export.Breite(120) |
Die Funktion hat keine Funktionalität |
.Remark „“Hello world!“““ |
snowconvert.helpers.remark(r““““““Hello world!““““““) |
|
.QUIT ERRORCODE |
snowconvert.helpers.quit_application( snowconvert.helpers.error_code ) |
|
.QUIT |
snowconvert.helpers.quit_application() |
|
SQL-Anweisungen |
exec(statement) |
|
$(<$INPUT_SQL_FILE) |
exec_file(„$INPUT_SQL_FILE“) |
|
= (Repeat previous command) |
snowconvert.helpers.repeat_previous\_sql_statement(con) |
For more complicated statements presented in the previous table, subsections with detailed examples are provided below.
.GOTO-Konvertierung¶
Da wir BTEQ-Skripte nach Python konvertieren, werden bestimmte Strukturen, die in BTEQ gültig sind, in Python nicht unterstützt. Dies ist der Fall für den Befehl .GOTO unter Verwendung der Befehle . Label.
Aus diesem Grund wurde eine Alternative entwickelt, mit der die Funktionalität dieser Befehle emuliert werden kann, indem die Befehle . Label in Funktionen mit nachfolgenden Aufrufanweisungen umgewandelt werden.
Prüfen Sie den folgenden Code:
In dem obigen Beispiel gab es fünf Befehle. Zwei davon waren. Label-Befehle. Der BefehlFIRSTLABELwurde in eine Funktion mit den nachfolgenden Anweisungen umgewandelt, bis ein weiterer.LABEL-Befehl gefunden wird. Wenn ein anderes Label aufgerufen wird (in diesem Fall SECONDLABEL), beendet dieser Aufruf die erste Funktion und startet eine neue.
Wenn wir das vorherige Beispiel migrieren würden, würde das Ergebnis folgendermaßen lauten:
Beachten Sie den Aufruf der Funktion FIRSTLABEL. Diese Funktion enthält nur eine Anweisung, die die einzige Nicht-Label-Anweisung wäre, die im ursprünglichen Code auf FIRSTLABEL folgt. Bevor die FIRSTLABEL-Funktion endet, ruft sie SECONDLABEL mit den darauf folgenden Anweisungen auf.
Anmerkungen:
Erstellen einer Konnektorvariable
con = None, und Auffüllen in der Funktionmain():con = snowconvert.helpers.log_on().Einrichten eines Protokolls:
snowconvert.helpers.configure_log().
Abfrage ausführen (Anweisungen)¶
Every SQL statement found in a BTEQ file will be executed through theexecfunction provided by the snowconvert.helpers. Take for example the following code:
Dies wird umgerechnet in:
Skript-Dateien ausführen¶
Dateien, die die BTEQ-Befehle eines Benutzers und Teradata SQL Anweisungen enthalten, werden Skripte, Ausführungsdateien, Makros oder gespeicherte Prozeduren genannt. Erstellen Sie beispielsweise eine Datei mit dem Namen SAMPFILE, und geben Sie das folgende Skript BTEQ ein:
Um die Ausführungsdatei auszuführen, geben Sie eine der beiden Formen des Befehls BTEQ RUN ein:
Wenn Sie den zweiten Code umwandeln, erhalten Sie das folgende Ergebnis:
snowconvert.helpers.readrun("sampfile") gibt jede Zeile aus der SAMPFILE zurück und in derFOR-Anweisung wird jede der Zeilen an die eval-Funktion übergeben, eine Methode, die den ihr übergebenen Ausdruck parst und den Python-Ausdruck (die SAMPFILE sollte konvertiert werden, um zu funktionieren) innerhalb des Programms ausführt.
SQL-Dateien ausführen¶
In einigen Fällen kann während der Ausführung einer BTEQ-Datei eine SQL-Datei gefunden werden, z. B. die SQL-Datei mit dem Namen NEWSQL:
Dies kann während eines Skripts mit der folgenden Zeile ausgeführt werden:
Und nach der Konvertierung des Skripts lautet das Ergebnis:
Die Hilfsfunktion exec_file liest jede Zeile aus der Datei NEWSQL und verwendet dann die Funktion „exec“ wie im Abschnitt Abfrageanweisung ausführen beschrieben.
Bekannte Probleme ¶
Es wurden keine Probleme gefunden.
REPEAT¶
Übersetzungsspezifikation für die REPEAT-Anweisung.
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Wie in der Dokumentation von Teradata beschrieben, können Benutzer mit der REPEAT-Anweisung angeben, wie oft die nächste SQL-Anfrage maximal gestellt werden soll. Beachten Sie, dass es sich bei einer SQL-Anfrage um eine Einzel- oder Mehrfachanforderung handeln kann. Dies wird durch die Position der Semikolons für jede Anweisung nach der REPEAT-Anweisung definiert.
Syntax¶
Beispielhafte Quellcode-Muster¶
Mit diesen Eingabedaten:
inputData.dat¶
inputData2.dat¶
Teradata:¶
Abfrage¶
TESTTABU-Ergebnis¶
| C1 | C2 |
|---|---|
| A | X |
| D | X |
| G | X |
| B | Y |
| E | Y |
| H | Y |
| C | Z |
| F | Z |
| I | Z |
| ? | _ |
| ? | _ |
| ? | _ |
| * | null |
| [ | null |
TESTTABU2-Ergebnis¶
| MY_NAME | MY_AGE |
|---|---|
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| Bob Alice | 21 |
| Bob Alice | 21 |
| Bob Alice | 21 |
| Bob Alice | 21 |
| Bob Alice | 21 |
Snowflake:¶
Abfrage¶
TESTTABU-Ergebnis¶
| C1 | C2 |
|---|---|
| A | X |
| D | X |
| G | X |
| B | Y |
| E | Y |
| H | Y |
| C | Z |
| F | Z |
| I | Z |
| ? | _ |
| ? | _ |
| ? | _ |
| * | null |
| [ | null |
TESTTABU2-Ergebnis¶
| MY_NAME | MY_AGE |
|---|---|
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| Bob Alice | 21 |
| Bob Alice | 21 |
| Bob Alice | 21 |
| Bob Alice | 21 |
| Bob Alice | 21 |
Bekannte Probleme ¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs ¶
Keine zugehörigen EWIs.
USING REQUEST MODIFIER¶
Übersetzungsspezifikation für die USING REQUEST MODIFIER-Abfrage.
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Wie in der Teradata-Dokumentation beschrieben, definiert USING REQUEST MODIFIER einen oder mehrere variable Parameternamen, die in den nachfolgenden SELECT-, INSERT-, UPDATE- oder DELETE-Anweisungen zum Importieren oder Exportieren von Daten verwendet werden.
Die Syntax für diese Anweisung lautet wie folgt:
Wie in der Dokumentation von Teradata angegeben, muss USING REQUEST MODIFIER eine .IMPORT-Anweisung vorangestellt werden, damit die Daten in die definierten Parameter geladen werden.
Die Transformation für diese Anweisung folgt also diesen Schritten:
Rufen Sie die
import_file()-Funktion über die SnowConvert AI-Hilfsfunktionen auf. Dadurch werden die Daten in eine temporäre Datei geladen.Rufen Sie die
using()-Funktion über die SnowConvert AI-Hilfsfunktionen auf, um ein Wörterbuch mit den geladenen Daten zu erstellen.Führen Sie für jede Abfrage die
exec()-Funktion über die SnowConvert AI-Hilfsfunktionen auf und übergeben das zuvor definierte Wörterbuch. Dabei werden die Datenbindungsfunktionen des Python-Konnektors von Snowflake verwendet.
Mit diesen Eingabedaten:
Teradata (MultiLoad)
Abfrage¶
Ergebnis¶
| ROW | C1 | C2 |
|---|---|---|
| 1 | A | X |
| 2 | B | Y |
| 3 | C | Z |
Snowflake (Python)
Abfrage¶
Ergebnis¶
| ROW | C1 | C2 |
|---|---|---|
| 1 | A | X |
| 2 | B | Y |
| 3 | C | Z |
Bekannte Probleme¶
1. Der Befehl .REPEAT wird noch nicht unterstützt
Der Befehl .REPEAT wird noch nicht unterstützt. Das bedeutet, dass USING REQUEST MODIFIER nur die Daten verwendet, die aus der ersten Zeile der Eingabedatei geladen werden. Die Abfragen werden also nur einmal ausgeführt.
Dieses Problem sollte behoben werden, wenn der Befehl .REPEAT eine angemessene Unterstützung für die Transformation erhält.
Wenn Sie weitere Fragen zu dieser Dokumentation haben, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
Zugehörige EWIs ¶
Keine zugehörigen EWIs.