SnowConvert: Teradata Scripts - Python 변환 참조

다음 페이지에서 특정 항목에 대한 자세한 정보를 찾아보십시오.

  • BTEQ, 기본 Teradata 쿼리 구문에 대한 변환 참조를 살펴보십시오.

  • FastLoad, FastLoad 구문에 대한 변환 참조를 살펴보십시오.

  • MultiLoad, MultiLoad 구문에 대한 변환 참조를 살펴보십시오.

  • TPT, TPT 구문에 대한 변환 참조를 살펴보십시오.

TPT

TPT 문 변환

다른 Teradata 스크립트 언어와 마찬가지로 모든 TPT 문은 Python 코드로 변환되고 있습니다. 다음은 이미 지원되는 변환의 몇 가지 예입니다.

작업 헤더 변환 정의하기

작업 문은 연산자, 스키마 정의 및 단계와 같은 모든 문이 포함된 Python 클래스로 변환됩니다.

소스 코드

 /* Some comments on the job  */
DEFINE JOB LOADJOB
DESCRIPTION 'LOAD AC_SCHEMA TABLE FROM A FILE'
JobBody
Copy

변환된 코드

 ## Some comments on the job
class LOADJOB:
    # DESCRIPTION 'LOAD AC_SCHEMA TABLE FROM A FILE'
    JobBody
Copy

스키마 변환 정의하기

스키마 문은 작업 문에 대해 생성된 클래스의 특성으로 변환됩니다.

소스 코드

 DEFINE SCHEMA DCS_SCHEMA
DESCRIPTION 'DCS DATA'
(
PNRHEADER_ID   PERIOD(DATE),
PNRLOCPERIOD   PERIOD(TIMESTAMP(0)),
CRTDATE        CLOB,
REQTYP         JSON(100000),
seqno          INTEGER,
resdata        INTEGER
);
Copy

변환된 코드

 class JOBNAME:
    DCS_SCHEMA = """(
    PNRHEADER_ID VARCHAR(24),
    PNRLOCPERIOD VARCHAR(58),
    CRTDATE VARCHAR /*** MSC-WARNING - SSC-FDM-TD0002 - COLUMN CONVERTED FROM CLOB DATA TYPE ***/,
    REQTYP VARIANT,
    seqno INTEGER,
    resdata INTEGER,
    );"""
Copy

연산자 변환 정의하기

연산자는 작업에 대해 생성된 클래스 내부에서 Python 함수로 변환됩니다. 제공된 예제는 SnowConvert 가 현재 지원하는 연산자입니다

DDL 연산자

DDL 연산자 소스 코드

 DEFINE OPERATOR DDL_OPERATOR()
DESCRIPTION 'TERADATA PARALLEL TRANSPORTER DDL OPERATOR'
TYPE DDL
ATTRIBUTES
(
  VARCHAR PrivateLogName ,
  VARCHAR TdpId          = @MyTdpId,
  VARCHAR UserName       = @MyUserName,
  VARCHAR UserPassword   = 'SomePassWord',
  VARCHAR AccountID,
  VARCHAR ErrorList      = ['3807','2580']
);
Copy

변환된 코드

 class JobName:
    def DDL_OPERATOR(self):
        #'TERADATA PARALLEL TRANSPORTER DDL OPERATOR'
        global args
        self.con = log_on(user = args.MyUserName, password = 'SomePassWord')
Copy
UPDATE 연산자

UPDATE 연산자 소스 코드

 DEFINE OPERATOR LOAD_OPERATOR()
DESCRIPTION 'TERADATA PARALLEL TRANSPORTER LOAD OPERATOR'
TYPE UPDATE
SCHEMA AC_MASTER_SCHEMA
ATTRIBUTES
(
    VARCHAR PrivateLogName ,
    INTEGER MaxSessions       =  32,
    INTEGER MinSessions       =  1,
    VARCHAR TargetTable       = '&TARGET_TABLE',
    VARCHAR TdpId             = @MyTdpId,
    VARCHAR UserName          = @MyUserName,
    VARCHAR UserPassword      = @MyPassword,
    VARCHAR AccountId,
    VARCHAR ErrorTable1       = '&LOG_DB_NAME.ERR1',
    VARCHAR ErrorTable2       = '&LOG_DB_NAME.ERR2',
    VARCHAR LogTable          = '&LOG_DB_NAME.LOG_TABLE'
);
Copy

변환된 코드

 class JobName:
    def LOAD_OPERATOR(self, query):
        #'TERADATA PARALLEL TRANSPORTER LOAD OPERATOR'
        #USES SCHEMA AC_MASTER_SCHEMA
        operator_name = "LOAD_OPERATOR"
        return query
Copy
DATA CONNECTOR PRODUCER 연산자

Data Connector Producer 연산자 소스 코드

 DEFINE OPERATOR FILE_READER()
DESCRIPTION 'TERADATA PARALLEL TRANSPORTER DATA CONNECTOR OPERATOR'
TYPE DATACONNECTOR PRODUCER
SCHEMA AC_MASTER_SCHEMA
ATTRIBUTES
(
  VARCHAR PrivateLogName ,
  VARCHAR DirectoryPath   = '&INPUTFILEPATH' ,
  VARCHAR FileName        = '&INPUTTEXTFILE' ,
  VARCHAR Format          = 'delimited',
  VARCHAR OpenMode        = 'Read',
  VARCHAR TextDelimiter     = '~',
  VARCHAR IndicatorMode   = 'N'
);
Copy

변환된 코드

 class JobName:
    def FILE_READER(self):
        #'TERADATA PARALLEL TRANSPORTER DATA CONNECTOR OPERATOR'
        #USES SCHEMA AC_MASTER_SCHEMA
        operator_name = "FILE_READER"
        stage_name = f"{self.jobname}_{operator_name}"
        format_name = f"{self.jobname}_{operator_name}_FILEFORMAT"
        exec(f"""CREATE OR REPLACE FILE FORMAT {format_name} TYPE = 'CSV' FIELD_DELIMITER = '~' TRIM_SPACE = TRUE SKIP_HEADER = 0""")
        exec(f"""CREATE STAGE IF NOT EXISTS {self.jobname}_STAGE""")
        exec(f"""PUT file://{INPUTFILEPATH}/{INPUTTEXTFILE} @{stage_name} OVERWRITE = TRUE AUTO_COMPRESS = FALSE;""")
        temp_table_name = f"{self.jobname}_{operator_name}_TEMP"
        exec(f"""DROP TABLE IF EXISTS {temp_table_name}""")
        exec(f"""CREATE TEMPORARY TABLE {temp_table_name} {self.AC_MASTER_SCHEMA}""")
        exec(f"""COPY INTO {temp_table_name} FROM @{stage_name} FILE_FORMAT = (format_name = '{format_name}')""")
        return temp_table_name
Copy

단계 변환 정의

작업을 위해 생성된 클래스 내에서 단계가 너무 Python 함수로 변환되면 변환된 코드의 주요 함수에서 호출됩니다.

스텝 소스 코드

 STEP setup_tables
(
  APPLY
  ('DELETE FROM  &STAGE_DB_NAME.EMS_AC_MASTER_STG;')
   TO OPERATOR (DDL_OPERATOR() );
);

