SnowConvert AI - Teradata - BTEQ¶
Références de traduction pour convertir des fichiers Teradata BTEQ en Python
Basic Teradata Query (BTEQ) est un programme général à base de commandes qui permet aux utilisateurs d’une station de travail de communiquer avec un ou plusieurs systèmes de bases de données Teradata et de formater des rapports pour une sortie sur papier ou à l’écran.
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.
Traduction des commandes BTEQ¶
La table suivante présente la conversion des commandes BTEQ vers Snowflake.
Teradata |
Snowflake |
Remarques |
|---|---|---|
ERRORCODE != 0 |
snowconvert.helpers.error_code != 0 |
|
.EXPORT DATA FILE=fileName |
Export.report(« fileName », « , ») |
La fonction n’a pas de fonctionnalité |
.EXPORT INDICDATA FILE=fileName |
Export.report(« fileName », « , ») |
La fonction n’a pas de fonctionnalité |
.EXPORT REPORT FILE=fileName |
Export.report(« fileName », « , ») |
La fonction n’a pas de fonctionnalité |
.EXPORT DIF FILE=fileName |
Export.report(« fileName », « , ») |
La fonction n’a pas de fonctionnalité |
.EXPORT RESET |
Export.reset() |
La fonction n’a pas de fonctionnalité |
.IF ERRORCODE != 0 THEN .QUIT ERRORCODE |
If snowconvert.helpers.error_code != 0: snowconvert.helpers.quit_application (snowconvert.helpers.error_code) |
|
.IMPORT RESET |
snowconvert.helpers.import_reset() |
La fonction n’a pas de fonctionnalité |
.LABEL newLabel |
def NEWLABEL(): |
|
.LOGOFF |
L’instruction est commentée |
|
.LOGON |
L’instruction est commentée |
|
.LOGMECH |
L’instruction est commentée |
|
.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() |
La fonction n’a pas de fonctionnalité |
.SET ERRORLEVEL 3807 SEVERITY 0 |
snowconvert.helpers.set_error_level(3807, 0) |
|
.SET RECORMODE OFF |
Export.record_mode(False) |
|
.SET RECORMODE ON |
Export.record_mode(True) |
|
.SET SEPARATOR “|” |
Export.separator_string(“|”) |
La fonction n’a pas de fonctionnalité |
.SET WIDTH 120 |
Export.width(120) |
La fonction n’a pas de fonctionnalité |
.Remark « « Hello world! » » » |
snowconvert.helpers.remark(r » » » » » »Hello world! » » » » » ») |
|
.QUIT ERRORCODE |
snowconvert.helpers.quit_application( snowconvert.helpers.error_code ) |
|
.QUIT |
snowconvert.helpers.quit_application() |
|
Instructions SQL |
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.
Conversion en valeur .GOTO¶
Étant donné que nous convertissons les scripts BTEQ en Python, certaines structures valables dans BTEQ ne sont pas intrinsèquement prises en charge dans Python. C’est le cas de la commande .GOTO utilisant les commandes . Label.
C’est pourquoi une alternative a été développée afin d’émuler la fonctionnalité de ces commandes, en transformant les commandes . Label en fonctions avec des instructions d’appel ultérieures.
Regardez le code suivant :
Dans l’exemple ci-dessus, il y avait cinq commandes. Deux d’entre elles étaient des commandes. Label. La commandeFIRSTLABELa été transformée en une fonction avec la ou les instructions qui la suivent ci-dessous jusqu’à ce qu’une autre commande.LABELsoit trouvée. Lorsqu’une autre étiquette est appelée (dans le cas présent, SECONDLABEL), cet appel met fin à la première fonction et en démarre une nouvelle.
Si nous devions migrer l’exemple précédent, le résultat serait le suivant :
Notez qu’il y a un appel à la fonctionFIRSTLABEL, cette fonction n’a qu’une seule instruction, qui serait la seule commande sans étiquette qui suitFIRSTLABELdans le code d’origine. Avant que la fonction FIRSTLABELse termine, elle appelle SECONDLABEL, avec les instructions qui la suivent.
Remarques
Création d’une variable connecteur
con = None, et alimentation de cette variable dans la fonctionmain():con = snowconvert.helpers.log_on().Définition d’un journal :
snowconvert.helpers.configure_log().
Exécution des instructions de requête¶
Every SQL statement found in a BTEQ file will be executed through theexecfunction provided by the snowconvert.helpers. Take for example the following code:
Il est converti en :
Exécution des fichiers de script¶
Les fichiers contenant les commandes BTEQ et les instructions Teradata SQL d’un utilisateur sont appelés scripts, fichiers d’exécution, macros ou procédures stockées. Par exemple, créez un fichier appelé SAMPFILE, et entrez le script BTEQ suivant :
Pour exécuter le fichier d’exécution, entrez l’une ou l’autre forme de la commande BTEQ RUN :
Si vous convertissez le deuxième code, le résultat est le suivant :
L’instruction snowconvert.helpers.readrun("sampfile") renverra chaque ligne de l’instruction SAMPFILE et dans l’instructionFOR, chacune des lignes sera transmise à la fonction eval, une fonction qui analyse l’expression qui lui est transmise et exécute l’expression Python (l’instruction SAMPFILE doit être convertie en travail) au sein du programme.
Exécuter les fichiers SQL¶
Dans certaines instances, lors de l’exécution d’un fichier BTEQ, un fichier SQL peut être trouvé, par exemple le fichier SQL appelé NEWSQL :
Ceci peut être exécuté au cours d’un script avec la ligne suivante :
Après la conversion du script, le résultat est le suivant :
La fonction d’assistance exec_file lira chaque ligne du fichier NEWSQL et utilisera ensuite la fonction exec comme expliqué dans la section Exécution des instructions de requête.
Problèmes connus ¶
Aucun problème n’a été constaté.
REPEAT¶
Spécification de traduction pour l’instruction REPEAT.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Selon la documentation Teradata, l’instruction REPEAT permet aux utilisateurs de spécifier le nombre maximum de fois que la prochaine requête SQL doit être soumise. Notez qu’une requête SQL peut être une requête à une ou plusieurs instructions. Ce mécanisme est défini par la position des points-virgules pour chaque instruction suivant l’instruction REPEAT.
Syntaxe¶
Modèles d’échantillons de sources¶
Avec ces données d’entrée :
inputData.dat¶
inputData2.dat¶
Teradata :¶
Requête¶
Résultat TESTTABU¶
| C1 | C2 |
|---|---|
| A | X |
| D | X |
| G | X |
| B | Y |
| E | Y |
| H | Y |
| C | Z |
| F | Z |
| I | Z |
| ? | _ |
| ? | _ |
| ? | _ |
| * | null |
| [ | null |
Résultat TESTTABU2¶
| 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 :¶
Requête¶
Résultat TESTTABU¶
| C1 | C2 |
|---|---|
| A | X |
| D | X |
| G | X |
| B | Y |
| E | Y |
| H | Y |
| C | Z |
| F | Z |
| I | Z |
| ? | _ |
| ? | _ |
| ? | _ |
| * | null |
| [ | null |
Résultat TESTTABU2¶
| 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 |
Problèmes connus ¶
Aucun problème n’a été constaté.
EWIs connexes ¶
Pas d’EWIs connexes.
USING REQUEST MODIFIER¶
Spécification de traduction pour la requête USING REQUEST MODIFIER.
Note
Certaines parties du code de sortie sont omises pour des raisons de clarté.
Conformément à la documentation Teradata, l’instruction USING REQUEST MODIFIER définit un ou plusieurs noms de paramètres variables à utiliser dans les instructions suivantes SELECT, INSERT, UPDATE ou DELETE pour importer ou exporter des données.
La syntaxe de cette instruction est la suivante :
Comme indiqué dans la documentation de Teradata, USING REQUEST MODIFIER doit être précédé d’une instruction .IMPORT pour charger les données dans les paramètres définis.
Ainsi, la transformation de cette instruction suit les étapes suivantes :
Appelez la fonction
import_file()des commandes d’assistance SnowConvert AI. Cette opération charge les données dans un fichier temporaire.Appelez la fonction `` des commandes d’assistance SnowConvert AI pour créer un dictionnaire avec les données chargées.
Pour chaque requête, exécutez la fonction
exec()des commandes d’assistance SnowConvert AI et transmettez le dictionnaire précédemment défini. Pour ce faire, les capacités de liaison de données du connecteur Python de Snowflake seront utilisées.
Avec ces données d’entrée :
Teradata (MultiLoad)
Requête¶
Résultat¶
| ROW | C1 | C2 |
|---|---|---|
| 1 | A | X |
| 2 | B | Y |
| 3 | C | Z |
Snowflake (Python)
Requête¶
Résultat¶
| ROW | C1 | C2 |
|---|---|---|
| 1 | A | X |
| 2 | B | Y |
| 3 | C | Z |
Problèmes connus¶
1. La commande .REPEAT n’est pas encore prise en charge
La commande .REPEAT n’est pas encore prise en charge. Cela signifie que USING REQUEST MODIFIER n’utilisera que les données chargées à partir de la première ligne du fichier d’entrée. Ainsi, les requêtes ne seront exécutées qu’une seule fois.
Ce problème devrait être corrigé lorsque la commande .REPEAT bénéficiera de la prise en charge adéquate des transformations.
Si vous avez d’autres questions concernant cette documentation, vous pouvez nous envoyer un e-mail à snowconvert-support@snowflake.com.
EWIs connexes ¶
Pas d’EWIs connexes.