SnowConvert AI - Teradata - FLOAD¶
Teradata FLOAD파일을 Python으로 변환하기 위한 변환 참조
Teradata FastLoad 는 Teradata 데이터베이스의 빈 테이블에 대량의 데이터를 빠르게 로딩하기 위한 명령 기반 유틸리티입니다.
Snowflake에서 Teradata의 FastLoad 기능을 시뮬레이션하기 위해 FastLoad 파일과 명령은 BTEQ 및 MultiLoad 스크립트에 대해 수행된 변환과 유사하게 Python 코드로 변환됩니다. 생성된 코드는 Snowflake의 FastLoad 문을 시뮬레이션하는 데 필요한 함수가 포함된 snowconvert.helpers라는 Snowflake Python 프로젝트를 사용합니다.
FastLoad 명령 변환¶
대부분의 FastLoad 명령 은 Snowflake에서 관련이 없는 것으로 간주되며, 이러한 명령은 설명이 생략되어 있습니다. 아래는 FastLoad 명령의 요약 목록과 해당 명령이 Snowflake로 변환된 상태입니다.
Teradata FastLoad 명령 |
변환 상태 |
참고 |
|---|---|---|
AXSMOD |
설명 추가됨 |
|
변환됨 |
관련 INSERT 문에서 변환이 발생하므로 노드에 설명이 생략되어 있습니다. |
|
CLEAR |
설명 추가됨 |
|
DATEFORM |
설명 추가됨 |
|
변환됨 |
|
|
변환됨 |
BEGIN LOADING 의 변환에 필요하지 않으므로 설명이 생략되었습니다. |
|
ERRLIMIT |
설명 추가됨 |
|
HELP |
설명 추가됨 |
|
HELP TABLE |
설명 추가됨 |
|
변환됨 |
BEGIN LOADING 의 일부로 변환됨. |
|
LOGDATA |
설명 추가됨 |
|
LOGMECH |
설명 추가됨 |
|
LOGOFF |
설명 추가됨 |
|
LOGON |
설명 추가됨 |
|
NOTIFY |
설명 추가됨 |
|
OS |
설명 추가됨 |
|
QUIT |
설명 추가됨 |
|
RECORD |
설명 추가됨 |
|
RUN |
설명 추가됨 |
|
SESSIONS |
설명 추가됨 |
|
변환됨 |
|
|
SET SESSION CHARSET |
설명 추가됨 |
|
SHOW |
설명 추가됨 |
|
SHOW VERSIONS |
설명 추가됨 |
|
SLEEP |
설명 추가됨 |
|
TENACITY |
설명 추가됨 |
|
기본 변환¶
이러한 문에 대한 ConversionTool 의 기본 동작은 문을 설명하는 것입니다. 예:
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()
그럼에도 불구하고 Snowflake에서 의도한 대로 작동하기 위해 특정 Python 문으로 변환해야 하는 몇 가지 예외가 있습니다.
임베디드 SQL¶
FastLoad 스크립트는 동일한 파일 내에서 Teradata 문을 지원합니다. 이러한 문의 대부분은 일부 예외를 제외하고 BTEQ 파일에 있는 것처럼 변환됩니다.
오류 테이블을 삭제하면 FastLoad 파일 안에 있는 경우 설명이 추가됩니다.
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()
Large 예제¶
다양한 명령에 대해 위에 표시된 변환이 주어지면 다음 예를 고려하십시오.
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()
이 설명서와 관련하여 추가 질문이 있는 경우 snowconvert-support@snowflake.com으로 이메일을 보내주세요.
Known Issues¶
문제가 발견되지 않았습니다.
BEGIN LOADING¶
BEGIN LOADING 명령에 대한 변환은 동작을 올바르게 시뮬레이션하기 위해 DEFINE, INSERT 및 (선택 사항) SET RECORD 명령이 필요한 다중 부분 변환입니다.
이 변환에 대한 자세한 설명은 다음 하위 섹션에서 확인할 수 있습니다.
SET RECORD¶
위에서 설명한 것처럼 이 명령은 BEGIN LOADING 의 변환에 필요하지 않습니다. 찾을 수 없는 경우 기본 구분 기호는 ‘,’(쉼표)로 설정됩니다. 그렇지 않으면 정의된 구분 기호가 사용됩니다. 이 값은 ssc_set_record 변수에 저장됩니다.
현재는 SET RECORD VARTEXT, SET RECORD FORMATTED 및 SET RECORD UNFORMATTED 만 지원됩니다. BINARY 및 TEXT 키워드 사양의 경우 EWI 오류가 대신 표시됩니다.
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¶
DEFINE 명령에 대한 변환은 각각 열 정의 값과 BEGIN LOADING 변환에 사용할 파일 경로로 ssc_define_columns 및 ssc_define_file 변수를 설정합니다.
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¶
BEGIN LOADING 명령은 변환에 대한 관련 정보가 관련 INSERT 문에 있으므로 설명이 생략되어 있습니다.
ERRORFILES, NODROP, CHECKPOINT, INDICATORS, DATAENCRYPTION 사양은 변환에 필요하지 않으므로 설명이 생략되었습니다.
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¶
연결된 INSERT 문에 대한 변환은 로딩할 값을 삽입할 순서를 결정하는 데 사용되는 ssc_begin_loading_columns 및 ssc_begin_loading_values 변수에 대한 값을 설정합니다.
마지막으로 이러한 변수와 위 섹션에서 설명한 변수는 SnowConvert.Helpers 모듈의 BeginLoading.import_file_to_table 함수 부분을 호출하는 데 사용됩니다. 이 함수는 전체 FastLoad BEGIN LOADING 프로세스의 동작을 시뮬레이션합니다. 이 함수에 대해 자세히 알아보려면 여기를 확인하십시오.
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()
내부적으로 import_file_to_table 함수는 임시 스테이지를 생성하고 해당 스테이지에 로컬 파일을 넣어 지정된 테이블에 로딩합니다. 그러나 파일이 이미 Snowflake 에서 지원하는 클라우드 공급자에 저장되어 있을 수 있습니다.
| 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 |
이 경우 import_file_to_table 함수에 input_data_place_holder="<cloud_provider_path>" 매개 변수를 수동으로 추가하십시오. 예:
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¶
END LOADING 명령은 BEGIN LOADING 의 변환에 필요하지 않으므로 설명이 생략되었습니다.
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()
Known Issues¶
1. BINARY 및 TEXT 키워드 사양은 지원되지 않습니다
SET RECORD 명령에 대한 BINARY 및 TEXT 키워드 사양은 아직 지원되지 않습니다.
2. VARTEXT 의 기본 사양만 지원됩니다
TRIM 또는 QUOTE 등의 추가 사양(SET RECORD VARTEXT)은 아직 지원되지 않습니다.
관련 EWIs¶
SSC-FDM-0007: 종속성이 누락된 요소입니다.
SSC-FDM-0027: SnowFlake에서 사용할 수 없는 다음 문이 제거되었습니다.
SSC-EWI-0021: 지원 안 됨.
SSC-FDM-TD0022: 셸 변수가 발견됨, 셸 스크립트에서 이 코드를 실행해야 함.