SnowConvert AI – Teradata – FLOAD¶
Übersetzungsreferenzen zur Konvertierung von Teradata-FLOAD-Dateien in Python
Teradata FastLoad ist ein befehlsgesteuertes Dienstprogramm zum schnellen Laden von Daten in eine leere Tabelle in einer Teradata-Datenbank.
Um die FastLoad-Funktionalität für Teradata in Snowflake zu simulieren, werden FastLoad-Dateien und -Befehle in Python-Code umgewandelt, ähnlich wie die Transformationen, die für BTEQ- und MultiLoad-Skripte ausgeführt werden. Der generierte Code verwendet das Snowflake-Python-Projekt namens snowconvert.helpers, das die erforderlichen Funktionen zur Simulation der FastLoad-Anweisungen in Snowflake enthält.
Übersetzung von FastLoad-Befehlen¶
Die meisten der FastLoad-Befehle werden in Snowflake als nicht relevant angesehen, diese Befehle sind auskommentiert. Im Folgenden finden Sie eine zusammenfassende Liste der FastLoad-Befehle und deren Transformationsstatus in Snowflake:
Teradata FastLoad-Befehl |
Status der Transformation |
Hinweis |
|---|---|---|
AXSMOD |
Kommentiert |
|
Transformiert |
Der Knoten wird auskommentiert, da die Transformation stattdessen in der zugehörigen Anweisung INSERT erfolgt. |
|
CLEAR |
Kommentiert |
|
DATEFORM |
Kommentiert |
|
Transformiert |
|
|
Transformiert |
Auskommentiert, da nicht notwendig für die BEGIN LOADING-Transformation. |
|
ERRLIMIT |
Kommentiert |
|
HELP |
Kommentiert |
|
HELP TABLE |
Kommentiert |
|
Transformiert |
Umgewandelt als Teil von BEGIN LOADING. |
|
LOGDATA |
Kommentiert |
|
LOGMECH |
Kommentiert |
|
LOGOFF |
Kommentiert |
|
LOGON |
Kommentiert |
|
NOTIFY |
Kommentiert |
|
OS |
Kommentiert |
|
QUIT |
Kommentiert |
|
RECORD |
Kommentiert |
|
RUN |
Kommentiert |
|
SESSIONS |
Kommentiert |
|
Transformiert |
|
|
SET SESSION CHARSET |
Kommentiert |
|
SHOW |
Kommentiert |
|
SHOW VERSIONS |
Kommentiert |
|
SLEEP |
Kommentiert |
|
TENACITY |
Kommentiert |
|
Standardtransformation¶
Das Standardverhalten von ConversionTool für diese Anweisungen ist, sie auszukommentieren. Beispiel:
Teradata (FastLoad)
SESSIONS 4;
ERRLIMIT 25;
Snowflake (Python)
#*** 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()
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
#SESSIONS 4
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
#ERRLIMIT 25
snowconvert.helpers.quit_application()
if __name__ == "__main__":
main()
Dennoch gibt es einige Ausnahmen, die in spezifische Python-Anweisungen umgewandelt werden müssen, damit sie in Snowflake wie vorgesehen funktionieren.
Eingebettetes SQL¶
FastLoad-Skripte unterstützen Teradata-Anweisungen innerhalb der gleichen Datei. Die meisten dieser Anweisungen werden genauso konvertiert, als befänden sie sich in einer BTEQ-Datei, mit einigen Ausnahmen.
Das Löschen einer Fehlertabelle wird auskommentiert, wenn sie sich in einer FastLoad-Datei befindet.
Teradata (FastLoad)
DROP TABLE Error1;
DROP TABLE Error2;
Snowflake (Python)
#*** 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("""
DROP TABLE Error1
""")
exec("""
DROP TABLE Error2
""")
snowconvert.helpers.quit_application()
if __name__ == "__main__":
main()
Großes Beispiel¶
Betrachten Sie anhand der oben gezeigten Transformationen für eine Vielzahl von Befehlen das folgende Beispiel.
Teradata (FastLoad)
SESSIONS 4;
ERRLIMIT 25;
DROP TABLE FastTable;
DROP TABLE Error1;
DROP TABLE Error2;
CREATE TABLE FastTable, NO FALLBACK
( ID INTEGER, UFACTOR INTEGER, MISC CHAR(42))
PRIMARY INDEX(ID);
DEFINE ID (INTEGER), UFACTOR (INTEGER), MISC (CHAR(42))
FILE=FileName;
SHOW;
BEGIN LOADING FastTable ERRORFILES Error1,Error2
CHECKPOINT 10000;
INSERT INTO FastTable (ID, UFACTOR, MISC) VALUES
(:ID, :MISC);
END LOADING;
Snowflake (Python)
#*** Generated code is based on the SnowConvert AI Python Helpers version 2.0.6 ***
#** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "Error1", "Error2" **
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()
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
#SESSIONS 4
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
#ERRLIMIT 25
exec("""
DROP TABLE FastTable
""")
exec("""
CREATE OR REPLACE TABLE FastTable (
ID INTEGER,
UFACTOR INTEGER,
MISC CHAR(42)
)
""")
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW AS ASSIGNMENT STATEMENTS **
#DEFINE ID (INTEGER), UFACTOR (INTEGER), MISC (CHAR(42)) FILE = FileName
ssc_define_columns = "ID (INTEGER), UFACTOR (INTEGER), MISC (CHAR(42))"
#Set file name manually if empty
ssc_define_file = f"""FileName"""
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. **
#SHOW
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW **
#BEGIN LOADING FastTable ERRORFILES Error1, Error2 CHECKPOINT 10000
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW AS PART OF THE BEGIN LOADING TRANSLATION **
#INSERT INTO FastTable (ID, UFACTOR, MISC) VALUES (:ID, :MISC)
ssc_begin_loading_columns = "(ID, UFACTOR, MISC)"
ssc_begin_loading_values = [":ID", ":MISC"]
BeginLoading.import_file_to_table(f"""FastTable""", ssc_define_columns, ssc_define_file, ssc_begin_loading_columns, ssc_begin_loading_values, ",")
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. END LOADING **
#END LOADING
snowconvert.helpers.quit_application()
if __name__ == "__main__":
main()
Wenn Sie weitere Fragen zu dieser Dokumentation haben, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
BEGIN LOADING¶
Die Transformation für den Befehl BEGIN LOADING ist eine mehrteilige Transformation, die die Befehle DEFINE, INSERT und (optional) SET RECORD benötigt, um ihre Verhaltensweise korrekt zu simulieren.
Diese Transformation wird in den folgenden Unterabschnitten ausführlich erklärt.
SET RECORD¶
Wie bereits erwähnt, ist dieser Befehl für die Transformation von BEGIN LOADING nicht erforderlich. Wenn er nicht gefunden wird, wird das Standardtrennzeichen auf ‚,‘ (Komma) gesetzt. Andernfalls wird das definierte Trennzeichen verwendet. Dieser Wert wird in der Variablen ssc_set_record gespeichert.
Ab sofort werden nur noch SET RECORD VARTEXT, SET RECORD FORMATTED und SET RECORD UNFORMATTED unterstützt. Bei den Schlüsselwortangaben BINARY und TEXT wird stattdessen eine Fehlermeldung EWI ausgegeben.
Teradata (FastLoad)
SET RECORD VARTEXT DELIMITER 'c' DISPLAY ERRORS 'efilename';
SET RECORD VARTEXT 'l' 'c' NOSTOP;
SET RECORD VARTEXT 'l' TRIM NONE LEADING 'p';
SET RECORD VARTEXT 'l' TRIM NONE TRAILING 'p';
SET RECORD VARTEXT 'l' TRIM NONE BOTH 'p';
SET RECORD FORMATTED TRIM NONE BOTH;
SET RECORD UNFORMATTED QUOTE NO OPTIONAL;
SET RECORD BINARY QUOTE NO YES 'q';
SET RECORD TEXT QUOTE OPTIONAL;
Snowflake (Python)
#*** 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()
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW AS AN ASSIGNMENT STATEMENT **
#SET RECORD VARTEXT DELIMITER 'c' DISPLAY ERRORS 'efilename'
ssc_set_record = ""
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW AS AN ASSIGNMENT STATEMENT **
#SET RECORD VARTEXT 'l' 'c' NOSTOP
ssc_set_record = "'l'"
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW AS AN ASSIGNMENT STATEMENT **
#SET RECORD VARTEXT 'l' TRIM NONE LEADING 'p'
ssc_set_record = "'l'"
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW AS AN ASSIGNMENT STATEMENT **
#SET RECORD VARTEXT 'l' TRIM NONE TRAILING 'p'
ssc_set_record = "'l'"
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW AS AN ASSIGNMENT STATEMENT **
#SET RECORD VARTEXT 'l' TRIM NONE BOTH 'p'
ssc_set_record = "'l'"
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW AS AN ASSIGNMENT STATEMENT **
#SET RECORD FORMATTED TRIM NONE BOTH
ssc_set_record = ","
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW AS AN ASSIGNMENT STATEMENT **
#SET RECORD UNFORMATTED QUOTE NO OPTIONAL
ssc_set_record = "UNFORMATTED"
#** SSC-EWI-0021 - 'BINARY' KEYWORD SPECIFICATION FOR SET RECORD NOT SUPPORTED IN SNOWFLAKE **
#SET RECORD BINARY QUOTE NO YES 'q'
#** SSC-EWI-0021 - 'TEXT' KEYWORD SPECIFICATION FOR SET RECORD NOT SUPPORTED IN SNOWFLAKE **
#SET RECORD TEXT QUOTE OPTIONAL
snowconvert.helpers.quit_application()
if __name__ == "__main__":
main()
DEFINE¶
Die Transformation für den Befehl DEFINE setzt die Variablen ssc_define_columns und ssc_define_file mit dem Wert der Spaltendefinition bzw. dem Dateipfad, der in der BEGIN LOADING-Transformation verwendet werden soll.
Teradata (FastLoad)
DEFINE
id (INTEGER),
first_name (VARCHAR(50)),
last_name (VARCHAR(50)),
salary (FLOAT)
FILE=/tmp/inputData.txt;
DEFINE
id (INTEGER),
first_name (VARCHAR(50)),
last_name (VARCHAR(50)),
salary (FLOAT)
DEFINE
FILE=/tmp/inputData.txt;
DEFINE;
Snowflake (Python)
#*** 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()
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW AS ASSIGNMENT STATEMENTS **
#DEFINE id (INTEGER), first_name (VARCHAR(50)), last_name (VARCHAR(50)), salary (FLOAT) FILE = /tmp/inputData.txt
ssc_define_columns = "id (INTEGER), first_name (VARCHAR(50)), last_name (VARCHAR(50)), salary (FLOAT)"
#Set file name manually if empty
ssc_define_file = f"""/tmp/inputData.txt"""
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW AS ASSIGNMENT STATEMENTS **
#DEFINE id (INTEGER), first_name (VARCHAR(50)), last_name (VARCHAR(50)), salary (FLOAT)
ssc_define_columns = "id (INTEGER), first_name (VARCHAR(50)), last_name (VARCHAR(50)), salary (FLOAT)"
#Set file name manually if empty
ssc_define_file = f""""""
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW AS ASSIGNMENT STATEMENTS **
#DEFINE FILE = /tmp/inputData.txt
ssc_define_columns = ""
#Set file name manually if empty
ssc_define_file = f"""/tmp/inputData.txt"""
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW AS ASSIGNMENT STATEMENTS **
#DEFINE
ssc_define_columns = ""
#Set file name manually if empty
ssc_define_file = f""""""
snowconvert.helpers.quit_application()
if __name__ == "__main__":
main()
BEGIN LOADING¶
Der Befehl BEGIN LOADING ist auskommentiert, da die relevanten Informationen für die Transformation stattdessen in der zugehörigen INSERT-Anweisung zu finden sind.
ERRORFILES, NODROP, CHECKPOINT, INDICATORS und DATAENCRYPTION sind für die Transformation nicht notwendig und werden daher auskommentiert.
Teradata (FastLoad)
BEGIN LOADING FastTable ERRORFILES Error1,Error2
CHECKPOINT 10000;
Snowflake (Python)
#*** 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()
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW **
#BEGIN LOADING FastTable ERRORFILES Error1, Error2 CHECKPOINT 10000
snowconvert.helpers.quit_application()
if __name__ == "__main__":
main()
INSERT¶
Die Transformation für die zugehörige INSERT-Anweisung setzt den Wert für die Variablen ssc_begin_loading_columns und ssc_begin_loading_values, die verwendet werden, um die Reihenfolge zu bestimmen, in der die zu ladenden Werte eingefügt werden sollen.
Schließlich werden diese Variablen und die in den obigen Abschnitten beschriebenen Variablen verwendet, um die Funktion BeginLoading. import_file_to_table des Moduls SnowConvert. Helpers aufzurufen. Diese Funktion simuliert die Verhaltensweise des gesamten FastLoad BEGIN LOADING-Prozesses. Um mehr über diese Funktion zu erfahren, klicken Sie hier.
Teradata (FastLoad)
SET RECORD VARTEXT """";
DEFINE
_col1 (CHAR(10)),
_col2 (CHAR(7)),
_col3 (CHAR(2, NULLIF = 'V5'))
FILE=inputDataNoDel.txt;
BEGIN LOADING TESTS.EmpLoad4
ERRORFILES ${CPRDBName}.ET_${LOADTABLE},${CPRDBName}.UV_${LOADTABLE}
CHECKPOINT 1000;
INSERT INTO TESTS.EmpLoad4 (col2, col3, col1, col4)
VALUES
(
:_col2,
:_col3,
:_col1,
CURRENT_DATE
);
Snowflake (Python)
#*** Generated code is based on the SnowConvert AI Python Helpers version 2.0.6 ***
#** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "TESTS.EmpLoad4" **
import os
import sys
import snowconvert.helpers
from snowconvert.helpers import Export
from snowconvert.helpers import exec
from snowconvert.helpers import BeginLoading
con = None
#** SSC-FDM-TD0022 - SHELL VARIABLES FOUND, RUNNING THIS CODE IN A SHELL SCRIPT IS REQUIRED **
def main():
snowconvert.helpers.configure_log()
con = snowconvert.helpers.log_on()
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW AS AN ASSIGNMENT STATEMENT **
#SET RECORD VARTEXT "" ""
ssc_set_record = ""
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW AS ASSIGNMENT STATEMENTS **
#DEFINE _col1 (CHAR(10)), _col2 (CHAR(7)), _col3 (CHAR(2, NULLIF = 'V5')) FILE = inputDataNoDel.txt
ssc_define_columns = "_col1 (CHAR(10)), _col2 (CHAR(7)), _col3 (CHAR(2, NULLIF = 'V5'))"
#Set file name manually if empty
ssc_define_file = f"""inputDataNoDel.txt"""
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW **
#BEGIN LOADING TESTS.EmpLoad4 ERRORFILES ${CPRDBName}.ET_${LOADTABLE}, ${CPRDBName}.UV_${LOADTABLE} CHECKPOINT 1000
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW AS PART OF THE BEGIN LOADING TRANSLATION **
#INSERT INTO TESTS.EmpLoad4 (col2, col3, col1, col4) VALUES (:_col2, :_col3, :_col1, CURRENT_DATE)
ssc_begin_loading_columns = "(col2, col3, col1, col4)"
ssc_begin_loading_values = [":_col2", ":_col3", ":_col1", "CURRENT_DATE()"]
BeginLoading.import_file_to_table(f"""TESTS.EmpLoad4""", ssc_define_columns, ssc_define_file, ssc_begin_loading_columns, ssc_begin_loading_values, ssc_set_record)
snowconvert.helpers.quit_application()
if __name__ == "__main__":
main()
Intern erstellt die Funktion import_file_to_table einen temporären Stagingbereich und legt die lokale Datei in diesem Stagingbereich ab, um sie in die angegebene Tabelle zu laden. Es kann jedoch sein, dass die Datei bereits bei einem der von Snowflake unterstützten Cloud-Anbieter gespeichert ist:
| Stage | Input Data Place Holder |
|---|---|
| Stage | Input Data Place Holder |
| Internal stage | @my_int_stage |
| External stage | @my_int_stage/path/file.csv |
| Amazon S3 bucket | s3://mybucket/data/files |
| Google Cloud Storage | gcs://mybucket/data/files |
| Microsoft Azure | azure://myaccount.blob.core.windows.net/mycontainer/data/files |
Sollte dies der Fall sein, fügen Sie bitte manuell den zusätzlichen Parameter input_data_place_holder="<cloud_provider_path>" in der Funktion import_file_to_table hinzu. Beispiel:
BeginLoading.import_file_to_table(
f"""TESTS.EmpLoad4""",
ssc_define_columns,
ssc_define_file,
ssc_begin_loading_columns,
ssc_begin_loading_values,
ssc_set_record,
input_data_place_holder="s3://mybucket/data/files")
END LOADING¶
Der Befehl END LOADING ist auskommentiert, da er für die Transformation von BEGIN LOADING nicht notwendig ist.
Teradata (FastLoad)
END LOADING;
Snowflake (Python)
#*** 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()
#** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. END LOADING **
#END LOADING
snowconvert.helpers.quit_application()
if __name__ == "__main__":
main()
Bekannte Probleme¶
1. BINARY- und TEXT-Schlüsselwortangabe nicht unterstützt
Die Schlüsselwortangaben BINARY und TEXT für den Befehl SET RECORD werden noch nicht unterstützt.
2. Nur die Basis-Spezifikation für VARTEXT wird unterstützt
Zusätzliche Angaben für SET RECORD VARTEXT wie TRIM oder QUOTE werden noch nicht unterstützt.
Zugehörige EWIs¶
SSC-FDM-0007: Element mit fehlenden Abhängigkeiten.
SSC-FDM-0027: Nächste Anweisung entfernt, da sie in SnowFlake nicht anwendbar ist.
SSC-EWI-0021: Nicht unterstützt.
SSC-FDM-TD0022: Shell-Variablen gefunden; die Ausführung dieses Codes muss in einem Shell-Skript erfolgen.