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で機能的に同等の出力を作成します。

Snowflake Connector for Python も、Snowflakeアカウントに接続し、 SnowConvert で作成した出力Pythonコードを実行するために呼び出されます。

パッケージの最新バージョン情報は こちら をご覧ください。

注釈

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

出力

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

注釈

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

はじめるにあたり

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

 pip install snowconvert-helpers
Copy

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

コードを実行する

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

 python sample_BTEQ.py
Copy

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

 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

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

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

  • 関数呼び出しのパラメーターとして、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')
   .....
Copy

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

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

位置パラメーター

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

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

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

 python sample_BTEQ.py myuser mypassword myaccount
Copy

名前付きパラメーター

次のように、コマンドラインで任意の順序で名前付きパラメーターをセットできます(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

Copy

環境変数

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

キーペア認証

log_on 関数は、キーペアの認証プロセスもサポートできます。キー作成に関する詳細については、以下の Snowflakeドキュメント をご参照ください。必須パラメーターにご注意ください。

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

ログの有効化

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

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

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

構成ファイルには次の構造が含まれている必要があります。Pythonログに関する情報は、 こちらをクリックしてください

 [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

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

 select * from PUBLIC.table1;
Copy

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

クエリ結果

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

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

 pip install pydoc
Copy

そして、snowconvert-helpersパッケージのPythonドキュメントを表示するために、変換された出力コードと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

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

 python -m pydoc -b
Copy

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

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

Copy

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

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

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

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

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)

説明:

演算システムでコマンドを実行します。

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)

説明:

$varおよび${var} 形式の環境変数を展開します。パラメータ「skip_escaped」がTrueの場合、エスケープされた変数参照(つまり、先頭にバックスラッシュが付くもの)はすべてスキップされます。不明な変数は「デフォルト」にセットされます。「デフォルト」がNoneの場合、それらは変更されません。

パラメーター:

  • パス

  • 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 = {}