SnowConvert AI - Teradata - BTEQ¶
Teradata BTEQ ファイルをPythonに変換するための翻訳リファレンス
Basic Teradata Query(BTEQ)は、ワークステーションのユーザーが1つまたは複数のTeradataデータベースシステムと通信し、印刷と画面出力の両方でレポートを形式化できるようにする、コマンドベースの汎用プログラムです。
To simulate the BTEQ functionality for Teradata in Snowflake, BTEQ files and commands are transformed to Python code, similar to the transformations performed for MultiLoad and FastLoad scripts. The generated code uses the Snowflake Python project called snowconvert.helpers which contains the required functions to simulate the BTEQ statements in Snowflake.
BTEQ コマンド翻訳¶
次のテーブルは、 BTEQ コマンドのSnowflakeへの変換を示します。
Teradata |
Snowflake |
メモ |
|---|---|---|
ERRORCODE != 0 |
snowconvert.helpers.error_code != 0 |
|
.EXPORT DATA FILE=fileName |
Export.report("fileName", ",") |
関数に機能はありません |
.EXPORT INDICDATA FILE=fileName |
Export.report("fileName", ",") |
関数に機能はありません |
.EXPORT REPORT FILE=fileName |
Export.report("fileName", ",") |
関数に機能はありません |
.EXPORT DIF FILE=fileName |
Export.report("fileName", ",") |
関数に機能はありません |
.EXPORT RESET |
Export.reset() |
関数に機能はありません |
.IF ERRORCODE != 0 THEN .QUIT ERRORCODE |
If snowconvert.helpers.error_code != 0: snowconvert.helpers.quit_application (snowconvert.helpers.error_code) |
|
.IMPORT RESET |
snowconvert.helpers.import_reset() |
関数に機能はありません |
.LABEL newLabel |
def NEWLABEL(): |
|
.LOGOFF |
ステートメントはコメントされています |
|
.LOGON |
ステートメントはコメントされています |
|
.LOGMECH |
ステートメントはコメントされています |
|
.OS /fs/fs01/bin/filename.sh 'load' |
snowconvert.helpers.os(""/fs/fs01/bin/filename.sh 'load' "") |
|
.RUN FILE=newFile |
for statement in snowconvert.helpers.readrun("newFile"): eval(statement) |
|
.SET DEFAULTS |
Export.defaults() |
関数に機能はありません |
.SETERRORLEVEL 3807 SEVERITY 0 |
snowconvert.helpers.set_error_level(3807, 0) |
|
.SET RECORMODE OFF |
Export.record_mode(False) |
|
.SET RECORMODE ON |
Export.record_mode(True) |
|
.SET SEPARATOR '|' |
Export.separator_string('|') |
関数に機能はありません |
.SETWIDTH 120 |
Export.width(120) |
関数に機能はありません |
.Remark ""Hello world!""" |
snowconvert.helpers.remark(r""""""Hello world!"""""") |
|
.QUIT ERRORCODE |
snowconvert.helpers.quit_application( snowconvert.helpers.error_code ) |
|
.QUIT |
snowconvert.helpers.quit_application() |
|
SQL ステートメント |
exec(statement) |
|
$(<$INPUT_SQL_FILE) |
exec_file("$INPUT_SQL_FILE") |
|
= (前のコマンドを繰り返す) |
snowconvert.helpers.repeat_previous_sql_statement(con) |
For more complicated statements presented in the previous table, subsections with detailed examples are provided below.
.GOTO 変換¶
私たちは BTEQ スクリプトをPythonに変換しているので、 BTEQ で有効なある種の構造はPythonでは本質的にサポートされていません。これは、 .Label コマンドを使用する .GOTO コマンドのケースです。
このため、これらのコマンドの機能をエミュレートできるように、 .Label コマンドを、後続のコールステートメントを持つ関数に変換する代替手段が開発されました。
以下のコードを確認してください。
上の例では5つのコマンドがありました。そのうちの2つは .Label コマンドでした。コマンド FIRSTLABEL は、別の .LABEL コマンドが見つかるまで、その下のステートメントを含む関数に変換されました。別のラベルが呼ばれると(このケースでは SECONDLABEL)、最初の関数が終了し、新しい関数が開始されます。
先ほどの例を移行すると、結果はこうなります。
関数 FIRSTLABEL_ の呼び出しがあることに注意してください。この関数にはステートメントが1つしかなく、それは元のコード内で FIRSTLABEL に続く唯一のラベル以外のコマンドになります。関数が終了する前に、 _ FIRSTLABEL はそれに続くステートメントを使用して SECONDLABEL を呼び出します。_
注意:
コネクタ変数
con = Noneを作成し、main()関数でその変数に入力します:con = snowconvert.helpers.log_on()。ログのセットアップ:
snowconvert.helpers.configure_log()。
クエリステートメントの実行¶
Every SQL statement found in a BTEQ file will be executed through theexecfunction provided by the snowconvert.helpers. Take for example the following code:
これは次のように変換されます。
スクリプトファイルの実行¶
ユーザーの BTEQ コマンドとTeradata SQL ステートメントを含むファイルは、スクリプト、実行ファイル、マクロ、またはストアドプロシージャと呼ばれます。例えば、 SAMPFILE というファイルを作成し、以下の BTEQ スクリプトを入力します。
実行ファイルを実行するには、 BTEQ RUN コマンドのいずれかの形式を入力します。
2番目のコードを変換すると、結果は次のようになります。
snowconvert.helpers.readrun("sampfile") は SAMPFILE から各行を返し、FOR ステートメントでは、各行が eval 関数に渡されます。これは渡された式を解析し、プログラム内でPython式を実行するメソッドです(SAMPFILE は動作するように変換する必要があります)。
SQL ファイルの実行¶
BTEQ ファイルの実行中に、 SQL ファイルが見つかることがあります。例えば、 NEWSQL という SQL ファイルがあるとします。
これはスクリプト中に以下の行で実行できます。
そして、スクリプトの変換後の結果は次のとおりです。
exec_file ヘルパー関数は NEWSQL ファイルから各行を読み込み、セクション クエリステートメントの実行で説明されているようにexec関数を使用します。
既知の問題¶
問題は見つかりませんでした。
REPEAT¶
REPEAT ステートメントの変換仕様。
注釈
わかりやすくするため、出力コードの一部を省略しています。
Teradataの ドキュメント によると、 REPEAT ステートメントにより、ユーザーは次の SQL リクエストの最大提出回数を指定できます。SQL リクエストは単一または複数ステートメントのリクエストになる可能性があることに注意してください。これは、 REPEAT ステートメントに続く各ステートメントのセミコロンの位置によって定義されます。
構文¶
サンプルソースパターン¶
この入力データで:
inputData.dat¶
inputData2.dat¶
Teradata:¶
クエリ¶
TESTTABU 結果¶
| C1 | C2 |
|---|---|
| A | X |
| D | X |
| G | X |
| B | Y |
| E | Y |
| H | Y |
| C | Z |
| F | Z |
| I | Z |
| ? | _ |
| ? | _ |
| ? | _ |
| * | null |
| [ | null |
TESTTABU2 結果¶
| MY_NAME | MY_AGE |
|---|---|
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| Bob Alice | 21 |
| Bob Alice | 21 |
| Bob Alice | 21 |
| Bob Alice | 21 |
| Bob Alice | 21 |
Snowflake:¶
クエリ¶
TESTTABU 結果¶
| C1 | C2 |
|---|---|
| A | X |
| D | X |
| G | X |
| B | Y |
| E | Y |
| H | Y |
| C | Z |
| F | Z |
| I | Z |
| ? | _ |
| ? | _ |
| ? | _ |
| * | null |
| [ | null |
TESTTABU2 結果¶
| MY_NAME | MY_AGE |
|---|---|
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| John Doe | 23 |
| Bob Alice | 21 |
| Bob Alice | 21 |
| Bob Alice | 21 |
| Bob Alice | 21 |
| Bob Alice | 21 |
既知の問題¶
問題は見つかりませんでした。
関連 EWIs ¶
関連 EWIs はありません。
USING REQUEST MODIFIER¶
USING REQUEST MODIFIER クエリの変換仕様。
注釈
わかりやすくするため、出力コードの一部を省略しています。
Teradataの ドキュメント にあるように、 USING REQUEST MODIFIER は、その後の SELECT、 INSERT、 UPDATE、または DELETE ステートメントで使用される1つ以上の変数パラメーター名を定義し、データをインポートまたはエクスポートします。
このステートメントの構文は以下の通りです。
Teradataのドキュメントに記載されているように、定義されたパラメーターにデータをロードするには、 USING REQUEST MODIFIER の前に.IMPORT ステートメントが必要です。
したがって、このステートメントの変換は以下のステップに従います。
SnowConvert AI ヘルパーから
import_file()関数を呼び出します。これでデータは一時ファイルにロードされます。SnowConvert AI ヘルパーから
using()関数を呼び出して、ロードされたデータでディクショナリを作成します。クエリごとに、 SnowConvert AI ヘルパーから
exec()関数を実行し、以前に定義したディクショナリを渡します。これにより、Snowflake Pythonコネクタのデータバインディング機能が使用されます。
この入力データで:
Teradata(MultiLoad)
クエリ¶
結果¶
| ROW | C1 | C2 |
|---|---|---|
| 1 | A | X |
| 2 | B | Y |
| 3 | C | Z |
Snowflake(Python)
クエリ¶
結果¶
| ROW | C1 | C2 |
|---|---|---|
| 1 | A | X |
| 2 | B | Y |
| 3 | C | Z |
既知の問題¶
1. .REPEAT コマンドはまだサポートされていません
.REPEAT コマンドはまだサポートされていません。つまり、 USING REQUEST MODIFIER は入力ファイルの最初の行からロードされたデータのみを使用します。したがって、クエリは一度しか実行されません。
この問題は、.REPEAT コマンドが適切な変換サポートを受けると修正されるはずです。
この文書に関してご質問がある場合は、[snowconvert-support@snowflake.com](mailto:snowconvert-support@snowflake.com)まで電子メールをお送りください。
関連 EWIs ¶
関連 EWIs はありません。