SnowConvert AI - Teradata - SnowConvert AI Scripts Helpers¶
SnowConvert AI Helpers é um conjunto de classes com funções projetados para facilitar a conversão de arquivos de script Teradata para arquivos Python que o Snowflake pode interpretar.
O SnowConvert AI para Teradata pode receber em quaisquer Teradata SQL ou (BTEQ, FastLoad, MultiLoade TPump) e convertê-los em Snowflake SQL funcionalmente equivalente, JavaScript incorporado no Snowflake SQL e Python. Qualquer código Python de saída do SnowConvert AI chamará funções dessas classes auxiliares para completar a conversão e criar uma saída funcionalmente equivalente no Snowflake.
O Snowflake Connector para Python também será chamado para se conectar à sua conta do Snowflake e executar o código Python de saída criado pelo SnowConvert.
As informações sobre a versão mais recente do pacote podem ser encontradas aqui.
Nota
O pacote Pythonsnowconvert-helpers é compatível com as versões 3.6, 3.7, 3.8 e 3.9 do Python.
Migração de scripts¶
Fonte¶
Suponha que você tenha o seguinte código BTEQ a ser migrado.
insert into table1 values(1, 2);
insert into table1 values(3, 4);
insert into table1 values(5, 6);
Saída¶
Você deve obter um resultado como o mostrado abaixo.
Nota
Os parâmetros da função log_on (“user”, “password”, “account”, “database”, “warehouse”, “role”, “token”) devem ser definidos pelo usuário.
#*** 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()
Introdução¶
Para instalar o pacote, você deve executar o seguinte comando em seu ambiente python. Se você não estiver familiarizado com a instalação de pacotes em Python, visite a seguinte página sobre pacotes python (https://packaging.python.org/tutorials/installing-packages/).
pip install snowconvert-helpers
Depois que o pacote estiver instalado, você poderá executar o código migrado do script no Python.
Execute o código¶
Para executar o código migrado, basta abrir o prompt de comando ou o terminal e executar o seguinte comando.
python sample_BTEQ.py
Se o script não tiver erros, você obterá no console uma saída como a que está abaixo.
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
Passagem de parâmetros de conexão¶
Há várias maneiras de passar os parâmetros de conexão para a conexão do banco de dados:
Como parâmetros na função, chame snowconvert.helpers.log_on dentro do arquivo python.
Como parâmetros posicionais com a ordem específica de usuário, senha, conta, banco de dados, warehouse e função quando o python estiver sendo executado a partir da linha de comando.
Como parâmetros nomeados sem restrição de ordem de SNOW_USER, SNOW_PASSWORD, SNOW_ACCOUNT, SNOW_DATABASE, SNOW_WAREHOUSE, SNOW_ROLE, SNOW_QUERYTAG, SNOWAUTHENTICATOR e SNOWTOKEN quando o python estiver sendo executado a partir da linha de comando e qualquer um deles for passado como –param-VARNAME=VALUE.
Como variáveis de ambiente denominadas SNOW_USER, SNOW_PASSWORD, SNOW_ACCOUNT, SNOW_DATABASE, SNOW_WAREHOUSE, SNOW_ROLE, SNOW_QUERYTAG, SNOWAUTHENTICATOR e SNOWTOKEN antes da execução do python.
A ordem anterior especificada é a maneira de determinar a precedência.
Parâmetros na chamada de função¶
Eles podem ser definidos como parâmetros posicionais na chamada de função da seguinte forma.
.....
con = snowconvert.helpers.log_on(
'myuser',
'mypassword',
'myaccount',
'mydatabase',
'mywarehouse',
'myrole',
5,
'myauthenticator',
'mytoken')
.....
Ou podem ser definidos quaisquer dos parâmetros nomeados em qualquer ordem na chamada de função, da seguinte forma.
.....
con = snowconvert.helpers.log_on(
account:'myaccount',
password:'mypassword',
user:'myuser',
warehouse:'mywarehouse',
login_timeout:5,
authenticator:'myauthenticator',
toke:'mytoken')
.....
Parâmetros posicionais¶
Eles precisam ser definidos na ordem específica na linha de comando, como segue.
python sample_BTEQ.py myuser mypassword myaccount mydatabase mywarehouse myrole myauthenticator mytokenr
Ou podem ser definidos apenas alguns dos parâmetros, mas sempre começando com o parâmetro do usuário, como segue.
python sample_BTEQ.py myuser mypassword myaccount
Parâmetros nomeados¶
Eles podem ser definidos com qualquer um dos parâmetros nomeados, em qualquer ordem, na linha de comando, da seguinte forma (use uma única linha, as linhas múltiplas são mostradas por motivos de legibilidade).
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
Variáveis de ambiente¶
Antes de chamar o script python, qualquer uma das seguintes variáveis de ambiente pode ser definida:
SNOW_USER
SNOW_PASSWORD
SNOW_ACCOUNT
SNOW_DATABASE
SNOW_WAREHOUSE
SNOW_ROLE
SNOW_QUERYTAG
SNOW_AUTHENTICATOR
SNOW_TOKEN
PRIVATE_KEY_PATH
PRIVATE_KEY_PASSWORD
Autenticação por par de chaves¶
A função log_on também pode oferecer suporte ao processo de autenticação do par de chaves. Revise a seguinte documentação do Snowflake para obter mais informações sobre a criação da chave . Observe os parâmetros obrigatórios:#x20;
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')
Exemplo de passagem de variáveis de ambiente¶
Aqui está um exemplo de uso de SNOW_AUTHENTICATOR, SNOW_USER e SNOW_PASSWORD. Eles devem ser definidos antes de executar o arquivo python de saída e, em seguida, executar o arquivo gerado pelo 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
Como ativar o registro em log¶
Para ativar logs, você deve ativar uma variável de ambiente chamada SNOW_LOGGING definida como true.
Em seguida, se quiser personalizar a configuração de registro, você pode passar um parâmetro para o método snowconvert.helpers.configure_log() desta forma:
snowconvert.helpers.configure_log("SOMEPATH.conf")
O arquivo de configuração deve conter a seguinte estrutura. Para obter mais informações sobre o registro em python, clique aqui
[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¶
Depois de executar qualquer código migrado, você pode acessar o Snowflake e verificar suas alterações ou implementações.
select * from PUBLIC.table1;
Você poderá ver as linhas que inseriu no exemplo acima.

Documentação auxiliares locais¶
Antes de tudo, é necessário instalar o pacote python chamado pydoc (disponível desde a versão 2.0.2 do snowconvert-helpers).
pip install pydoc
Em seguida, para exibir a documentação em python do pacote snowconvert-helpers, você deve ir para uma pasta em que tenha o código de saída convertido e uma saída em 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
Localizado nesse diretório, você precisa executar:
python -m pydoc -b
O console abrirá o navegador de sua preferência com a ajuda de HTML da documentação de todos os pacotes instalados.
D:\bteq\Output>python -m pydoc -b
Server ready at http://localhost:61355/
Server commands: [b]rowser, [q]uit
server>
Isso abrirá o navegador com a documentação do seu código, como:

Role até o final da página para ver os pacotes instalados. E você verá algo semelhante a:

Clique no SnowConvert AI(pacote), e você verá algo como:

Clicar nos auxiliares de módulo exibirá uma tela semelhante à seguinte:

Em seguida, você pode percorrer as funções e as classes do módulo.

Problemas conhecidos ¶
Não foram encontrados problemas.
Documentação técnica¶
Funções¶
Todas as funções definidas no projeto.
access¶
Nota
access(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True)
Descrição:¶
Use o uid/gid real para testar o acesso a um caminho.
dir_fd, effective_ids e follow_symlinks podem não estar implementados em sua plataforma. Se eles não estiverem disponíveis, o uso deles gerará um NotImplementedError.
Observe que a maioria das operações usará o uid/gid efetivo, portanto, essa rotina pode ser usada em um ambiente suid/sgid para testar se o usuário que está invocando tem o acesso especificado ao caminho.
Parâmetros:¶
path,Caminho a ser testado; pode ser uma cadeia de caracteres, bytes ou um objeto semelhante a um caminhomode,Campo de bits do modo do sistema operacional. Pode ser F_OK para testar a existência, ou o inclusive-OR de R_OK, W_OK e X_OKdir_fd,Se não for None, deve ser um descritor de arquivo aberto em um diretório, e o caminho deve ser relativo; o caminho será relativo a esse diretórioeffective_ids,Se True, o acesso usará o uid/gid efetivo em vez do uid/gid realfollow_symlinks,Se False e o último elemento do caminho for um link simbólico, access examinará o próprio link simbólico em vez do arquivo para o qual o link aponta
at_exit_helpers¶
Nota
at_exit_helpers()
Descrição:¶
Executado na saída da execução do script.
colored¶
Nota
colored(text, color='blue')
Descrição:¶
Imprime texto colorido a partir da cor especificada.
Parâmetros:¶
text,O texto a ser impressocolor="blue",A cor a ser impressa
configure_log¶
Nota
configure_log(configuration_path)
Descrição:¶
Configura o registro em log que será realizado para qualquer execução relacionada a dados na conexão Snowflake. O arquivo de log é nomeado como “snowflake_python_connector.log” por padrão.
Parâmetros:
configuration_path,O caminho de configuração do arquivo que contém todas as configurações desejadas para o registro
drop_transient\_table¶
Nota
drop_transient_table(tempTableName, con=None)
Descrição:¶
Insere a tabela transitória com o nome especificado.
Parâmetros:
tempTableName,O nome da tabela temporáriacon=None,A conexão a ser usada; se None for passado, será usada a última conexão realizada
exception_hook¶
Nota
exception_hook(exctype, value, tback)
Descrição:¶
Parâmetros:
exctypevaluetback
exec¶
Nota
exec(sql_string, using=None, con=None)
Descrição:¶
Executa uma cadeia de caracteres sql usando a última conexão; opcionalmente, usa argumentos ou uma conexão específica. Exemplos:
_
exec("SELECT * FROM USER")__
exec("SELECT * FROM USER", con)__
exec("SELECT * FROM CUSTOMER WHERE CUSTOMERID= %S", customer)_
Parâmetros:
sql_string,A definição do sqlusing=None,O parâmetro opcional que pode ser usado no sql passadocon=None,A conexão a ser usada; se None for passado, será usada a última conexão realizada
exec_file¶
Nota
exec_file(filename, con=None)
Descrição:¶
Lê o conteúdo de um arquivo e executa as instruções sql contidas com a conexão especificada.
Parâmetros:
filename,O nome do arquivo a ser lido e executadocon=None,A conexão a ser usada; se None for passado, será usada a última conexão realizada
exec_os¶
Nota
exec_os(command)
Descrição:¶
Executa um comando no sistema operacional.
exec_sql\_statement¶
Nota
exec_sql_statement(sql_string, con, using=None)
Descrição:¶
Executa uma instrução sql na conexão passada, com os argumentos opcionais.
Parâmetros:
sql_string,O sql que contém a cadeia de caracteres a ser executadacon,A conexão a ser usadausing,Os parâmetros opcionais a serem usados na execução do sql
expands_using_params¶
Nota
expands_using_params(statement, params)
Descrição:¶
Expande a instrução passada com os parâmetros.
Parâmetros:
statement,O sql que contém a cadeia de caracteres a ser executadaparams,Os parâmetros da instrução sql
expandvar¶
Nota
expandvar(str)
Descrição:¶
Expande a variável a partir da cadeia de caracteres passada.
Parâmetros:
str,A cadeia de caracteres a ser expandida com as variáveis
expandvars¶
Nota
expandvars(path, params, skip_escaped=False)
Descrição:¶
Expanda as variáveis de ambiente do formato $var e ${var}. Se o parâmetro “skip_escaped” for True, todas as referências de variáveis com escape (ou seja, precedidas por barras invertidas) serão ignoradas. As variáveis desconhecidas são definidas como «padrão». Se “default” for None, eles não serão alterados.
Parâmetros:
path,params,skip_escaped=False,
fast_load¶
Nota
fast_load(target_schema, filepath, stagename, target_table_name, con=None)
Descrição:¶
Executa o carregamento rápido com os parâmetros passados target_schema, filepath, stagename e target_table_name.
Parâmetros:
target_schema,O nome do esquema a ser usado no carregamento rápidofilepath,O caminho do nome do arquivo a ser carregado na tabelatarget_table_name,O nome da tabela que terá os dados carregadoscon=None,A conexão a ser usada; se None for passado, será usada a última conexão realizada
file_exists_and_readable¶
Nota
file_exists_and_readable(filename)
Descrição:¶
Parâmetros:
filename,
get_argkey¶
Nota
get_argkey(astr)
Descrição:¶
Obtém o valor da chave do argumento a partir da cadeia de caracteres passada. Ele deve começar com a cadeia de caracteres “–param-”
Parâmetros:
astr,A cadeia de caracteres de argumento a ser usada. A cadeia de caracteres deve ter um valor semelhante a –param-column=32 e a cadeia retornada será “32
get_error_position¶
Nota
get_error_position()
Descrição:¶
Obtém a posição do erro do arquivo usando as informações da pilha do erro produzido.
get_from_vars_or_args_or_environment¶
Nota
get_from_vars_or_args_or_environment(arg_pos, variable_name, vars, args)
Descrição:¶
Obtém o argumento da posição especificada ou obtém o valor da tabela vars ou obtém o nome da variável de ambiente passada.
Parâmetros:
arg_pos,A posição do argumento a ser usada a partir do parâmetro argumentsvariable_name,O nome da variável a ser obtidavars,O hash com os nomes e valores das variáveisargs,O parâmetro da matriz de argumentos
import_data_to_temptable¶
Nota
import_data_to_temptable(tempTableName, inputDataPlaceholder, con)
Descrição:¶
Importa dados para uma tabela temporária usando um espaço reservado de dados de entrada.
Parâmetros:
tempTableName,O nome da tabela temporária.inputDataPlaceholder,O espaço reservado de entrada usado que é um estágio no banco de dados snowflakecon,A conexão a ser usada
import_file¶
Nota
import_file(filename, separator=' ')
Descrição:¶
Importa o nome de arquivo passado com o separador opcional.
Parâmetros:
filename,O caminho do nome do arquivo a ser importadoseparator=' ',O separador opcional
import_file_to_temptable¶
Nota
import_file_to_temptable(filename, tempTableName, columnDefinition)
Descrição:¶
Importa o arquivo passado para uma tabela temporária. Ele usará um estágio público nomeado como tabela temporária com o prefixo Stage_. Ao final do carregamento para a tabela temporária, ele excluirá o estágio que foi usado no processo.
Parâmetros:
filename,O nome do arquivo a ser lidotempTableName,O nome da tabela temporáriacolumnDefinition,A definição de todos os campos que terão a tabela temporária
import_reset¶
Nota
import_reset()
Descrição:¶
log¶
Nota
log(*msg, level=20, writter=None)
Descrição:¶
Imprime uma mensagem no console (saída padrão) ou no arquivo de registro, dependendo se o registro estiver ativado
Parâmetros:
*msg,A mensagem a ser impressa ou registradalevel=20,writter=None,
log_on¶
Nota
log_on(user=None, password=None, account=None, database=None, warehouse=None, role=None, login_timeout=10, authenticator=None)
Descrição:¶
Faz logon no banco de dados do snowflake com os parâmetros passados de credenciais, banco de dados, warehouse, função, login_timeout e autenticador.
Parâmetros:
user,O usuário do banco de dadospasswordA senha do usuário do banco de dadosdatabase,O banco de dados a ser conectadowarehouse,O warehouse do banco de dados a ser conectadorole,A função a ser conectadalogin_timeout,O tempo limite máximo antes de emitir um erro se a conexão estiver demorando muito para se conectarauthenticator,O valor suportado do autenticador a ser usado, como SNOWFLAKE, EXTERNALBROWSER, SNOWFLAKE_JWT ou OAUTHtoken,O token OAUTH ou JWT
os¶
Nota
os(args)
Descrição:¶
Parâmetros:
args,
print_table¶
Nota
print_table(dictionary)
Descrição:¶
Imprime o dicionário sem expor os valores de usuário e senha.
Parâmetros:
dictionary,
quit_application¶
Nota
quit_application(code=None)
Descrição:¶
Encerra o aplicativo e, opcionalmente, retorna o código passado.
Parâmetros:
code=None,O código a ser retornado após o encerramento
read_params_args¶
Nota
read_param_args(args)
Descrição:¶
Lê os argumentos dos parâmetros da matriz passada.
Parâmetros:
args,Os argumentos a serem usados
readrun¶
Nota
readrun(line, skip=0)
Descrição:¶
Lê as linhas do nome de arquivo fornecido e, opcionalmente, pula algumas linhas no início do arquivo.
Parâmetros:
line,O nome do arquivo a ser lidoskip=0,As linhas a serem puladas
remark¶
Nota
remark(arg)
Descrição:¶
Imprime o argumento.
Parâmetros:
arg,O argumento a ser impresso
repeat_previous_sql_statement¶
Nota
repeat_previous_sql_statement(con=None, n=1)
Descrição:¶
Repete a(s) instrução(ões) sql executada(s) anteriormente.
Parâmetros:
con=None,Conexão se especificada. Se isso não for passado, será usada a última conexão realizadan=1,O número de instruções anteriores a serem executadas novamente
set_default_error_level¶
Nota
set_default_error_level(severity_value)
Descrição:¶
Parâmetros:
severity_value,
set_error_level¶
Nota
set_error_level(arg, severity_value)
Descrição:¶
Parâmetros:
arg,severity_value,
simple_fast_load¶
Nota
simple_fast_load(con, target_schema, filepath, stagename, target_table_name)
Descrição:¶
Executa um carregamento rápido simples na conexão e o parâmetro passado target_schema, filepath, stagename e nome da tabela de destino.
Parâmetros:
arg,A conexão a ser usadatarget_schema,O nome do esquema a ser usado no carregamento rápidofilepath,O caminho do nome do arquivo a ser carregado na tabelatarget_table_name,O nome da tabela que terá os dados carregados
stat¶
Nota
stat(path, *, dir_fd=None, follow_symlinks=True)
Descrição:¶
Execute uma chamada de sistema stat no caminho fornecido. dir_fd e follow_symlinks podem não estar implementados em sua plataforma. Se eles não estiverem disponíveis, o uso deles gerará um NotImplementedError. É um erro usar dir_fd ou follow_symlinks ao especificar o caminho como um descritor de arquivo aberto
Parâmetros:
path,Caminho a ser examinado; pode ser uma cadeia de caracteres, bytes, um objeto semelhante a um caminho ou\ open-file-descriptor intdir_fd,Se não for None, deve ser um descritor de arquivo aberto em um diretório, e o caminho deve ser uma cadeia de caracteres relativa; o caminho será então relativo a esse diretóriofollow_symlinks,Se for False e o último elemento do caminho for um link simbólico, stat examinará o próprio link simbólico em vez do arquivo para o qual o link aponta
system¶
Nota
system(command)
Descrição:¶
Execute o comando em um subshell.
Parâmetros:
_
command_,
using¶
Nota
using(*argv)
Descrição:¶
Parâmetros:
_
*argv_,
Classes¶
Todas as classes definidas no projeto
Classe BeginLoading¶
Essa classe contém a função estática import_file_to_tab que oferece suporte para os comandos BEGIN LOADING e comandos associados em FastLoad.
import_file_to_tab()¶
Parâmetros:
target_schema_tableo esquema de destino (opcional) e o nome da tabela
define_fileO nome do arquivo a ser lido
define_columnsA definição de todas as colunas da tabela temporária
begin_loading_columnsOs nomes das colunas a serem inseridas. Determina a ordem em que os valores são inseridos
begin_loading_valuesA lista de valores de inserção brutos a serem convertidos
field_delimiterO delimitador de campo
(opcional)
skip_headerO número de linhas a serem ignoradas
(opcional)
input_data_place_holderA localização do arquivo em um provedor de nuvem compatível. Defina o parâmetro quando o arquivo não estiver armazenado localmente
(opcional)
conA conexão a ser usada
Classe de exportação¶
Métodos estáticos na 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)
\ Dados e outros atributos definidos aqui
expandedfilename = Noneseparator = ''\
Classe de importação¶
Métodos na classe
reset()
Métodos estáticos na classe
file(file, separator=' ')using(globals, *argv)
Dados e outros atributos definidos na classe
expandedfilename = Noneno_more_rows = Falseread_obj = Nonereader = Noneseparator = ' '
Classe Parameters¶
Dados e outros atributos definidos na classe
passed_variables = {}