SnowConvert AI - Teradata - Assistants des scripts SnowConvert AI¶
Les commandes d’aide de SnowConvert AI sont un ensemble de classes avec des fonctions conçues pour faciliter la conversion des fichiers de script Teradata en fichiers Python que Snowflake peut interpréter.
SnowConvert AI pour Teradata peut prendre du code SQL Terada ou des scripts (BTEQ, FastLoad, MultiLoad et TPump) et les convertir en code SQL, JavaScript Snowflake fonctionnellement équivalent intégré dans Snowflake SQL et Python. Tout code Python de sortie depuis SnowConvert AI appellera des fonctions de ces classes d’assistant pour effectuer la conversion et créer une sortie fonctionnellement équivalente dans Snowflake.
Snowflake Connector for Python sera également appelé afin de se connecter à votre compte Snowflake et d’exécuter le code Python de sortie créé par SnowConvert.
Les dernières informations sur la version du paquet sont disponibles ici.
Note
Le paquet Pythonsnowconvert-helpers prend en charge les versions 3.6, 3.7, 3.8 et 3.9 de Python.
Migration des scripts¶
Source¶
Supposons que vous ayez le code BTEQ suivant à migrer.
insert into table1 values(1, 2);
insert into table1 values(3, 4);
insert into table1 values(5, 6);
Sortie¶
Vous devriez obtenir une sortie comme celle ci-dessous.
Note
Les paramètres de la fonction log_on (« utilisateur », « mot de passe », « compte », « base de données », « entrepôt », « rôle », « jeton ») doivent être définis par l’utilisateur.
#*** Generated code is based on the SnowConvert AI Python Helpers version 2.0.6 ***
import os
import sys
import snowconvert.helpers
from snowconvert.helpers import Export
from snowconvert.helpers import exec
from snowconvert.helpers import BeginLoading
con = None
def main():
snowconvert.helpers.configure_log()
con = snowconvert.helpers.log_on()
exec("""
INSERT INTO table1
VALUES (1, 2)
""")
exec("""
INSERT INTO table1
VALUES (3, 4)
""")
exec("""
INSERT INTO table1
VALUES (5, 6)
""")
snowconvert.helpers.quit_application()
if __name__ == "__main__":
main()
Prise en main¶
Pour installer le paquet, vous devez exécuter la commande suivante dans votre environnement Python. Si vous n’êtes pas familiarisé avec l’installation de paquets dans Python, consultez la page suivante sur les paquets python (https://packaging.python.org/tutorials/installing-packages/).
pip install snowconvert-helpers
Une fois votre paquet installé, vous pourrez exécuter le code migré par script en Python.
Exécuter le code¶
Pour exécuter le code migré, il vous suffit d’ouvrir le Command Prompt ou le Terminal et d’exécuter la commande suivante.
python sample_BTEQ.py
Si le script ne contient pas d’erreurs, vous obtiendrez dans votre console une sortie comme celle ci-dessous.
Executing: INSERT INTO PUBLIC.table1 VALUES (1, 2).
Printing Result Set:
number of rows inserted
1
Executing: INSERT INTO PUBLIC.table1 VALUES (3, 4).
Printing Result Set:
number of rows inserted
1
Executing: INSERT INTO PUBLIC.table1 VALUES (5, 6).
Printing Result Set:
number of rows inserted
1
Error Code 0
Script done >>>>>>>>>>>>>>>>>>>>
Error Code 0
Transmission des paramètres de connexion¶
Il existe plusieurs façons de transmettre les paramètres de connexion à la connexion de la base de données :
En tant que paramètres dans l’appel de fonction snowconvert.helpers.log_on à l’intérieur du fichier Python.
En tant que paramètres positionnels avec l’ordre spécifique de l’utilisateur, du mot de passe, du compte, de la base de données, de l’entrepôt et du rôle lorsque le Python est exécuté à partir de la ligne de commande.
En tant que paramètres nommés sans restriction d’ordre de SNOW_USER, SNOW_PASSWORD, SNOW_ACCOUNT, SNOW_DATABASE, SNOW_WAREHOUSE, SNOW_ROLE, SNOW_QUERYTAG, SNOWAUTHENTICATOR et SNOWTOKEN lorsque le Python est exécuté à partir de la ligne de commande et que l’un d’entre eux est transmis comme –param-VARNAME=VALUE.
En tant que variables d’environnement nommées SNOW_USER, SNOW_PASSWORD, SNOW_ACCOUNT, SNOW_DATABASE, SNOW_WAREHOUSE, SNOW_ROLE, SNOW_QUERYTAG, SNOWAUTHENTICATOR et SNOWTOKEN avant l’exécution de Python.
L’ordre précédent spécifié permet de déterminer la priorité.
Paramètres dans l’appel de la fonction¶
Ils peuvent être définis en tant que paramètres de position dans l’appel de la fonction comme suit.
.....
con = snowconvert.helpers.log_on(
'myuser',
'mypassword',
'myaccount',
'mydatabase',
'mywarehouse',
'myrole',
5,
'myauthenticator',
'mytoken')
.....
Ou bien ils peuvent être définis avec n’importe lequel des paramètres nommés, dans n’importe quel ordre, dans l’appel de la fonction, comme suit.
.....
con = snowconvert.helpers.log_on(
account:'myaccount',
password:'mypassword',
user:'myuser',
warehouse:'mywarehouse',
login_timeout:5,
authenticator:'myauthenticator',
toke:'mytoken')
.....
Paramètres de position¶
Ils doivent être définis dans l’ordre spécifique de la ligne de commande, comme suit.
python sample_BTEQ.py myuser mypassword myaccount mydatabase mywarehouse myrole myauthenticator mytokenr
Il est également possible de ne définir que certains des paramètres, en commençant toujours par le paramètre utilisateur, comme suit.
python sample_BTEQ.py myuser mypassword myaccount
Paramètres nommés¶
L’ensemble des paramètres nommés peut être défini dans n’importe quel ordre dans la ligne de commande, comme suit (utilisez une seule ligne, les lignes multiples étant indiquées pour des raisons de lisibilité).
python sample_BTEQ.py --param-SNOW_WAREHOUSE=mywarehouse
--param-SNOW_ROLE=myrole
--param-SNOW_PASSWORD=mypassword
--param-SNOW_USER=myuser
--param-SNOW_QUERYTAG=mytag
--param-SNOW_ACCOUNT=myaccount
--param-SNOW_DATABASE=mydatabase
--param-SNOW_AUTHENTICATOR=myauthenticator
--param-SNOW_TOKEN=mytoken
--param-PRIVATE_KEY_PATH=myprivatekey
--param-PRIVATE_KEY_PASSWORD=myprivatekeypassword
Variables d’environnement¶
Avant d’appeler le script Python, l’une des variables d’environnement suivantes peut être définie :
SNOW_USER
SNOW_PASSWORD
SNOW_ACCOUNT
SNOW_DATABASE
SNOW_WAREHOUSE
SNOW_ROLE
SNOW_QUERYTAG
SNOW_AUTHENTICATOR
SNOW_TOKEN
PRIVATE_KEY_PATH
PRIVATE_KEY_PASSWORD
Authentification par paire de clés¶
La fonction log_on peut également prendre en charge le processus d’authentification par paire de clés. Consultez la documentation Snowflake suivante pour plus d’informations sur la création de clés. Veuillez noter les paramètres requis :#20;
log_on(
user='YOUR_USER',
account='YOUR_ACCOUNT',
role = 'YOUR_ROLE',
warehouse = 'YOUR_WAREHOUSE',
database = 'YOUR_DATABASE',
private_key_path='/YOUR_PATH/rsa_key.p8',
private_key_password='YOUR_PASSWORD')
Exemple de transmission de variables d’environnement¶
Voici un exemple d’utilisation de SNOW_AUTHENTICATOR, SNOW_USER et SNOW_PASSWORD. Ils doivent être définis avant d’exécuter le fichier Python de sortie, puis d’exécuter le fichier généré par Python.
Windows¶
SET SNOW_AUTHENTICATOR=VALUE
SET SNOW_USER=myuser
SET SNOW_PASSWORD=mypassword
python sample_BTEQ.py
Linux/Mac¶
export SNOW_AUTHENTICATOR=VALUE
export SNOW_USER=myuser
export SNOW_PASSWORD=mypassword
python3 sample_BTEQ.py
Activation de la journalisation¶
Pour activer la journalisation, vous devez activer une variable d’environnement appelée SNOW_LOGGING et lui donner la valeur true.
Ensuite, si vous souhaitez personnaliser la configuration de la journalisation, vous pouvez passer un paramètre à la méthode snowconvert.helpers.configure_log() comme ceci :
snowconvert.helpers.configure_log("SOMEPATH.conf")
Le fichier de configuration doit contenir la structure suivante. Pour plus d’informations sur la connexion en Python, cliquez ici
[loggers]
keys=root
[handlers]
keys=consoleHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler
[logger_simpleExample]
level=DEBUG
handlers=consoleHandler
qualname=simpleExample
propagate=0
[handler_consoleHandler]
class=FileHandler
level=DEBUG
formatter=simpleFormatter
args=('python2.log', 'w')
[formatter_simpleFormatter]
format=%(asctime)s -%(levelname)s - %(message)s
Snowflake¶
Une fois que le code migré a été exécuté, vous pouvez aller sur Snowflake et vérifier vos changements ou déploiements.
select * from PUBLIC.table1;
Vous pourrez voir les lignes que vous avez insérées dans l’exemple ci-dessus.

Documentation sur les assistants locaux¶
Tout d’abord, il est exigé d’installer le paquet Python nommé pydoc (Disponible depuis la version 2.0.2 de snowconvert-helpers).
pip install pydoc
Ensuite, pour afficher la documentation python du paquet snowconvert-helpers, vous devez aller dans un dossier où vous avez le code de sortie converti et où vous avez une sortie python.
D:\bteq\Output>dir
Volume in drive D is Storage
Volume Serial Number is 203C-168C
Directory of D:\bteq\Output
05/25/2021 03:55 PM <DIR> .
05/25/2021 03:55 PM <DIR> ..
05/25/2021 03:55 PM 630 input_BTEQ.py
1 File(s) 630 bytes
2 Dir(s) 1,510,686,502,912 bytes free
Dans ce répertoire, vous devez exécuter :
python -m pydoc -b
La console ouvrira votre navigateur préféré avec l’aide HTML de la documentation pour tous les paquets installés.
D:\bteq\Output>python -m pydoc -b
Server ready at http://localhost:61355/
Server commands: [b]rowser, [q]uit
server>
Cela ouvrira le navigateur avec la documentation de votre code, de la façon suivante :

Faites défiler la page jusqu’à la fin pour voir les paquets installés. Et vous verrez quelque chose de similaire à :

En cliquant sur dans le (package) SnowConvert AI, vous verrez quelque chose comme :

En cliquant sur les assistants de modules, vous obtiendrez un écran similaire à celui-ci :

Vous pouvez ensuite faire défiler les fonctions et les classes du module.

Problèmes connus ¶
Aucun problème n’a été constaté.
Documentation technique¶
Fonctions¶
Toutes les fonctions définies dans le projet.
access¶
Note
access(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True)
Description :¶
Utilisez le vrai uid/gid pour tester l’accès à un chemin.
_Les fonctions suivantes peuvent ne pas être mises en œuvre sur votre plateforme : dir_fd, effective_ids, et follow_symlinks. Si elles ne sont pas disponibles, leur utilisation provoquera un NotImplementedError.
Notez que la plupart des opérations utiliseront l’uid/gid effectif, cette routine peut donc être utilisée dans un environnement suid/sgid pour tester si l’utilisateur qui l’invoque a l’accès spécifié au chemin.
Paramètres :¶
path,Chemin à tester ; peut être une chaîne, des octets ou un objet de type cheminmode,Champ de bits du mode du système d’opération. Il peut s’agir de F_OK pour tester l’existence, ou de l’inclusion deOR de R_OK, W_OK et X_OKdir_fd,Si non défini sur None, il doit s’agir d’un descripteur de fichier ouvert sur un répertoire, et le chemin doit être relatif ; le chemin sera alors relatif à ce répertoireeffective_ids,Si True, l’accès utilisera l’uid/gid effectif au lieu de l’uid/gid réelfollow_symlinks,Si False, et que le dernier élément du chemin est un lien symbolique, l’accès examinera le lien symbolique lui-même au lieu du fichier vers lequel pointe le lien
at_exit_helpers¶
Note
at_exit_helpers()
Description :¶
S’exécute à la fin de l’exécution du script.
coloré¶
Note
colored(text, color='blue')
Description :¶
Imprime un texte coloré à partir de la couleur spécifiée.
Paramètres :¶
texte,Le texte à imprimercolor="blue",La couleur à imprimer
configure_log¶
Note
configure_log(configuration_path)
Description :¶
_Configure la journalisation qui sera effectuée pour toute exécution liée aux données sur la connexion Snowflake. Le fichier de journal est nommé par défaut « snowflake_python_connector.log ».
Paramètres :
configuration_path,Le chemin de configuration du fichier qui contient l’ensemble des paramètres souhaités pour la connexion
drop_transient_table¶
Note
drop_transient_table(tempTableName, con=None)
Description :¶
Supprime la table transitoire portant le nom spécifié.
Paramètres :
tempTableName,Le nom de la table temporairecon=None,La connexion à utiliser, si None est passé, la dernière connexion effectuée sera utilisée
exception à la règle¶
Note
exception_hook(exctype, value, tback)
Description :¶
Paramètres :
exctypevaleurtback
exec¶
Note
exec(sql_string, using=None, con=None)
Description :¶
Exécute une chaîne SQL en utilisant la dernière connexion, en utilisant éventuellement des arguments ou une connexion spécifique. Exemples :
_
exec("SELECT * FROM USER")__
exec("SELECT * FROM USER", con)__
exec("SELECT * FROM CUSTOMER WHERE CUSTOMERID= %S", customer)_
Paramètres :
sql_string,La définition de la chaîne sqlusing=None,Le paramètre optionnel qui peut être utilisé dans la requête sql transmisecon=None,La connexion à utiliser, si None est passé, la dernière connexion effectuée sera utilisée
exec_file¶
Note
exec_file(filename, con=None)
Description :¶
Lit le contenu d’un fichier et exécute les instructions sql contenues avec la connexion spécifiée.
Paramètres :
filename,Nom du fichier à lire et à exécutercon=None,La connexion à utiliser, si None est passé, la dernière connexion effectuée sera utilisée
exec_os¶
Note
exec_os(command)
Description :¶
Exécute une commande dans le système d’exploitation.
exec_sql_statement¶
Note
exec_sql_statement(sql_string, con, using=None)
Description :¶
Exécute une instruction SQL dans la connexion transmise, avec les arguments optionnels.
Paramètres :
sql_string,Le sql contenant la chaîne à exécutercon,La connexion à utiliserusing,Les paramètres optionnels à utiliser dans l’exécution sql
expands_using_params¶
Note
expands_using_params(statement, params)
Description :¶
Développe l’instruction transmise avec les paramètres.
Paramètres :
statement,Le sql contenant la chaîne à exécuterparams,Les paramètres de l’instruction sql
** expdvar**¶
Note
expandvar(str)
Description :¶
Développe la variable à partir de la chaîne passée.
Paramètres :
str,La chaîne à développer à l’aide des variables
expandvars¶
Note
expandvars(path, params, skip_escaped=False)
Description :¶
_Expansion des variables d’environnement de la forme $var et ${var}. Si le paramètre « skip_escaped » vaut True, toutes les références de variables échappées (c’est-à-dire précédées de barres obliques inverses) sont ignorées. Les variables inconnues sont définies sur « default ». Si « default » est None, ils sont laissés inchangés
Paramètres :
path,params,skip_escaped=False,
fast_load¶
Note
fast_load(target_schema, filepath, stagename, target_table_name, con=None)
Description :¶
Exécute le chargement rapide avec les paramètres transmis : target_schema, filepath, stagename et target_table_name.
Paramètres :
target_schema,Nom du schéma à utiliser pour le chargement rapidefilepath,Chemin du nom de fichier à charger dans la tabletarget_table_name,Nom de la table dont les données seront chargéescon=None,La connexion à utiliser, si None est passé, la dernière connexion effectuée sera utilisée
file_exists_and_readable¶
Note
file_exists_and_readable(filename)
Description :¶
Paramètres :
filename,
get_argkey¶
Note
get_argkey(astr)
Description :¶
Récupère la valeur de la clé de l’argument à partir de la chaîne transmise. Elle doit commencer par la chaîne « –param- »
Paramètres :
astr,Chaîne de l’argument à utiliser. La chaîne doit avoir une valeur similaire à –param-column=32 et la chaîne retournée sera 32
get_error_position¶
Note
get_error_position()
Description :¶
Récupère la position de l’erreur dans le fichier en utilisant les informations de la pile de l’erreur produite.
get_from_vars_or_args_or_environment¶
Note
get_from_vars_or_args_or_environment(arg_pos, variable_name, vars, args)
Description :¶
Récupère l’argument à la position spécifiée ou la valeur de la table vars ou le nom de la variable d’environnement passée.
Paramètres :
arg_pos,Position de l’argument à utiliser à partir du paramètre argumentsvariable_name,Nom de la variable à obtenirvars,Le hachage avec les noms et les valeurs des variablesargs,Le paramètre du tableau des arguments
importer_data_vers_temptable¶
Note
import_data_to_temptable(tempTableName, inputDataPlaceholder, con)
Description :¶
Importe les données dans une table temporaire à l’aide d’un espace réservé de données d’entrée.
Paramètres :
tempTableName,Nom de la table temporaire.inputDataPlaceholder,Le marqueur d’entrée utilisé qui est une zone de préparation de la base de données Snowflakecon,La connexion à utiliser
import_file¶
Note
import_file(filename, separator=' ')
Description :¶
Importe le nom de fichier passé avec le séparateur optionnel.
Paramètres :
filename,Le chemin du fichier à importerseparator=' ',Le séparateur optionnel
import_file_to_temptable¶
Note
import_file_to_temptable(filename, tempTableName, columnDefinition)
Description :¶
Importe le fichier passé dans une table temporaire. Il utilisera une zone de préparation publique nommée comme table temporaire avec le préfixe Stage_. À la fin du chargement de la table temporaire, il supprimera la zone de préparation utilisée dans le processus.
Paramètres :
filename,Le nom du fichier à liretempTableName,Le nom de la table temporairecolumnDefinition,La définition de tous les champs qui composeront la table temporaire
import_reset¶
Note
import_reset()
Description :¶
log¶
Note
log(*msg, level=20, writter=None)
Description :¶
Imprime un message sur la console (sortie standard) ou dans le fichier journal, selon que la fonction de connexion est activée ou non.
Paramètres :
*msg,Le message à imprimer ou à journaliserlevel=20,writter=None,
log_on¶
Note
log_on(user=None, password=None, account=None, database=None, warehouse=None, role=None, login_timeout=10, authenticator=None)
Description :¶
Se connecte à la base de données Snowflake avec les identifiants, la base de données, l’entrepôt, le rôle, login_timeout et l’authentificateur transmis comme paramètres.
Paramètres :
user,L’utilisateur de la base de donnéespasswordLe mot de passe de l’utilisateur de la base de donnéesdatabase,La base de données à connecterwarehouse,L’entrepôt de la base de données à connecterrole,Le rôle à connecterlogin_timeout,Le délai d’expiration maximum avant d’émettre une erreur si la connexion prend trop de tempsauthentificator,Valeur de l’authentificateur à utiliser comme SNOWFLAKE, EXTERNALBROWSER, SNOWFLAKE_JWT ou OAUTHtoken,Le jeton OAUTH ou JWT
os¶
Note
os(args)
Description :¶
Paramètres :
args,
print_table¶
Note
print_table(dictionary)
Description :¶
Imprime le dictionnaire sans exposer les valeurs de l’utilisateur et du mot de passe.
Paramètres :
dictionary,
quit_application¶
Note
quit_application(code=None)
Description :¶
Quitte l’application et renvoie éventuellement le code transmis.
Paramètres :
code=None,Le code à renvoyer après l’arrêt de l’application
read_params_args¶
Note
read_param_args(args)
Description :¶
Lit les arguments des paramètres à partir du tableau passé.
Paramètres :
args,Les arguments à utiliser
readrun¶
Note
readrun(line, skip=0)
Description :¶
Lit les lignes du nom de fichier donné et, éventuellement, saute certaines lignes au début du fichier.
Paramètres :
ligne,Nom du fichier à lireskip=0,Les lignes à sauter
remark¶
Note
remark(arg)
Description :¶
Imprime l’argument.
Paramètres :
arg,L’argument à imprimer
repeat_previous_sql_statement¶
Note
repeat_previous_sql_statement(con=None, n=1)
Description :¶
Répète la ou les instructions sql exécutées précédemment.
Paramètres :
con=None,Connexion si spécifiée. Si ce n’est pas le cas, la dernière connexion établie sera utiliséen=1,Le nombre d’instructions précédentes à exécuter à nouveau
set_default_error_level¶
Note
set_default_error_level(severity_value)
Description :¶
Paramètres :
severity_value,
set_error_level¶
Note
set_error_level(arg, severity_value)
Description :¶
Paramètres :
arg,severity_value,
simple_fast_load¶
Note
simple_fast_load(con, target_schema, filepath, stagename, target_table_name)
Description :¶
Exécute un simple chargement rapide dans la connexion et le paramètre transmis target_schema, chemin de fichier, nom de zone de préparation et le nom de la table cible.
Paramètres :
arg,La connexion à utilisertarget_schema,Nom du schéma à utiliser pour le chargement rapidefilepath,Chemin du nom de fichier à charger dans la tabletarget_table_name,Nom de la table dont les données seront chargées
stat¶
Note
stat(path, *, dir_fd=None, follow_symlinks=True)
Description :¶
Effectue un appel système stat sur le chemin donné. dir_fd et follow_symlinks peuvent ne pas être implémentés sur votre plateforme. S’ils ne sont pas disponibles, leur utilisation entraînera NotImplementedError. C’est une erreur d’utiliser dir_fd ou follow_symlinks lorsque le chemin est spécifié comme descripteur de fichier ouvert
Paramètres :
path,Chemin à examiner ; il peut s’agir d’une chaîne, d’octets, d’un objet semblable à un chemin ou de \ open-file-descriptor intdir_fd,Si non défini sur None, il doit s’agir d’un descripteur de fichier ouvert sur un répertoire, et le chemin doit être une chaîne relative ; le chemin sera alors relatif à ce répertoirefollow_symlinks,Si False, et que le dernier élément du chemin est un lien symbolique, stat examinera le lien symbolique lui-même au lieu du fichier vers lequel le lien pointe
system¶
Note
system(command)
Description :¶
Exécute la commande dans un sous-shell.
Paramètres :
_
command_,
using¶
Note
using(*argv)
Description :¶
Paramètres :
_
*argv_,
Classes¶
Toutes les classes définies dans le projet
Classe BeginLoading¶
Cette classe contient la fonction statique import_file_to_tab qui fournit un support pour BEGIN LOADING et les commandes associées dans FastLoad.
import_file_to_tab()¶
Paramètres :
target_schema_tablele schéma cible (facultatif) et le nom de la table
define_fileLe nom du fichier à lire
define_columnsLa définition de toutes les colonnes de la table temporaire
begin_loading_columnsLes noms des colonnes à insérer. Détermine l’ordre dans lequel les valeurs sont insérées
begin_loading_valuesLa liste des valeurs brutes d’insertion à convertir
field_delimiterLe délimiteur de champ
(facultatif)
skip_headerLe nombre de lignes à sauter
(facultatif)
input_data_place_holderL’emplacement du fichier dans un fournisseur de Cloud pris en charge. Paramètre d’ensemble lorsque le fichier n’est pas stocké localement
(facultatif)
conLa connexion à utiliser
Classe d’exportation¶
Méthodes statiques dans la classe
defaults()null(value=None)record_mode(value=None)report(file, separator=' ')reset()separator_string(value=None)separator_width(value=None)side_titles(value=None)title_dashes(value=None, withValue=None)title_dashes_with(value=None)width(value=None)
\ Données et autres attributs définis ici
expandedfilename = Noneseparator = ''\
Classe d’importation¶
Méthodes de la classe
reset()
Méthodes statiques dans la classe
file(file, separator=' ')using(globals, *argv)
Données et autres attributs définis dans la classe
expandedfilename = Noneno_more_rows = Falseread_obj = Nonereader = Noneseparator = ' '
Classe Parameters¶
Données et autres attributs définis dans la classe
passed_variables = {}