STEP stLOAD_FILE_NAME
(
  APPLY
  ('INSERT INTO CRASHDUMPS.EMP_NAME
  (EMP_NAME, EMP_YEARS, EMP_TEAM)
  VALUES
  (:EMP_NAME, :EMP_YEARS, :EMP_TEAM);')
  TO OPERATOR (ol_EMP_NAME() [1])
  SELECT * FROM OPERATOR(op_EMP_NAME);
);
Copy

변환된 코드

 def setup_tables(self):
    self.DDL_OPERATOR()
    exec(f"""DELETE FROM DATABASE1.{STAGE_DB_NAME}.EMS_AC_MASTER_STG""")

def stLOAD_FILE_NAME(self):
    exec(f"""INSERT INTO DATABASE1.CRASHDUMPS.EMP_NAME (EMP_NAME, EMP_YEARS, EMP_TEAM)
SELECT EMP_NAME, EMP_YEARS, EMP_TEAM
FROM (
{self.ol_EMP_NAME('SELECT * FROM ' + self.op_EMP_NAME() )})""")
Copy

주요 함수

메인 함수는 항상 모든 스크립트 언어에 대해 생성되며, TPT 의 경우 메인 함수에는 작업 클래스의 인스턴스와 작업의 단계에 대한 호출이 포함됩니다

주요 함수 샘플 코드

 def main():
  _LOADJOB = LOADJOB()
  _LOADJOB.setup_tables()
  _LOADJOB.stLOAD_FILE_NAME()
  snowconvert.helpers.quit_application()
Copy

MLOAD

Teradata MultiLoad 는 Teradata 데이터베이스의 여러 테이블 및 뷰에 대한 빠른 대용량 유지 관리를 위한 명령 기반 유틸리티입니다.

MultiLoad 파일 및 명령은 BTEQ 및 FastLoad 스크립트에 대해 수행된 변환과 유사하게 Python 코드로 변환되어, Snowflake에서 Teradata의 MultiLoad 기능을 시뮬레이션합니다. 생성된 코드는 Snowflake의 MultiLoad 문을 시뮬레이션하는 데 필요한 필수 함수가 포함된 snowconvert.helpers라는 Snowflake Python 프로젝트를 사용합니다.

MultiLoad 명령 변환

대부분의 MultiLoad 명령 은 Snowflake에서 관련이 없는 것으로 간주되며, 이러한 명령은 설명이 생략되어 있습니다. 아래는 MultiLoad 명령의 요약 목록과 해당 명령이 Snowflake로 변환된 상태입니다.

CommandsTransformation StatusNote
ACCEPTCommented
BEGIN MLOADTransformed​​The node is commented out since the transformation occurs in other related statements instead.
BEGIN DELETE MLOADCommented
DATEFORMCommented
DELETEPartially transformedCheck known issues.​
DISPLAYCommented
DML LABELTransformed
END MLOADTransformed​​Commented out since is not necessary for the transformation of the BEGIN MLOAD.
EOCCommented
FIELDTransformed
FILLERTransformedThis command needs to be with a FIELD and LAYOUT command to be converted.
IF, ELSE, and ENDIFCommented
IMPORTTransformed
INSERTTransformedThis is taken as a Teradata Statement, so it doesn't appear in this chapter.
LAYOUTTransformedThis command needs to be with a FIELD and FILLER command to be converted.
LOGDATACommented
LOGMECHCommented
LOGOFFCommented
LOGONCommented
LOGTABLECommented
PAUSE ACQUISITIONCommented
RELEASE MLOADCommented
ROUTE MESSAGESCommented
RUN FILECommented
SETCommented
SYSTEMCommented
TABLECommented
UPDATETransformedThis is taken as a Teradata Statement, so it doesn't appear in this chapter.
VERSIONCommented

그러나 몇 가지 예외적인 명령이 있는데, 이 명령이 Snowflake에서 의도한 대로 작동하려면 Python 전용 코드로 변환해야 합니다. 이 섹션을 참조하십시오.

이 설명서와 관련하여 추가 질문이 있는 경우 snowconvert-support@Snowflake.com으로 이메일을 보내주시기 바랍니다.

BEGIN MLOAD

.BEGIN MLOAD 명령에 대한 변환은 동작을 올바르게 시뮬레이션하려면 .LAYOUT, .FIELD, .FILLER, .DMLLABEL, .IMPORT 명령이 필요한 여러 부분으로 구성된 변환입니다.

이 변환에 대한 자세한 설명은 다음 하위 섹션에서 확인할 수 있습니다.

.LAYOUT, .FIELD 및 .FILLER

.LAYOUT, .FIELD, .FILLER 명령에 대한 변환은 이 레이아웃에서 IMPORT 의 향후 함수 호출에 사용될 변수 정의를 생성합니다.

Teradata (MultiLoad)

 .LAYOUT INFILE_LAYOUT;
.FIELD TABLE_ID        * INTEGER;
.FIELD TABLE_DESCR     * CHAR(8);
.FILLER COL1           * CHAR(1);
.FIELD TABLE_NBR       * SMALLINT;
.FIELD TABLE_SOMEFIELD * SMALLINT;
Copy

Snowflake (Python)

 #*** Generated code is based on the SnowConvert 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()
  INFILE_LAYOUT_TableName = "INFILE_LAYOUT_TEMP_TABLE"
  INFILE_LAYOUT_Columns = """TABLE_ID INTEGER, 
TABLE_DESCR CHAR(8), 
COL1 CHAR(1), 
TABLE_NBR SMALLINT, 
TABLE_SOMEFIELD SMALLINT"""
  INFILE_LAYOUT_Conditions = """TABLE_ID AS TABLE_ID, TABLE_DESCR AS TABLE_DESCR, COL1 AS COL1, TABLE_NBR AS TABLE_NBR, TABLE_SOMEFIELD AS TABLE_SOMEFIELD"""
  snowconvert.helpers.quit_application()

if __name__ == "__main__":
  main()
Copy

.DML LABEL

.DML LABEL 명령에 대한 변환은 레이블 정의 뒤에 문을 포함하는 함수를 생성합니다. .DML LABEL 명령 뒤에는 일반적으로 Insert, Update 또는 Delete 가 옵니다.

Teradata (MultiLoad)

 -- Example of .DML LABEL with INSERT:
.DML LABEL INSERT_TABLE;                                                                                    
INSERT INTO mydb.mytable( TABLE_ID,TABLE_DESCR,TABLE_NBR ) VALUES( :TABLE_ID,:TABLE_DESCR,:TABLE_NBR );

-- Example of .DML LABEL with DELETE:
.DML LABEL DELETE_TABLE;              
DELETE FROM Employee WHERE EmpNo  = :EmpNo;

-- Example of .DML LABEL with an UPDATE, followed by an INSERT:
.DML LABEL UPSERT_TABLE DO INSERT FOR MISSING UPDATE ROWS;
UPDATE   mydb.mytable SET TABLE_ID = :TABLE_ID WHERE TABLE_DESCR = :somedescription
INSERT INTO mydb.mytable(TABLE_ID, TABLE_DESCR, TABLE_NBR) VALUES(:TABLE_ID, :TABLE_DESCR, :TABLE_NBR );
Copy

Snowflake (Python)

 #*** Generated code is based on the SnowConvert 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()
  def INSERT_TABLE(tempTableName, queryConditions = ""):
    exec(f"""INSERT INTO mydb.mytable (TABLE_ID, TABLE_DESCR, TABLE_NBR)
SELECT
   :TABLE_ID,
   :TABLE_DESCR,
   :TABLE_NBR
FROM {tempTableName} SRC {queryConditions}""")
  exec("""
    DELETE FROM
      Employee
    WHERE
      EmpNo = :EmpNo
    """)
  def UPSERT_TABLE(tempTableName, queryConditions = ""):
    exec(f"""MERGE INTO mydb.mytable TGT USING (SELECT * FROM {tempTableName} {queryConditions}) SRC ON TABLE_DESCR = :somedescription
WHEN MATCHED THEN UPDATE SET
   TABLE_ID = :TABLE_ID
WHEN NOT MATCHED THEN INSERT (TABLE_ID, TABLE_DESCR, TABLE_NBR)
VALUES (:TABLE_ID, :TABLE_DESCR, :TABLE_NBR)""")
  snowconvert.helpers.quit_application()

if __name__ == "__main__":
  main()
Copy

.IMPORT

.IMPORT 명령의 변환은 파일에서 임시 테이블로 데이터를 로딩하기 위해 import_file_to_temptable 헬퍼에 대한 호출을 생성합니다. 그러면 원래 가져오기에 사용되는 모든 APPLY 레이블에 대한 호출이 생성됩니다. 마지막으로 INSERT 레이블에 대한 호출은 쿼리 매개 변수로 변환되며 선택적으로 쿼리 조건을 가질 수 있습니다.

Teradata (MultiLoad)

 .IMPORT INFILE INFILE_FILENAME
    LAYOUT INFILE_LAYOUT
    APPLY INSERT_TABLE
    APPLY UPSERT_TABLE
    Apply DELETE_TABLE;
Copy

Snowflake (Python)

 #*** Generated code is based on the SnowConvert 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 **
  #.IMPORT INFILE INFILE_FILENAME LAYOUT INFILE_LAYOUT APPLY INSERT_TABLE APPLY UPSERT_TABLE Apply DELETE_TABLE
   
  snowconvert.helpers.import_file_to_temptable(fr"INFILE_FILENAME", INFILE_LAYOUT_TableName, INFILE_LAYOUT_Columns, INFILE_LAYOUT_Conditions, ',')
  INSERT_TABLE(INFILE_LAYOUT_TableName)
  UPSERT_TABLE(INFILE_LAYOUT_TableName)
  DELETE_TABLE(INFILE_LAYOUT_TableName)
  exec(f"""DROP TABLE {INFILE_LAYOUT_TableName}""")
  snowconvert.helpers.quit_application()

if __name__ == "__main__":
  main()
Copy

Large 예제

다양한 명령에 대해 위에 표시된 변환이 주어지면 다음 예를 고려하십시오.

이 입력 데이터로:

 id,name,age
1,John,25
2,Maria,29
3,Carlos,31
4,Mike,40
5,Laura,27
Copy

Teradata (MultiLoad)

 .begin import mload
        tables
	mySampleTable1
sessions 20
ampcheck none;

.layout myLayOut;
 .field ID * VARCHAR(2) NULLIF ID = '1';
 .field NAME * VARCHAR(25);
 .field AGE * VARCHAR(10);
.dml label insert_data;

INSERT INTO mySampleTable1
 ( 
    ID,
    NAME,
    AGE	
 )
VALUES
 (
    :ID,
    SUBSTRING(:NAME FROM 2),
    :AGE
 );

.import infile sampleData.txt
layout myLayOut
apply insert_data

.end mload;
.logoff;
Copy
ROWIDNAMEAGE
1NULLohn25
22aria29
33arlos31
44ike40
55aura27

Snowflake (Python)

 #*** Generated code is based on the SnowConvert 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.  **
  #.begin import mload tables mySampleTable1 sessions 20 ampcheck none
   
  myLayOut_TableName = "myLayOut_TEMP_TABLE"
  myLayOut_Columns = """ID VARCHAR(2), 
NAME VARCHAR(25), 
AGE VARCHAR(10)"""
  myLayOut_Conditions = """CASE
   WHEN ID = '1'
      THEN NULL
   ELSE ID
END AS ID, NAME AS NAME, AGE AS AGE"""
  def insert_data(tempTableName, queryConditions = ""):
    exec(f"""INSERT INTO mySampleTable1 (ID, NAME, AGE)
SELECT
   SRC.ID,
   SUBSTRING(SRC.NAME, 2),
   SRC.AGE
FROM {tempTableName} SRC {queryConditions}""")
  #** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW **
  #.import infile sampleData.txt layout myLayOut apply insert_data
   
  snowconvert.helpers.import_file_to_temptable(fr"sampleData.txt", myLayOut_TableName, myLayOut_Columns, myLayOut_Conditions, ',')
  insert_data(myLayOut_TableName)
  exec(f"""DROP TABLE {myLayOut_TableName}""")

  if con is not None:
    con.close()
    con = None
  snowconvert.helpers.quit_application()

if __name__ == "__main__":
  main()
Copy
ROWIDNAMEAGE
1NULLohn25
22aria29
33arlos31
44ike40
55aura27

Known Issues

1. 삭제 문은 부분적으로 지원됩니다

DELETE 문은 LAYOUT 정의된 열을 가리키는 경우 where 조건이 발견되면 올바르게 변환되지 않으므로 부분적으로 지원됩니다.

아래 예제에서 :EmpNoLAYOUT 정의된 열을 가리키고 있습니다. 그러나 변환은 이를 고려하지 않으므로 코드가 존재하지 않는 열을 참조하게 됩니다.

  exec("""
    DELETE FROM
      Employee
    WHERE
      EmpNo = :EmpNo
    """)

Copy

이 설명서와 관련하여 추가 질문이 있는 경우 snowconvert-support@Snowflake.com으로 이메일을 보내주시기 바랍니다.

SnowConvert 스크립트 헬퍼

SnowConvert 는 모든 Teradata SQL 또는 스크립트(BTEQ, FastLoad, MultiLoad, TPump)를 가져와 기능적으로 동등한 Snowflake SQL, JavaScript 에 내장된 Snowflake SQL 및 Python으로 변환할 수 있습니다. SnowConvert 의 모든 출력 Python 코드는 이러한 헬퍼 클래스의 함수를 호출하여 변환을 완료하고 기능적으로 동등한 출력을 Snowflake에서 생성합니다.

또한 Snowflake 계정에 연결하고 SnowConvert 에서 생성한 출력 Python 코드를 실행하기 위해 Python용 Snowflake Connector 가 호출됩니다.

패키지의 최신 버전 정보는 여기 에서 확인할 수 있습니다.

참고

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

출력

아래와 같은 출력이 표시됩니다.

The `log_on`function parameters ('user', 'password', 'account', 'database', 'warehouse', 'role', 'token') should be defined by the user.
Copy
 #*** Generated code is based on the SnowConvert 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에서 패키지를 설치하는 데 익숙하지 않은 경우 다음 페이지(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이 실행될 때 SNOW_USER, SNOW_PASSWORD, SNOW_ACCOUNT, SNOW_DATABASE, SNOW_WAREHOUSE, SNOW_ROLE, SNOW_QUERYTAG, SNOWAUTHENTICATOR 및 SNOWTOKEN 의 순서 제한이 없는 명명된 매개 변수로, –param-VARNAME=VALUE 와 같이 전달됩니다.

  • 환경 변수로 SNOW_USER, SNOW_PASSWORD, SNOW_ACCOUNT, SNOW_DATABASE, SNOW_WAREHOUSE, SNOW_ROLE, SNOW_QUERYTAG, SNOWAUTHENTICATOR 및 SNOWTOKEN 라는 이름으로 Python 실행 전에 설정합니다.

지정된 이전 순서는 우선순위를 결정하는 방식입니다.

함수 호출의 매개 변수

다음과 같이 함수 호출에서 위치 매개 변수로 설정할 수 있습니다.

    .....
   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
명명된 매개 변수

명명된 매개 변수는 다음과 같이 명령줄에서 원하는 순서대로 설정할 수 있습니다(가독성을 위해 한 라인로 표시하고 여러 라인로 표시).

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 파일을 실행해야 합니다.

 SET SNOW_AUTHENTICATOR=VALUE
SET SNOW_USER=myuser
SET SNOW_PASSWORD=mypassword
python sample_BTEQ.py
Copy
 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(package)를 클릭하면 다음과 같은 내용이 표시됩니다.

Snowconvert 도움말 설명서 홈페이지

모듈 헬퍼를 클릭하면 다음과 유사한 화면이 표시됩니다.

헬퍼 모듈 홈페이지

그런 다음 모듈의 함수와 클래스를 스크롤할 수 있습니다.

함수 설명서

알려진 문제

문제가 발견되지 않았습니다.

관련 EWIs

관련 EWIs 없음.

기술 설명서

함수

프로젝트에 정의된 모든 함수.

액세스

**`access`**`(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True)`
Copy
설명:

경로에 대한 액세스를 테스트하려면 실제 UID/GID를 사용하십시오

dir_fd, effective_ids, and follow_symlinks는 플랫폼에서 구현되지 않을 수 있습니다. 사용할 수 없는 경우 이를 사용하면 NotImplementedError 가 표시됩니다.

대부분의 작업은 유효한 UID/GID를 사용하므로 이 루틴은 호출하는 사용자가 경로에 대해 지정된 액세스 권한을 가지고 있는지 테스트하기 위해 suid/sgid 환경에서 사용할 수 있습니다.

매개 변수:
  • path, 테스트할 경로; 문자열, 바이트 또는 경로와 유사한 오브젝트 일 수 있습니다

  • 모드, 운영 체제 모드 비트필드. 존재를 테스트할 OK 또는 R_OK, W_OK 및 X_OK의 포함 OR 일 수 있음

  • dir_fd, 없음이 아니라면 디렉터리에 열려있는 파일 설명자여야 하며, 경로는 상대적이어야 합니다. 그러면 경로는 해당 디렉터리에 상대적입니다

  • effective_ids, true이면 액세스는 실제 uid/gid 대신 유효 uid/gid를 사용합니다

  • follow_symlinks, false이고 경로의 마지막 요소가 심볼릭 링크인 경우 액세스는 링크가 가리키는 파일 대신 심볼릭 링크 자체를 검사합니다

at_exit_helpers

**`at_exit_helpers`**`()`
Copy
설명:

스크립트 실행 종료 시 실행됩니다.

colored

**`colored`**`(text, color='blue')`
Copy
설명:

지정된 색상에서 컬러 텍스트를 인쇄합니다.

매개 변수:
  • text , 인쇄할 텍스트

  • color="blue" , 인쇄할 색상

configure_log

**`configure_log`**`(configuration_path)`
Copy
설명:

Snowflake 연결에서 데이터 관련 실행에 대해 수행할 로깅을 구성합니다. 로그 파일의 이름은 기본적으로 ‘Snowflake_python_connector.log’입니다.

매개 변수:

  • configuration_path , 로깅에 필요한 모든 설정이 포함된 파일의 구성 경로입니다

drop_transient_table

**`drop_transient_table`**`(tempTableName, con=None)`
Copy
설명:

지정된 이름의 일시적 테이블을 삭제합니다

매개 변수:

  • tempTableName , 임시 테이블의 이름

  • con=None , 사용할 연결, None이 전달되면 마지막으로 수행된 연결을 사용합니다

exception_hook

**`exception_hook`**`(exctype, value, tback)`
Copy
설명:

매개 변수:

  • exctype

  • tback

exec

**`exec`**`(sql_string, using=None, con=None)`
Copy
설명:

마지막 연결을 사용하여 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)`
Copy
설명:

파일의 내용을 읽고 지정된 연결에 포함된 SQL 문을 실행합니다.

매개 변수:

  • filename , 읽고 실행할 파일 이름

  • con=None , 사용할 연결, None이 전달되면 마지막으로 수행된 연결을 사용합니다

exec_os

**`exec_os`**`(command)`
Copy
설명:

연산자 시스템에서 명령을 실행합니다.

exec_sql_statement

**`exec_sql_statement`**`(sql_string, con, using=None)`
Copy
설명:

전달된 연결에서 선택적 인자와 함께 SQL 문을 실행합니다.

매개 변수:

  • sql_string , 실행할 문자열이 포함된 sql입니다

  • con , 사용할 연결

  • using , sql 실행에 사용할 선택적 매개 변수

expands\using_params**

**`expands_using_params`**`(statement, params)`
Copy
설명:

매개 변수와 함께 전달된 문을 확장합니다.

매개 변수:

  • statement , 실행할 문자열을 포함하는 sql

  • params , sql 문의 매개 변수

expandvar

**`expandvar`**`(str)`
Copy
설명:

전달된 문자열에서 변수를 확장합니다

매개 변수:

  • str , 변수와 함께 확장할 문자열입니다

expandvars

**`expandvars`**`(path, params, skip_escaped=False)`
Copy
설명:

_var 및 ${var} 형식의 환경 변수를 확장합니다. 매개 변수 ‘skip_escaped’가 true이면 이스케이프된 모든 변수 참조(즉, 백슬래시 앞에 오는)를 건너뜁니다. 알 수 없는 변수는 ‘기본값’으로 설정됩니다. ‘default’ 값이 없음이면 변경되지 않은 상태로 유지됩니다

매개 변수:

  • path ,

  • params ,

  • skip_escaped=False ,

FAST LOAD

**`fast_load`**`(target_schema, filepath, stagename, target_table_name, con=None)`
Copy
설명:

전달된 매개 변수 target_schema, filepath, stagename and target_table_name을 사용하여 빠른 로딩을 실행합니다.

매개 변수:

  • target_schema , 빠른 로딩에 사용할 스키마의 이름입니다

  • filepath , 테이블에 로딩할 파일 이름 경로

  • target_table_name , 데이터가 로딩될 테이블의 이름입니다

  • con=None , 사용할 연결, None이 전달되면 마지막으로 수행된 연결을 사용합니다

file\exists_and_readable**

**`file_exists_and_readable`**`(filename)`
Copy
설명:

매개 변수:

  • filename ,

get\argkey**

**`get_argkey`**`(astr)`
Copy
설명:

전달된 문자열에서 인자 키 값을 가져옵니다. 문자열 ‘–param-‘로 시작해야 합니다

매개 변수:

  • astr , 사용할 인자 문자열입니다. 문자열은 –param-column=32와 유사한 값을 가져야 하며 반환 값은 ‘32’가 됩니다

get\error_position**

**`get_error_position`**`()`
Copy
설명:

생성된 오류의 스택 정보를 사용하여 파일에서 오류 위치를 가져옵니다.

get\from_vars_or_args_or_environment**

**`get_from_vars_or_args_or_environment`**`(arg_pos, variable_name, vars, args)`
Copy
설명:

지정된 위치에서 인자를 가져오거나 테이블 변수에서 값을 가져오거나 전달된 환경 변수 이름을 가져옵니다.

매개 변수:

  • arg_pos , 인자 매개 변수에서 사용할 인자 위치

  • variable_name , 구할 변수의 이름입니다

  • vars , 변수 이름과 값이 포함된 해시

  • args , 인자 배열 매개 변수

import\data_to_temptable**

**`import_data_to_temptable`**`(tempTableName, inputDataPlaceholder, con)`
Copy
설명:

입력 데이터 플레이스 홀더를 사용하여 임시 테이블로 데이터를 가져옵니다.

매개 변수:

  • tempTableName, 임시 테이블 이름입니다.

  • inputDataPlaceholder, 입력된 플레이스 홀더는 Snowflake 데이터베이스의 스테이지입니다

  • con, 사용할 연결

import\file**

**`import_file`**`(filename, separator=' ')`
Copy
설명:

전달된 파일 이름을 선택적 구분 기호와 함께 가져옵니다.

매개 변수:

  • filename, 가져올 파일 이름 경로

  • separator=' ', 선택적 구분자

import\file_to_temptable**

**`import_file_to_temptable`**`(filename, tempTableName, columnDefinition)`
Copy
설명:

임시 테이블로 전달된 파일을 가져옵니다. 접두사가 Stage_인 임시 테이블로 명명된 공개 스테이지를 사용합니다. 임시 테이블에 로딩이 끝나면 프로세스에 사용 된 스테이지가 삭제됩니다._

매개 변수:

  • filename, 읽을 파일의 이름입니다

  • tempTableName, 임시 테이블의 이름

  • columnDefinition, 임시 테이블을 가질 모든 필드의 정의

import\reset**

**`import_reset`**`()`
Copy
설명:

로그

**`log`**`(*msg, level=20, writter=None)`
Copy
설명:

로깅 활성화 여부에 따라 콘솔(표준 출력) 또는 로그 파일에 메시지를 인쇄합니다

매개 변수:

  • *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)`
