SnowConvert AI - Teradata - SnowConvert AI スクリプトヘルパー

SnowConvert AI ヘルパーは、TeradataスクリプトファイルをSnowflakeが解釈できるPythonファイルに簡単に変換できるよう設計された関数を持つクラスのセットです。

SnowConvert AI for Teradata では、任意のTeradata SQL またはスクリプト(BTEQ、FastLoad、MultiLoad、TPump)を取り込んで、機能的に同等なSnowflake SQL、Snowflake SQL の組み込み JavaScript、Pythonに変換できます。SnowConvert AI から出力されるPythonコードは、これらのヘルパークラスの関数を呼び出して変換を完了し、Snowflakeで機能的に同等の出力を作成します。

The Snowflake Connector for Python will also be called to connect to your Snowflake account and run the output Python code created by SnowConvert.

For the latest version information, see the snowconvert-helpers PyPI page.

注釈

Pythonパッケージ snowconvert-helpers はPythonバージョン3.6、3.7、3.8、3.9をサポートしています。

スクリプトの移行

ソース

移行する次の BTEQ コードがあるとします。

 insert into table1 values(1, 2);
insert into table1 values(3, 4);
insert into table1 values(5, 6);

出力

以下のような出力が得られるはずです。

注釈

log_on 関数パラメーター('user'、'password'、'account'、'database'、'warehouse'、'role'、'token')はユーザーが指定する必要があります。

 #*** 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()

はじめるにあたり

