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);
Copy

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()
Copy

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
Copy

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
Copy

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
Copy

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')
   .....
Copy

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')
   .....
Copy

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
Copy

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
Copy

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

Copy

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
Copy
Linux/Mac
 export SNOW_AUTHENTICATOR=VALUE
export SNOW_USER=myuser
export SNOW_PASSWORD=mypassword
python3 sample_BTEQ.py
Copy

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")
Copy

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
Copy

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;
Copy

Você poderá ver as linhas que inseriu no exemplo acima.

Resultado da consulta

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
Copy

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

Copy

Localizado nesse diretório, você precisa executar:

 python -m pydoc -b
Copy

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>

Copy

Isso abrirá o navegador com a documentação do seu código, como:

Página inicial da documentação local gerada

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

Índice da documentação dos pacotes locais instalados

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

Página inicial da documentação do snowconvert-helpers

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

Página inicial do módulo de auxiliares

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

Documentação de funções

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 caminho

  • mode, 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_OK

  • dir_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ório

  • effective_ids, Se True, o acesso usará o uid/gid efetivo em vez do uid/gid real

  • follow_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 impresso

  • color="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ária

  • con=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:

  • exctype

  • value

  • tback

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 sql

  • using=None , O parâmetro opcional que pode ser usado no sql passado

  • con=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 executado

  • con=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 executada

  • con , A conexão a ser usada

  • using , 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 executada

  • params , 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ápido

  • filepath , O caminho do nome do arquivo a ser carregado na tabela

  • target_table_name , O nome da tabela que terá os dados carregados

  • con=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 arguments

  • variable_name , O nome da variável a ser obtida

  • vars , O hash com os nomes e valores das variáveis

  • args , 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 snowflake

  • con, 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 importado

  • separator=' ', 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 lido

  • tempTableName, O nome da tabela temporária

  • columnDefinition, 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 registrada

  • level=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 dados

  • password A senha do usuário do banco de dados

  • database, O banco de dados a ser conectado

  • warehouse, O warehouse do banco de dados a ser conectado

  • role, A função a ser conectada

  • login_timeout, O tempo limite máximo antes de emitir um erro se a conexão estiver demorando muito para se conectar

  • authenticator, O valor suportado do autenticador a ser usado, como SNOWFLAKE, EXTERNALBROWSER, SNOWFLAKE_JWT ou OAUTH

  • token, O token OAUTH ou JWT

os

Nota

os(args)

Descrição:

Parâmetros:

  • args,

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 lido

  • skip=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 realizada

  • n=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 usada

  • target_schema, O nome do esquema a ser usado no carregamento rápido

  • filepath, O caminho do nome do arquivo a ser carregado na tabela

  • target_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 int

  • dir_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ório

  • follow_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:

  1. target_schema_table

    • o esquema de destino (opcional) e o nome da tabela

  2. define_file

    • O nome do arquivo a ser lido

  3. define_columns

    • A definição de todas as colunas da tabela temporária

  4. begin_loading_columns

    • Os nomes das colunas a serem inseridas. Determina a ordem em que os valores são inseridos

  5. begin_loading_values

    • A lista de valores de inserção brutos a serem convertidos

  6. field_delimiter

    • O delimitador de campo

  7. (opcional) skip_header

    • O número de linhas a serem ignoradas

  8. (opcional) input_data_place_holder

    • A localização do arquivo em um provedor de nuvem compatível. Defina o parâmetro quando o arquivo não estiver armazenado localmente

  9. (opcional) con

    • A 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 = None

  • separator = '' \

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 = None

  • no_more_rows = False

  • read_obj = None

  • reader = None

  • separator = ' '

Classe Parameters

Dados e outros atributos definidos na classe

  • passed_variables = {}