Copy
설명:

자격 증명, 데이터베이스, 웨어하우스, 역할, login_timeout 및 인증자 전달 매개 변수를 사용하여 Snowflake 데이터베이스에 로그합니다.

매개 변수:

  • user, 데이터베이스의 사용자

  • password 데이터베이스 사용자의 비밀번호입니다

  • database, 연결할 데이터베이스

  • warehouse, 연결할 데이터베이스의 웨어하우스

  • role, 연결할 역할

  • login_timeout, 연결에 너무 오래 걸리는 경우 오류를 표시하기 전 최대 시간 제한입니다

  • authenticator, SNOWFLAKE, EXTERNALBROWSER, SNOWFLAKE_JWT 또는 OAUTH 와 같이 사용할 인증자 지원 값

  • token, OAUTH 또는 JWT 토큰

os

**`os`**`(args)`
Copy
설명:

매개 변수:

  • args,

quit\application**

**`quit_application`**`(code=None)`
Copy
설명:

애플리케이션을 종료하고 선택적으로 전달된 코드를 반환합니다.

매개 변수:

  • code=None, 종료 후 반환할 코드입니다

read\params_args**

**`read_param_args`**`(args)`
Copy
설명:

전달된 배열에서 매개 변수 인자를 읽습니다

매개 변수:

  • args, 사용할 인자