パッケージをインストールするには、Python環境で以下のコマンドを実行してください。Pythonでのパッケージのインストールに慣れていない場合は、以下のPythonパッケージのページ(https://packaging.python.org/tutorials/installing-packages/)を参照してください。

 pip install snowconvert-helpers

パッケージがインストールされると、Pythonでスクリプトを移行したコードを実行できるようになります。

コードを実行する

移行したコードを実行するには、 コマンドプロンプト または ターミナル を開き、以下のコマンドを実行するだけです。

 python sample_BTEQ.py

スクリプトにエラーがなければ、コンソールに以下のような出力が表示されます。

 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

接続パラメーターの受け渡し

データベースの接続に接続パラメーターを渡す方法はいくつかあります。

  • 関数呼び出しのパラメーターとして、Pythonファイル内でsnowconvert.helpers.log_onを呼び出します。

  • Pythonがコマンドラインから実行されるときに、ユーザー、パスワード、アカウント、データベース、ウェアハウス、およびロールの特定の順序を持つ位置パラメーターとして。

  • コマンドラインからPythonが実行され、そのいずれかが--param-VARNAME=VALUE のように渡される場合、順序制限のない名前付きパラメーターとして SNOW_USER、SNOW_PASSWORD、SNOW_ACCOUNT、SNOW_DATABASE、SNOW_WAREHOUSE、SNOW_ROLE、SNOW_QUERYTAG、SNOWAUTHENTICATOR および SNOWTOKEN。

  • Python実行前に、 SNOW_USER、 SNOW_PASSWORD、 SNOW_ACCOUNT、 SNOW_DATABASE、 SNOW_WAREHOUSE、 SNOW_ROLE、 SNOW_QUERYTAG、 SNOWAUTHENTICATOR および SNOWTOKEN という名前の環境変数として。

指定された前の順序が優先順位を決定する方法です。

関数呼び出しのパラメーター

これらは、以下のように関数呼び出しの位置パラメーターとしてセットすることができます。

    .....
   con = snowconvert.helpers.log_on(
     'myuser',
     'mypassword',
     'myaccount',
     'mydatabase',
     'mywarehouse',
     'myrole',
     5,
     'myauthenticator',
     'mytoken')
   .....

あるいは、以下のように、関数呼び出しの中で、名前付きパラメーターを任意の順番でセットすることもできます。

    .....
   con = snowconvert.helpers.log_on(
     account:'myaccount',
     password:'mypassword',
     user:'myuser',     
     warehouse:'mywarehouse',
     login_timeout:5,
     authenticator:'myauthenticator',
     token:'mytoken')
   .....

位置パラメーター

これらはコマンドラインで以下のように特定の順序でセットする必要があります。

 python sample_BTEQ.py myuser mypassword myaccount mydatabase mywarehouse myrole myauthenticator mytokenr

また、パラメーターの一部だけをセットすることもできますが、次のように常にユーザーパラメーターから始めます。

 python sample_BTEQ.py myuser mypassword myaccount

名前付きパラメーター

次のように、コマンドラインで任意の順序で名前付きパラメーターをセットできます(1行を使用しますが、読みやすさを考慮して複数行で表示されています)。

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

環境変数

Pythonスクリプトを呼び出す前に、以下の環境変数がセットできます。

  • SNOW_USER

  • SNOW_PASSWORD

  • SNOW_ACCOUNT

  • SNOW_DATABASE

  • SNOW_WAREHOUSE

  • SNOW_ROLE

  • SNOW_QUERYTAG

  • SNOW_AUTHENTICATOR

  • SNOW_TOKEN

  • PRIVATE_KEY_PATH

  • PRIVATE_KEY_PASSWORD

キーペア認証

The log_on function can also support the key pair authentication process. Review the following Snowflake documentation for more information about the key creation . Please notice the required parameters:

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

環境変数の受け渡し例

以下は SNOW_AUTHENTICATOR、 SNOW_USER および SNOW_PASSWORD の使用例です。これらは出力Pythonファイルを実行する前に定義され、その後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

ログの有効化

ログを有効にするには、 SNOW_LOGGING という環境変数をtrueにセットします。

それから、ログの構成をカスタマイズしたい場合、 snowconvert.helpers.configure_log() メソッドにパラメーターを次のように渡すことができます。

 snowconvert.helpers.configure_log("SOMEPATH.conf")

The configuration file should contain the next structure. For more information, see the Python logging configuration documentation

 [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

移行したコードが実行されたら、Snowflakeにアクセスして変更またはデプロイを確認できます。

 select * from PUBLIC.table1;

上の例で挿入した行が表示されます。

クエリ結果

ローカルヘルパーのドキュメント

まず、pydocというPythonパッケージをインストールする必要があります(snowconvert-helpersのバージョン2.0.2以降で利用可能です)。

 pip install pydoc

Then to display the python documentation of the package snowconvert-helpers, you should go to a folder where you have the converted output code and you have a python output.

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

このディレクトリにある以下を実行する必要があります。

 python -m pydoc -b

コンソールはお好みのブラウザーを開き、インストールされた全パッケージのドキュメントを HTML ヘルプで表示します。

D:\bteq\Output>python -m pydoc -b
Server ready at http://localhost:61355/
Server commands: [b]rowser, [q]uit
server>

こうするとブラウザーが開き、次のようなコードのドキュメントが表示されます。

生成されたローカルドキュメントのホームページ

ページの最後までスクロールすると、インストールされているパッケージが表示されます。そして、次のようなものが表示されます。

インストール済みローカルパッケージドキュメントインデックス

SnowConvert AI(パッケージ)をクリックすると、次のようなものが表示されます。

snowconvert-helpersドキュメント用ホームページ

モジュールヘルパーをクリックすると、以下のような画面が表示されます。

ヘルパーモジュールのホームページ

そして、モジュールの関数とクラスをスクロールすることができます。

関数ドキュメント

既知の問題

問題は見つかりませんでした。

技術ドキュメント

関数

プロジェクトで定義されたすべての関数。

access

注釈

access(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True)

説明:

パスへのアクセスをテストするには、実際のuid/gidを使用してください。

dir_fd、effective_ids、follow_symlinksは、プラットフォームで実装されていない可能性があります。それらが利用できない場合、それらを使用すると、 NotImplementedError. が発生します。

ほとんどの操作は、有効なuid/gidを使用するため、このルーチンはsuid/sgid環境で使用し、起動したユーザーがパスへの指定されたアクセスを持っているかどうかをテストできることに注意してください。

パラメーター:
  • パス、 テストされるパス。文字列、バイト、またはパスに似た オブジェクト を使用できます

  • モード、 オペレーティングシステムモードビットフィールド。存在をテストするためにF_OK を使用できます。または、R_OK、W_OK、およびX_OK の包含 OR を使用できます

  • dir_fd、 Noneでない場合は、ディレクトリに開かれたファイル記述子で、パスは相対パスでなければなりません。その場合、パスはそのディレクトリに対して相対的になります

  • effective_ids、 Trueの場合、アクセスは実際のuid/gidの代わりに有効なuid/gidを使用します

  • follow_symlinks、 Falseで、パスの最後の要素がシンボリックリンクの場合、アクセスはリンク先のファイルではなく、シンボリックリンク自体を調べます

at_exit_helpers

注釈

at_exit_helpers()

説明:

スクリプトの実行終了時に実行します。

colored

注釈

colored(text, color='blue')

説明:

指定された色からカラーテキストを印刷します。

パラメーター:
  • テキスト 印刷されるテキスト

  • color="blue" 印刷する色

configure_log

注釈

configure_log(configuration_path)

説明:

Snowflake接続上のデータ関連の実行に対して実行されるロギングを設定します。ログファイル名はデフォルトで 'snowflake_python_connector.log' となります。

パラメーター:

  • configuration_path ログに必要なすべての設定を含むファイルの構成パス

drop_transient_table

注釈

drop_transient_table(tempTableName, con=None)

説明:

指定された名前の一時テーブルを削除します。

パラメーター:

  • tempTableName 仮テーブル名

  • con=None 使用する接続。Noneを渡すと、最後に実行された接続が使用されます

exception_hook

注釈

exception_hook(exctype, value, tback)

説明:

パラメーター:

  • exctype

  • tback

exec

注釈

exec(sql_string, using=None, con=None)

説明:

最後の接続を使用してSQL文字列を実行します。オプションで引数または特定の接続を使用します。例:

  • _ exec("SELECT * FROM USER")_

  • _ exec("SELECT * FROM USER", con)_

  • _ exec("SELECT * FROM CUSTOMER WHERE CUSTOMERID= %S", customer)_

パラメーター:

  • sql_string SQLの定義

  • using=None 渡されたSQLで使用できるオプションパラメーター

  • con=None 使用する接続。Noneを渡すと、最後に実行された接続が使用されます

exec_file

注釈

exec_file(filename, con=None)

説明:

ファイルの内容を読み込み、指定された接続に含まれるSQLステートメントを実行します。

パラメーター:

  • filename 読み込んで実行するファイル名

  • con=None 使用する接続。Noneを渡すと、最後に実行された接続が使用されます

exec_os

注釈

exec_os(command)

説明:

Executes a command in the operating system.

exec_sql_statement

注釈

exec_sql_statement(sql_string, con, using=None)

説明:

渡された接続で、オプションの引数でSQLステートメントを実行します。

パラメーター:

  • sql_string 実行する文字列を含むSQL

  • con 使用する接続

  • using SQL実行時に使用するオプションパラメーター

expands_using_params

注釈

expands_using_params(statement, params)

説明:

パラメーターと一緒に渡されたステートメントを展開します。

パラメーター:

  • statement 実行する文字列を含むSQL

  • params SQLステートメントのパラメーター

expandvar

注釈

expandvar(str)

説明:

渡された文字列から変数を展開します。

パラメーター:

  • str 変数で展開される文字列

expandvars

注釈

expandvars(path, params, skip_escaped=False)

説明:

Expand environment variables of form $var and ${var}. If parameter 'skip_escaped' is True, all escaped variable references (that is, preceded by backslashes) are skipped. Unknown variables are set to 'default'. If 'default' is None, they are left unchanged.

パラメーター:

  • パス

  • params

  • skip_escaped=False

fast_load

注釈

fast_load(target_schema, filepath, stagename, target_table_name, con=None)

説明:

渡されたパラメーターtarget_schema、filepath、stagename、およびtarget_table_nameで高速ロードを実行します。

パラメーター:

  • target_schema 高速ロードで使用するスキーマの名前

  • filepath テーブルにロードされるファイル名のパス

  • target_table_name データがロードされるテーブル名

  • con=None 使用する接続。Noneを渡すと、最後に実行された接続が使用されます

file_exists_and_readable

注釈

file_exists_and_readable(filename)

説明:

パラメーター:

  • filename

get_argkey

注釈

get_argkey(astr)

説明:

渡された文字列から引数のキー値を取得します。文字列「--param-」で始まる必要があります

パラメーター:

  • astr 使用する引数文字列。文字列は--param-column=32のような値でなければならず、返される文字列は「32」になります

get_error_position

注釈

get_error_position()

説明:

生成されたエラーのスタックの情報を使用して、ファイルからエラー位置を取得します。

get_from_vars_or_args_or_environment

注釈

get_from_vars_or_args_or_environment(arg_pos, variable_name, vars, args)

説明:

指定された位置から引数を取得するか、テーブル変数から値を取得するか、渡された環境変数名を取得します。

パラメーター:

  • arg_pos 引数パラメーターから使用する引数の位置

  • variable_name 取得する変数名

  • vars 変数名と値のハッシュ

  • args 引数配列パラメーター

import_data_to_temptable

注釈

import_data_to_temptable(tempTableName, inputDataPlaceholder, con)

説明:

入力データプレースホルダーを使用して、データを仮テーブルにインポートします。

パラメーター:

  • tempTableName、 仮テーブル名。

  • inputDataPlaceholder、 Snowflakeデータベースのステージである使用される入力プレースホルダー

  • con、 使用する接続

import_file

注釈

import_file(filename, separator=' ')

説明:

渡されたファイル名を、オプションのセパレーターを付けてインポートします。

パラメーター:

  • filename、 インポートするファイル名のパス

  • separator=' '、 オプションのセパレーター

import_file_to_temptable

注釈

import_file_to_temptable(filename, tempTableName, columnDefinition)

説明:

仮テーブルに渡されたファイルをインポートします。プレフィックスStage_を持つ仮テーブルという名前のパブリックステージが使用されます。仮テーブルへのロードが終了すると、そのプロセスで使用されたステージが削除されます。

パラメーター:

  • filename、 読み込むファイル名

  • tempTableName、 仮テーブル名

  • columnDefinition、 仮テーブルを持つすべてのフィールドの定義

import_reset

注釈

import_reset()

説明:

log

注釈

log(*msg, level=20, writter=None)

説明:

ログが有効になっているかどうかに応じて、コンソール(標準出力)またはログファイルにメッセージを出力します

パラメーター:

  • *msg、 出力またはログするメッセージ

  • level=20、

  • writter=None、

log_on

注釈

log_on(user=None, password=None, account=None, database=None, warehouse=None, role=None, login_timeout=10, authenticator=None)

説明:

認証情報、データベース、ウェアハウス、ロール、login_timeout、認証コードをパラメーターとしてSnowflakeデータベースにログインします。

パラメーター:

  • user、 データベースのユーザー

  • password データベースのユーザーのパスワード

  • database、 接続するデータベース

  • warehouse、 接続するデータベースのウェアハウス

  • role、 接続するロール

  • login_timeout、 接続に時間がかかりすぎる場合にエラーを出すまでの最大タイムアウト

  • authenticator、 SNOWFLAKE、 EXTERNALBROWSER、 SNOWFLAKE_JWT または OAUTH のように使用する認証コードがサポートする値

  • token、 OAUTH または JWT トークン

os

注釈

os(args)

説明:

パラメーター:

  • args、

quit_application

注釈

quit_application(code=None)

説明:

アプリケーションを終了し、オプションで渡されたコードを返します。

パラメーター:

  • code=None、 終了後に返されるコード

read_params_args

注釈

read_param_args(args)

説明:

渡された配列からパラメーターの引数を読み込みます。

パラメーター:

  • args、 使用する引数

readrun

注釈

readrun(line, skip=0)

説明:

与えられたファイル名の行を読み、オプションでファイルの先頭のいくつかの行をスキップします。

パラメーター:

  • line、 読み込むファイル名

  • skip=0、 スキップする行

remark

注釈

remark(arg)

説明:

引数を印刷します。

パラメーター:

  • arg、 印刷する引数

repeat_previous_sql_statement

注釈

repeat_previous_sql_statement(con=None, n=1)

説明:

前に実行されたSQLステートメントを繰り返します。

パラメーター:

  • con=None、 指定されている場合は接続。これが渡されない場合は、最後に行われた接続が使用されます

  • n=1、 再実行する前のステートメントの数

set_default_error_level

注釈

set_default_error_level(severity_value)

説明:

パラメーター:

  • severity_value、

set_error_level

注釈

set_error_level(arg, severity_value)

説明:

パラメーター:

  • arg、

  • severity_value、

simple_fast_load

注釈

simple_fast_load(con, target_schema, filepath, stagename, target_table_name)

説明:

接続と渡されたパラメーターtarget_schema、filepath、stagename、ターゲットテーブル名で単純な高速ロードを実行します。

パラメーター:

  • arg、 使用する接続

  • target_schema、 高速ロードで使用するスキーマの名前

  • filepath、 テーブルにロードされるファイル名のパス

  • target_table_name、 データがロードされるテーブル名

stat

注釈

stat(path, *, dir_fd=None, follow_symlinks=True)

説明:

_与えられたパスでstatシステム呼び出しを実行します。_dir_fdとfollow_symlinksは、お使いのプラットフォームで実装されていない可能性があります。それらが利用できない場合、それらを使用すると、 NotImplementedError が発生します。開いているファイル記述子としてパスを指定するときに、dir_fdまたはfollow_symlinksを使用するとエラーになります

パラメーター:

  • path、 検査するパス。文字列、バイト、パスのような オブジェクト、または\ open-file-descriptor intを使用できます

  • dir_fd、 Noneでない場合は、ディレクトリに開かれたファイル記述子で、パスは相対文字列でなければなりません。その場合、パスはそのディレクトリに対して相対的になります

  • follow_symlinks、 Falseで、パスの最後の要素がシンボリックリンクの場合、statはリンク先のファイルではなく、シンボリックリンク自体を調べます

system

注釈

system(command)

説明:

サブシェルでコマンドを実行します。

パラメーター:

  • _ コマンド_

using

注釈

using(*argv)

説明:

パラメーター:

  • _ *argv_

クラス

プロジェクトで定義されたすべてのクラス

BeginLoading クラス

このクラスは import_file_to_tab 静的関数を含んでおり、 BEGIN LOADING と FastLoad の関連コマンドのサポートを提供します。

import_file_to_tab()

パラメーター:

  1. target_schema_table

    • ターゲットスキーマ(オプション)とテーブル名

  2. define_file

    • 読み込むファイル名

  3. define_columns

    • 仮テーブルのすべての列の定義

  4. begin_loading_columns

    • 挿入する列名。値の挿入順序を指定します

  5. begin_loading_values

    • 変換する生の挿入値のリスト

  6. field_delimiter

    • フィールド区切り文字

  7. (オプション) skip_header

    • スキップする行数

  8. (オプション) input_data_place_holder

    • サポートされているクラウドプロバイダー内のファイルの場所。ファイルがローカルに保存されていない場合のパラメーターセット

  9. (オプション) con

    • 使用する接続

エクスポートクラス

クラスの静的メソッド

  • 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)

\ ここで定義されたデータとその他の属性

  • expandedfilename = None

  • separator = '' \

インポートクラス

クラスのメソッド

  • reset()

クラスの静的メソッド

  • file(file, separator=' ')

  • using(globals, *argv)

クラスで定義されたデータとその他の属性

  • expandedfilename = None

  • no_more_rows = False

  • read_obj = None

  • reader = None

  • separator = ' '

Parameters Class

クラスで定義されたデータとその他の属性

  • passed_variables = {}