readrun

**readrun**(line, skip=0)
Copy
설명:

지정된 파일 이름 라인을 읽고 파일 시작 부분의 일부 라인을 선택적으로 건너뜁니다

매개 변수:

  • 라인, 읽을 파일 이름

  • skip=0, 건너뛸 라인은 다음과 같습니다

remark

**remark**(arg)
Copy
설명:

인자를 인쇄합니다.

매개 변수:

  • arg, 인쇄할 인자

repeat\previous_sql_statement**

**`repeat_previous_sql_statement`**`(con=None, n=1)`
Copy
설명:

이전에 실행된 sql 문을 반복합니다.

매개 변수:

  • con=None, 지정된 경우 연결. 전달되지 않으면 마지막으로 수행된 연결 성능을 사용합니다

  • n=1, 다시 실행할 이전 문 수

set\default_error_level**

**`set_default_error_level`**`(severity_value)`
Copy
설명:

매개 변수:

  • severity_value,

set\error_level**

**`set_error_level`**`(arg, severity_value)`
Copy
설명:

매개 변수:

  • arg,

  • severity_value,

simple\fast_load**

**`simple_fast_load`**`(con, target_schema, filepath, stagename, target_table_name)`
Copy
설명:

연결과 전달된 매개 변수 target_schema, 파일 경로, 스테이지 이름 및 대상 테이블 이름에서 간단한 빠른 로딩을 실행합니다.

매개 변수:

  • arg, 사용할 연결

  • target_schema, 빠른 로딩에 사용할 스키마의 이름입니다

  • filepath, 테이블에 로딩할 파일 이름 경로

  • target_table_name, 데이터가 로딩될 테이블의 이름입니다

stat

**`stat`**`(path, *, dir_fd=None, follow_symlinks=True)`
Copy
설명:

_지정된 경로에서 통계 시스템 호출을 수행합니다._dir_fd 및 follow_symlink는 플랫폼에서 구현되지 않을 수 있습니다. 사용할 수 없는 경우 이를 사용하면 NotImplementedError 가 발생합니다. 열린 파일 설명자로 경로를 지정할 때 dir_fd 또는 follow_symlinks를 사용하는 것은 오류입니다

매개 변수:

  • path, 검사할 경로; 문자열, 바이트, 경로와 유사한 오브젝트 또는\open-file-descriptor int일 수 있습니다

  • dir_fd, 없음이 아닌 경우 디렉터리에 열려있는 파일 설명자이어야 하며, 경로는 상대 문자열이어야 합니다. 그러면 경로는 해당 디렉터리에 상대적입니다

  • follow_symlinks, false이고 경로의 마지막 요소가 심볼릭 링크인 경우, stat는 링크가 가리키는 파일 대신 심볼릭 링크 자체를 검사합니다

system

**`system`**`(command)`
Copy
설명:

서브셸에서 명령을 실행합니다.

매개 변수:

  • _ command_ ,

using

**`using`**`(*argv)`
Copy
설명:

매개 변수:

  • _ *argv_ ,

클래스

프로젝트에 정의된 모든 클래스

BeginLoading 클래스

이 클래스에는 BEGIN LOADING 및 FastLoad 의 관련 명령을 지원하는 import_file_to_tab 정적 함수가 포함되어 있습니다.

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

    • 사용할 연결은 다음과 같습니다

Export 클래스

클래스의 정적 메서드

  • 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 = '' \

Import 클래스

클래스의 메서드

  • reset()

클래스의 정적 메서드

  • file(file, separator=' ')

  • using(globals, *argv)

클래스에 정의된 데이터 및 기타 특성

  • expandedfilename = None

  • no_more_rows = False

  • read_obj = None

  • reader = None

  • separator = ' '

Parameters 클래스

클래스에 정의된 데이터 및 기타 특성

  • passed_variables = {}

BTEQ

기본 Teradata 쿼리(BTEQ)는 워크스테이션의 사용자가 1개 이상의 Teradata 데이터베이스 시스템과 통신하고 인쇄 및 화면 출력용 보고서 형식을 지정할 수 있는 범용 명령 기반 프로그램입니다.

BTEQ 파일 및 명령은 MultiLoad 및 FastLoad 스크립트에 대해 수행된 변환과 유사하게 Python 코드로 변환되어, Snowflake에서 Teradata의 BTEQ 기능을 시뮬레이션합니다. 생성된 코드는 Snowflake의 BTEQ 문을 시뮬레이션하는 데 필요한 필수 함수가 포함된 snowconvert.helpers라는 Snowflake Python 프로젝트를 사용합니다.

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

snowconvert.helpers.error_code != 0인 경우: snowconvert.helpers.quit_application (snowconvert.helpers.error_code)

.IMPORT RESET

snowconvert.helpers.import_reset()

이 함수에는 기능이 없습니다

.LABEL newLabel

def NEWLABEL():
snowconvert.helpers.quit_application()

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

이 함수에는 기능이 없습니다

.SET ERRORLEVEL 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(‘|’)

이 함수에는 기능이 없습니다

.SET WIDTH 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)

이전 테이블에 제시된 보다 복잡한 문의 경우 보다 자세한 예가 포함된 하위 섹션에서 설명합니다.

.GOTO 변환

BTEQ 스크립트를 Python으로 변환하고 있으므로 BTEQ 에서 유효한 특정 구조는 Python에서 본질적으로 지원되지 않습니다. .Label 명령을 사용하는 .GOTO 명령의 경우입니다.

따라서 이러한 명령의 기능을 에뮬레이션할 수 있도록 .Label 명령을 후속 호출 문이 있는 기능으로 전환하는 대안이 개발되었습니다.

다음 코드를 확인하십시오.

 .LABEL FIRSTLABEL
SELECT * FROM MyTable1;
.LABEL SECONDLABEL
SELECT * FROM MyTable2;
SELECT * FROM MyTable3;
Copy

위의 예제에서는 5개의 명령이 있었습니다. 그 중 2개는 .Label 명령입니다. FIRSTLABEL 명령은 다른 .LABEL 명령이 발견될 때까지 아래에 오는 문을 사용하여 함수로 변환되었습니다. 다른 레이블(이 경우 SECONDLABEL)이 호출되면 해당 호출은 첫 번째 함수를 종료하고 새 함수를 시작합니다.

이전 예제를 마이그레이션하면 결과는 다음과 같습니다.

 #*** Generated code is based on the SnowConvert 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()
  FIRSTLABEL()
  snowconvert.helpers.quit_application()
def FIRSTLABEL():
  exec("""
    SELECT
      *
    FROM
      MyTable1
    """)
  SECONDLABEL()
def SECONDLABEL():
  exec("""
    SELECT
      *
    FROM
      MyTable2
    """)
  exec("""
    SELECT
      *
    FROM
      MyTable3
    """)

if __name__ == "__main__":
  main()
Copy

FIRSTLABEL_ 함수에 대한 호출이 있으며, 이 함수에는 원래 코드에서 FIRSTLABEL 다음에 오는 유일한 레이블이 아닌 명령어인 문이 하나만 있습니다. FIRSTLABEL 함수가 끝나기 전에 그 뒤에 오는 문과 함께 _ SECONDLABEL_ 을 호출합니다.

참고:

  • 커넥터 변수 con = None 을 생성하고 main() 함수: con = snowconvert.helpers.log_on() 에 채웁니다.

  • 로그 설정: snowconvert.helpers.configure_log().

쿼리 문 실행하기

BTEQ 파일에 있는 모든 SQL 문은 snowconvert.helpers에서 제공하는 exec 함수를 통해 실행됩니다. 다음 코드를 예로 들어 보겠습니다.

 CREATE TABLE aTable (aColumn BYTEINT);
Copy

이는 다음과 같이 변환됩니다.

 #*** Generated code is based on the SnowConvert 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("""
    CREATE OR REPLACE TABLE aTable (
      aColumn BYTEINT
    )
    """)
  snowconvert.helpers.quit_application()

if __name__ == "__main__":
  main()
Copy

스크립트 파일 실행하기

사용자의 BTEQ 명령과 Teradata SQL 문이 포함된 파일을 스크립트, 실행 파일, 매크로 또는 저장 프로시저라고 합니다. 예를 들어, SAMPFILE 이라는 파일을 생성하고 다음 BTEQ 스크립트를 입력합니다.

    .LOGON tdpid/userid,password 
   SELECT * FROM department;
   .LOGOFF
Copy

실행 파일을 실행하려면 BTEQ RUN 명령어 중 하나를 입력합니다.

.RUN FILE=sampfile

Copy

두 번째 코드를 변환하면 결과는 다음과 같습니다.

 #*** Generated code is based on the SnowConvert 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()

  for statement in snowconvert.helpers.readrun(fr"sampfile"):
    eval(statement)
  snowconvert.helpers.quit_application()

if __name__ == "__main__":
  main()
Copy

snowconvert.helpers.readrun("sampfile") 은 SAMPFILE 에서 각 라인을 반환하고, FOR 문에서 각 라인은 전달된 식을 구문 분석하여 프로그램 내에서 Python 식(SAMPFILE 이 작동하도록 변환되어야 함)을 실행하는 함수인 eval 함수로 전달됩니다.

SQL 파일 실행

BTEQ 파일을 실행하는 동안 SQL 파일을 찾을 수 있는 인스턴스도 있습니다. 예를 들어, SQL 파일을 NEWSQL 이라고 합니다.

 CREATE TABLE aTable (aColumn BYTEINT);
Copy

다음 라인이 포함된 스크립트 중에 실행할 수 있습니다.

 $(<$NEWSQL)
Copy

그리고 스크립트를 변환한 후 결과는 다음과 같습니다.

 #*** Generated code is based on the SnowConvert 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("""
    CREATE OR REPLACE TABLE aTable (
      aColumn BYTEINT
    )
    """)
  snowconvert.helpers.quit_application()

if __name__ == "__main__":
  main()
Copy

exec_file 헬퍼 함수는 NEWSQL 파일에서 각 라인을 읽은 다음 쿼리문 실행하기 섹션에 설명된 대로 실행 함수를 사용합니다.

알려진 문제

문제가 발견되지 않았습니다.

관련 EWIs

문제가 발견되지 않았습니다.

REPEAT

참고

출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.

Teradata 설명서 에 따르면, REPEAT 문을 통해 사용자는 다음 SQL 요청을 제출할 최대 횟수를 지정할 수 있습니다. SQL 요청은 단일 또는 다중 문 요청일 수 있습니다. 이는 REPEAT 문 뒤에 오는 각 문의 세미콜론 위치에 따라 정의됩니다.

구문

REPEAT [ n [ PACK p [ REQBUFLEN b ] ] | * | RECS r]
<sql_request>

Copy

샘플 소스 패턴

이 입력 데이터로:

A B C
D E F
G H I

Copy
* [
] *

Copy

Teradata:

 .IMPORT DATA FILE = inputData.dat;
.REPEAT *
USING var_1 (CHARACTER), var_2 (CHARACTER), var_3 (CHARACTER)
INSERT INTO testtabu (c1) VALUES (:var_1)
;INSERT INTO testtabu (c1) VALUES (:var_2) 
;INSERT INTO testtabu (c1) VALUES (:var_3) 
;UPDATE testtabu 
   SET c2 = 'X'
   WHERE c1 = :var_1 
;UPDATE testtabu 
   SET c2 = 'Y' 
   WHERE c1 = :var_2 
;UPDATE testtabu 
   SET c2 = 'Z'
   WHERE c1 = :var_3
;INSERT INTO TESTTABU (c1, c2) VALUES ('?','_');

.REPEAT 10
INSERT INTO TESTTABU2 VALUES ('John Doe', 23);

.REPEAT RECS 5
INSERT INTO TESTTABU2 VALUES ('Bob Alice', 21);

.IMPORT DATA FILE = inputData2.dat;
USING (var_1 CHARACTER, var_2 CHARACTER)
INSERT INTO testtabu (c1) VALUES (:var_1) 
;INSERT INTO testtabu (c1) VALUES (:var_2);
Copy
C1C2
AX
DX
GX
BY
EY
HY
CZ
FZ
IZ
?_
?_
?_
*null
[null
MY_NAMEMY_AGE
John Doe23
John Doe23
John Doe23
John Doe23
John Doe23
John Doe23
John Doe23
John Doe23
John Doe23
John Doe23
Bob Alice21
Bob Alice21
Bob Alice21
Bob Alice21
Bob Alice21

Snowflake:

 #*** Generated code is based on the SnowConvert 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()
  snowconvert.helpers.import_file(fr"inputData.dat")
  ssc_repeat_value = '*'
  ssc_max_iterations = 1

  for ssc_repeat_position in range(0, ssc_max_iterations):

    if ssc_repeat_position == 0:
      using = snowconvert.helpers.using("var_1", "CHARACTER", "var_2", "CHARACTER", "var_3", "CHARACTER", rows_to_read = ssc_repeat_value)
      exec("""
        INSERT INTO testtabu (c1)
        VALUES (:var_1)
        """, using = using)
      exec("""
        INSERT INTO testtabu (c1)
        VALUES (:var_2)
        """, using = using)
      exec("""
        INSERT INTO testtabu (c1)
        VALUES (:var_3)
        """, using = using)
      exec("""
        UPDATE testtabu
          SET
            c2 = 'X'
          WHERE
            c1 = :var_1
        """, using = using)
      exec("""
        UPDATE testtabu
          SET
            c2 = 'Y'
          WHERE
            c1 = :var_2
        """, using = using)
      exec("""
        UPDATE testtabu
          SET
            c2 = 'Z'
          WHERE
            c1 = :var_3
        """, using = using)
      exec("""
        INSERT INTO TESTTABU (c1, c2)
        VALUES ('?', '_')
        """, using = using)

  ssc_repeat_value = 10
  ssc_max_iterations = 10

  for ssc_repeat_position in range(0, ssc_max_iterations):
    exec("""
      INSERT INTO TESTTABU2
      VALUES ('John Doe', 23)
      """)
  ssc_repeat_value = 5
  ssc_max_iterations = 5

  for ssc_repeat_position in range(0, ssc_max_iterations):
    exec("""
      INSERT INTO TESTTABU2
      VALUES ('Bob Alice', 21)
      """)
  snowconvert.helpers.import_file(fr"inputData2.dat")
  using = snowconvert.helpers.using("var_1", "CHARACTER", "var_2", "CHARACTER", rows_to_read = 1)
  exec("""
    INSERT INTO testtabu (c1)
    VALUES (:var_1)
    """, using = using)
  exec("""
    INSERT INTO testtabu (c1)
    VALUES (:var_2)
    """, using = using)
  snowconvert.helpers.quit_application()

if __name__ == "__main__":
  main()
Copy
C1C2
AX
DX
GX
BY
EY
HY
CZ
FZ
IZ
?_
?_
?_
*null
[null
MY_NAMEMY_AGE
John Doe23
John Doe23
John Doe23
John Doe23
John Doe23
John Doe23
John Doe23
John Doe23
John Doe23
John Doe23
Bob Alice21
Bob Alice21
Bob Alice21
Bob Alice21
Bob Alice21

알려진 문제

문제가 발견되지 않았습니다.

관련 EWIs

관련 EWIs 없음.

USING REQUEST MODIFIER

Some parts in the output code are omitted for clarity reasons.
Copy

Teradata 설명서 에 따르면, USING REQUEST MODIFIER 는 데이터를 가져오거나 내보내기 위해 후속 SELECT, INSERT, UPDATE 또는 DELETE 문에서 사용할 하나 이상의 매개 변수 이름을 정의합니다.

이 문의 구문은 다음과 같습니다.

 USING ( <using_spec> [,...] ) SQL_request

<using_spec> ::= using_variable_name data_type [ data_type_attribute [...] ]
  [ AS { DEFERRED [BY NAME] | LOCATOR } ]
Copy

Teradata 설명서에 명시된 대로, 정의된 매개 변수로 데이터를 로딩하려면 USING REQUEST MODIFIER 앞에 .IMPORT 문을 붙여야 합니다.

따라서 이 문에 대한 변환은 다음 단계를 따릅니다.

  1. SnowConvert 헬퍼에서 import_file() 함수를 호출합니다. 이렇게 하면 임시 파일에 데이터가 로딩됩니다.

  2. SnowConvert 헬퍼에서 using() 함수를 호출하여 로딩된 데이터로 사전을 생성합니다.

  3. 각 쿼리에 대해 SnowConvert 헬퍼에서 exec() 함수를 실행하고 이전에 정의한 사전을 전달합니다. 여기에는 Snowflake Python Connector 데이터 바인딩 기능이 사용됩니다.

이 입력 데이터로:

 A,B,C
Copy

Teradata (MultiLoad)

 .IMPORT DATA FILE = inputData.dat;
USING var_1 (CHARACTER), var_2 (CHARACTER), var_3 (CHARACTER)
INSERT INTO testtabu (c1) VALUES (:var_1)
;INSERT INTO testtabu (c1) VALUES (:var_2) 
;INSERT INTO testtabu (c1) VALUES (:var_3) 
;UPDATE testtabu 
   SET c2 = 'X'
   WHERE c1 = :var_1 
;UPDATE testtabu 
   SET c2 = 'Y' 
   WHERE c1 = :var_2 
;UPDATE testtabu 
   SET c2 = 'Z'
   WHERE c1 = :var_3;
Copy
ROWC1C2
1AX
2BY
3CZ

Snowflake (Python)

 #*** Generated code is based on the SnowConvert 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()
  snowconvert.helpers.import_file(fr"inputData.dat")
  using = snowconvert.helpers.using("var_1", "CHARACTER", "var_2", "CHARACTER", "var_3", "CHARACTER", rows_to_read = 1)
  exec("""
    INSERT INTO testtabu (c1)
    VALUES (:var_1)
    """, using = using)
  exec("""
    INSERT INTO testtabu (c1)
    VALUES (:var_2)
    """, using = using)
  exec("""
    INSERT INTO testtabu (c1)
    VALUES (:var_3)
    """, using = using)
  exec("""
    UPDATE testtabu
      SET
        c2 = 'X'
      WHERE
        c1 = :var_1
    """, using = using)
  exec("""
    UPDATE testtabu
      SET
        c2 = 'Y'
      WHERE
        c1 = :var_2
    """, using = using)
  exec("""
    UPDATE testtabu
      SET
        c2 = 'Z'
      WHERE
        c1 = :var_3
    """, using = using)
  snowconvert.helpers.quit_application()

if __name__ == "__main__":
  main()
Copy
ROWC1C2
1AX
2BY
3CZ

Known Issues

1. REPEAT 명령은 아직 지원되지 않습니다

.REPEAT 명령은 아직 지원되지 않습니다. 즉, USING REQUEST MODIFIER 는 입력 파일의 첫 번째 행에서 로딩된 데이터만 사용합니다. 따라서 쿼리는 한 번만 실행됩니다.

이 문제는 .REPEAT 명령이 적절한 변환 지원을 받으면 수정될 것입니다.

이 설명서와 관련하여 추가 질문이 있는 경우 snowconvert-support@Snowflake.com으로 이메일을 보내주시기 바랍니다.

관련 EWIs

관련 EWIs 없음.

FLOAD

Teradata FastLoad 는 Teradata 데이터베이스의 빈 테이블에 대량의 데이터를 빠르게 로딩하기 위한 명령 기반 유틸리티입니다.

FastLoad 파일 및 명령은 BTEQ 및 MultiLoad 스크립트에 대해 수행된 변환과 유사하게 Python 코드로 변환되어, Snowflake에서 Teradata의 FastLoad 기능을 시뮬레이션합니다. 생성된 코드는 Snowflake의 FastLoad 문을 시뮬레이션하는 데 필요한 필수 함수가 포함된 snowconvert.helpers라는 Snowflake Python 프로젝트를 사용합니다.

FastLoad 명령 변환

대부분의 FastLoad 명령 은 Snowflake에서 관련이 없는 것으로 간주되며, 이러한 명령은 설명이 생략되어 있습니다. 아래는 FastLoad 명령의 요약 목록과 해당 명령이 Snowflake로 변환된 상태입니다.

Teradata FastLoad 명령

변환 상태

참고

AXSMOD

설명 추가됨

BEGIN LOADING

변환됨

​관련 INSERT 문에서 변환이 발생하므로 노드에 설명이 생략되어 있습니다.

CLEAR

설명 추가됨

DATEFORM

설명 추가됨

DEFINE

변환됨

END LOADING

변환됨

​BEGIN LOADING 의 변환에 필요하지 않으므로 설명이 생략되었습니다.

ERRLIMIT

설명 추가됨

HELP

설명 추가됨

HELP TABLE

설명 추가됨

INSERT

변환됨

BEGIN LOADING 의 일부로 변환됨.

LOGDATA

설명 추가됨

LOGMECH

설명 추가됨

LOGOFF

설명 추가됨

LOGON

설명 추가됨

NOTIFY

설명 추가됨

OS

설명 추가됨

QUIT

설명 추가됨

RECORD

설명 추가됨

RUN

설명 추가됨

SESSIONS

설명 추가됨

SET RECORD

변환됨

SET SESSION CHARSET

설명 추가됨

SHOW

설명 추가됨

SHOW VERSIONS

설명 추가됨

SLEEP

설명 추가됨

TENACITY

설명 추가됨

기본 변환

이러한 문에 대한 ConversionTool 의 기본 동작은 문을 설명하는 것입니다. 예:

Teradata (FastLoad)

 SESSIONS 4;
ERRLIMIT 25;
Copy

Snowflake (Python)

 #*** Generated code is based on the SnowConvert 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()
Copy

그럼에도 불구하고 Snowflake에서 의도한 대로 작동하기 위해 특정 Python 문으로 변환해야 하는 몇 가지 예외가 있습니다.

임베디드 SQL

FastLoad 스크립트는 동일한 파일 내에서 Teradata 문을 지원합니다. 이러한 문의 대부분은 일부 예외를 제외하고 BTEQ 파일에 있는 것처럼 변환됩니다.

오류 테이블을 삭제하면 FastLoad 파일 안에 있는 경우 설명이 추가됩니다.

Teradata (FastLoad)

 DROP TABLE Error1;
DROP TABLE Error2;
Copy

Snowflake (Python)

 #*** Generated code is based on the SnowConvert 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()
Copy

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

Snowflake (Python)

 #*** Generated code is based on the SnowConvert 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()
Copy

이 설명서와 관련하여 추가 질문이 있는 경우 snowconvert-support@Snowflake.com으로 이메일을 보내주시기 바랍니다.

Known Issues

문제가 발견되지 않았습니다.

관련 EWIs

  1. SSC-FDM-0007: 종속성이 누락된 요소.

  2. SSC-FDM-0027: next 문을 제거했으며 SnowFlake 에서 적용되지 않습니다.

BEGIN LOADING

BEGIN LOADING 명령에 대한 변환은 동작을 올바르게 시뮬레이션하기 위해 DEFINE, INSERT 및 (선택 사항) SET RECORD 명령이 필요한 다중 부분 변환입니다.

이 변환에 대한 자세한 설명은 다음 하위 섹션에서 확인할 수 있습니다.

SET RECORD

위에서 설명한 것처럼 이 명령은 BEGIN LOADING 의 변환에 필요하지 않습니다. 찾을 수 없는 경우 기본 구분 기호는 ‘,’(쉼표)로 설정됩니다. 그렇지 않으면 정의된 구분 기호가 사용됩니다. 이 값은 ssc_set_record 변수에 저장됩니다.

현재는 SET RECORD VARTEXT, SET RECORD FORMATTEDSET RECORD UNFORMATTED 만 지원됩니다. BINARYTEXT 키워드 사양의 경우 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;
Copy

Snowflake (Python)

 #*** Generated code is based on the SnowConvert 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()
Copy

DEFINE

DEFINE 명령에 대한 변환은 각각 열 정의 값과 BEGIN LOADING 변환에 사용할 파일 경로로 ssc_define_columnsssc_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;
Copy

Snowflake (Python)

 #*** Generated code is based on the SnowConvert 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()
Copy

BEGIN LOADING

BEGIN LOADING 명령은 변환에 대한 관련 정보가 관련 INSERT 문에 있으므로 설명이 생략되어 있습니다.

ERRORFILES, NODROP, CHECKPOINT, INDICATORS, DATAENCRYPTION 사양은 변환에 필요하지 않으므로 설명이 생략되었습니다.

Teradata (FastLoad)

 BEGIN LOADING FastTable ERRORFILES Error1,Error2
   CHECKPOINT 10000;
Copy

Snowflake (Python)

 #*** Generated code is based on the SnowConvert 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()
Copy

INSERT

연결된 INSERT 문에 대한 변환은 로딩할 값을 삽입할 순서를 결정하는 데 사용되는 ssc_begin_loading_columnsssc_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
);
Copy

Snowflake (Python)

 #*** Generated code is based on the SnowConvert 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()
Copy

내부적으로 import_file_to_table 함수는 임시 스테이지를 생성하고 해당 스테이지에 로컬 파일을 넣어 지정된 테이블에 로딩합니다. 그러나 파일이 이미 Snowflake 에서 지원하는 클라우드 공급자에 저장되어 있을 수 있습니다.

StageInput Data Place Holder
StageInput Data Place Holder
Internal stage@my_int_stage
External stage@my_int_stage/path/file.csv
Amazon S3 buckets3://mybucket/data/files
Google Cloud Storagegcs://mybucket/data/files
Microsoft Azureazure://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")
Copy

END LOADING

END LOADING 명령은 BEGIN LOADING 의 변환에 필요하지 않으므로 설명이 생략되었습니다.

Teradata (FastLoad)

 END LOADING;
Copy

Snowflake (Python)

 #*** Generated code is based on the SnowConvert 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()
Copy

Known Issues

1. BINARY 및 TEXT 키워드 사양은 지원되지 않습니다

SET RECORD 명령에 대한 BINARYTEXT 키워드 사양은 아직 지원되지 않습니다.

2. VARTEXT 의 기본 사양만 지원됩니다

TRIM 또는 QUOTE 등의 추가 사양(SET RECORD VARTEXT)은 아직 지원되지 않습니다.

관련 EWIs

  1. SSC-FDM-0007: 종속성이 누락된 요소.

  2. SSC-FDM-0027: next 문을 제거했으며 SnowFlake 에서 적용되지 않습니다.

  3. SSC-EWI-0021: 지원되지 않습니다.

  4. SSC-FDM-TD0022: 셸 변수가 발견되어 셸 스크립트에서 이 코드를 실행해야 합니다.