SnowConvert: 최상위 코드 단위 보고서

최상위 코드 단위란 무엇인가요?

코드 유닛은 이름에서 알 수 있듯이 가장 원자적인 독립 실행형 실행 요소입니다. 대부분의 경우 문이지만 단일 요소로 실행되기 때문에 스크립트 파일도 포함될 수 있습니다.

일부 코드 단위는 다른 코드 단위 안에 중첩될 수 있습니다. 단위 계층 구조에서 그 위에 다른 코드 단위가 없는 경우 이를 최상위 코드 단위라고 합니다.

범위를 벗어난 코드 단위란 무엇인가요?

범위를 벗어난 최상위 코드 단위는 SnowConvert 의 변환 범위를 벗어난 코드 단위입니다. 따라서 이러한 코드 단위는 변환율을 계산할 때 고려되지 않습니다. 이러한 각 코드 단위에는 변환율이 없습니다(N/A 로 표시됨).

입력 코드에 범위를 벗어난 코드 단위만 포함된 경우 전체 마이그레이션의 코드 라인 변환율은 0%가 됩니다.

다음 CREATE TRIGGER 는 범위를 벗어난 코드 단위로 간주됩니다.

CREATE OR REPLACE TRIGGER my_trigger
    AFTER 
    UPDATE
    ON my_table
    FOR EACH ROW
BEGIN
   NULL;
END;
Copy

최상위 코드 단위의 예

다음 섹션에서는 최상위 코드 단위의 몇 가지 예를 살펴볼 수 있습니다.

쿼리

다음 예제에서는 SELECT 문을 하나만 사용합니다. 이 문은 단일 최상위 코드 단위입니다.

SELECT * FROM table1;
Copy

이 예제에서는 SELECT 문이 다른 SELECT 문 내에 중첩되어 있습니다. 전체 쿼리는 1개의 최상위 코드 단위로 계산됩니다.

SELECT * FROM (SELECT * FROM table1);
Copy

오브젝트

DDL 로 생성된 오브젝트는 그 안에 다른 코드 유닛이 포함되어 있더라도 1개의 최상위 코드 유닛으로 간주합니다.

다음 문은 쿼리가 있는 뷰를 생성합니다. 이 경우 CREATE VIEW 전체가 1개의 최상위 코드 단위로 계산됩니다.

CREATE VIEW view1 AS SELECT * FROM table1;
Copy

다음 CREATE PROCEDURE 문은 내부에 여러 문이 포함되어 있어도 1개의 최상위 코드 단위로 계산됩니다.

CREATE PROCEDURE procedure1
AS
BEGIN
    DELETE FROM table1;
END;
Copy

명령

SQL 파일의 독립적인 명령은 최상위 코드 단위로 간주됩니다.

COMMIT 문은 단일 최상위 코드 단위로 계산됩니다.

COMMIT;
Copy

Oracle의 패키지 본문

패키지는 본문 내에 여러 요소를 정의할 수 있습니다. 패키지 본문을 최상위 코드 단위로 간주하는 이유는 전체 패키지 본문을 생성하지 않고는 이러한 요소를 개별적으로 생성할 수 없기 때문입니다. 패키지 본문 내의 요소 또는 코드 단위는 최상위 코드 단위로 계산되지 않습니다.

다음 코드는 단일 CREATE PACKAGE BODY 코드 단위로 보고됩니다.

CREATE PACKAGE package_body1 IS
    FUNCTION function1
    RETURN VARCHAR
    IS
    BEGIN
        RETURN 'HELLO'';
    END;
END;
Copy

Teradata 스크립트 파일

BTEQ 또는 TPUMP 같은 Teradata 스크립트 파일은 독립 실행형 코드 단위로 실행됩니다. 이 때문에 전체 파일은 1개의 최상위 코드 단위로 간주됩니다. 이 파일 내의 다른 가능한 코드 단위는 최상위 코드 단위로 계산되지 않습니다.

다음 BTEQ 스크립트 파일은 1개의 BTEQ 최상위 코드 단위로 보고됩니다.

.LOGON e/fml,notebook
.COMPILE FILE = example.spl;
COMMIT;
CALL samplesp1 (8888, pAmount);
.LOGOFF
Copy

GOTO 가 있는 Transact SQL 배치

Transact-SQL 의 각 문은 독립적으로 실행할 수 있습니다. 대부분의 경우 이러한 각 문은 최상위 코드 단위로 간주됩니다. 그러나 동일한 배치 내에 레이블에 GOTO 문이 포함된 배치가 있는 경우 배치의 문이 올바르게 작동하는지 확인하지 않고는 배치의 문을 독립적으로 실행할 수 없습니다. 따라서 GOTO 문과 함께 배치에 포함된 문은 최상위 코드 단위로 계산되지 않고 배치만 계산됩니다.

다음 코드 예제는 단일 GOTO/LABEL 코드 단위로 보고됩니다.

DECLARE @Counter int;  
SET @Counter = 1;  
WHILE @Counter < 10  
BEGIN   
    SELECT @Counter  
    SET @Counter = @Counter + 1  
    IF @Counter = 4 GOTO Branch_One
    IF @Counter = 5 GOTO Branch_Two  
END  
Branch_One:  
    SELECT 'Jumping To Branch One.'  
    GOTO Branch_Three;
Branch_Two:  
    SELECT 'Jumping To Branch Two.'  
Branch_Three:  
    SELECT 'Jumping To Branch Three.';
GO
Copy

코드 단위 방법론은 다른 보고서에서 어떻게 표현되나요?

코드 단위 방법론은 다른 보고서에도 적용됩니다. 이 섹션에서는 이러한 값이 표시되는 방식 또는 다른 보고서와 관련된 내용을 설명합니다.

이슈 보고서

issues-report.md

문제 보고서의 각 행에는 문제의 영향을 받는 코드 단위에 대한 몇 가지 정보가 있습니다. 코드 단위와 관련된 열은 다음과 같습니다.

  • 코드 단위 데이터베이스: 문제가 발견된 최상위 코드 단위의 데이터베이스입니다. 오브젝트인 코드 단위에만 적용됩니다.

  • 코드 단위 스키마: 문제가 발견된 최상위 코드 단위의 스키마입니다. 오브젝트인 코드 단위에만 적용됩니다.

  • 코드 단위 패키지: 문제가 발견된 최상위 코드 단위의 패키지입니다. 오브젝트인 코드 단위에만 적용됩니다.

  • 코드 단위 이름: 문제가 발견된 최상위 코드 단위의 이름입니다. 오브젝트와 같이 이름이 지정된 코드 단위에만 적용됩니다. 이 이름은 데이터베이스, 스키마 또는 패키지별로 한정되지 않습니다.

  • 코드 단위 ID: 문제가 발견된 최상위 코드 단위의 ID 입니다. 이 이름은 정규화된 이름을 가지며 이름이 반복되는 코드 단위에는 숫자를 추가합니다.

  • 코드 단위: 문제가 발견된 최상위 코드 단위의 유형입니다.

  • 코드 단위 크기: 문제가 발견된 최상위 코드 단위의 크기입니다.

오브젝트 참조 보고서 및 누락된 오브젝트 보고서

오브젝트-참조-보고서.md

missing-objects-report.md

오브젝트 참조 보고서의 각 행에는 다른 요소를 참조한 최상위 코드 단위에 대한 정보가 있습니다. 이러한 참조 요소는 최상위 레벨이 아닐 수 있으므로 다른 값은 최상위 코드 단위 보고서에 포함되지 않을 수 있습니다.

오브젝트 참조 보고서와 마찬가지로 누락된 오브젝트 보고서에는 코드에서 찾을 수 없는 요소를 참조한 최상위 코드 단위에 대한 정보가 있습니다.

  • 호출자 코드 단위: 다른 요소를 참조하는 최상위 코드 단위의 유형입니다.

  • 호출자 코드 단위 데이터베이스: 다른 요소를 참조하는 최상위 코드 단위의 데이터베이스입니다.

  • 호출자 코드 단위 스키마: 다른 요소를 참조하는 최상위 코드 단위의 스키마입니다.

  • 호출자 코드 단위 이름: 다른 요소를 참조하는 최상위 코드 단위의 이름입니다.

  • 호출자 코드 단위 전체 이름: 다른 요소를 참조하는 최상위 코드 단위의 전체 이름입니다.

최상위 코드 단위 보고서의 정보

설명

파티션 키

변환의 고유 식별자입니다.

파일 타입

코드 단위가 들어 있는 파일의 유형입니다. (SQL, BTEQ 등…)

카테고리

각 코드 단위가 속하는 더 넓은 클래스 또는 유형입니다.

코드 단위

이 요소가 속한 코드 단위의 유형입니다.

코드 단위 이름

테이블이나 프로시저와 같은 코드 단위가 있는 경우 코드 단위의 이름입니다. DMLs 같은 이름이 없는 요소의 경우 N/A 가 됩니다.

파일 이름

오브젝트가 위치한 파일의 이름입니다. 입력 디렉터리에서 시작하는 상대 경로를 사용합니다.

라인 번호

코드 단위가 위치한 파일 내부의 라인 번호입니다.

Lines of Code

코드 단위가 가지고 있는 총 코드 라인 수입니다.

EWI 카운트

코드 단위 내에서 발견되는 EWIs 의 수량입니다. EWIs 에 대한 자세한 내용은 durl에서 알아볼 수 있습니다.

FDM 카운트

코드 단위 내에서 발견되는 FDMs 의 수량입니다. FDMs 에 대한 자세한 내용은 여기에서 알아볼 수 있습니다.

PRF 카운트

코드 단위 내에서 발견되는 PRFs 의 수량입니다. PRFs 에 대한 자세한 내용은 여기에서 알아볼 수 있습니다.

최고 EWI 심각도

<p>코드 단위 내에서 발견된 가장 높은 EWI 심각도입니다.<br>심각도 순서는 다음과 같습니다.</p><ul><li>N/A (EWIs 없음)</li><li>Low</li><li>Medium</li><li>High</li><li>Critical</li></ul>

UDFs 사용됨

코드 단위 내에 있는 모든 사용자 정의 함수의 이름입니다. UDFs 의 이름이 2개 이상인 경우 파이프로 구분합니다.

EWI

코드 단위 내에 있는 모든 EWIs 의 코드입니다. 이러한 코드는 파이프로 구분되며 반복되는 코드는 포함되지 않습니다.

FDM

코드 단위 내에 있는 모든 FDMs 의 코드입니다. 이러한 코드는 파이프로 구분되며 반복되는 코드는 포함되지 않습니다.

PRF

코드 단위 내에 있는 모든 PRFs 의 코드입니다. 이러한 코드는 파이프로 구분되며 반복되는 코드는 포함되지 않습니다.

변환 상태

<p>코드 단위의 최종 변환 상태입니다.</p><p>가능한 변환 상태는 다음과 같습니다.</p><ul><li>NotSupported: 코드 단위의 변환률이 0%인 경우.</li><li>Partial: 코드 단위의 변환율이 0%에서 100% 사이인 경우.</li><li>Success: 코드 단위 변환율이 100%인 경우.</li></ul>

LoC 변환 비율

변환 비율은 코드 라인을 기준으로 합니다. 입력 코드의 형식에 따라 한 라인의 코드에도 지원되는 조각과 지원되지 않는 조각이 있을 수 있습니다. 이러한 경우 전체 라인이 지원되지 않는 것으로 간주됩니다.

ORACLE SQL 의 다음 CREATE TABLE 이 table_example.sql이라는 파일에 위치한다고 가정합니다.

CREATE TABLE my_table (
  my_column DATE DEFAULT TO_DATE(CURRENT_DATE, 'J'),
  NOT A VALID COLUMN
);
Copy
CREATE OR REPLACE TABLE my_table (
   my_column TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/ DEFAULT PUBLIC.JULIAN_TO_GREGORIAN_DATE_UDF(CURRENT_DATE(), 'J')
--                                                                                                                                                                          ,
-- ** SSC-EWI-0001 - UNRECOGNIZED TOKEN ON LINE '3' COLUMN '3' OF THE SOURCE CODE STARTING AT 'NOT'. EXPECTED 'Column Definition' GRAMMAR. LAST MATCHING TOKEN WAS ',' ON LINE '2' COLUMN '52'. FAILED TOKEN WAS 'NOT' ON LINE '3' COLUMN '3'. CODE '15'. **
--  NOT A VALID COLUMN
 )
 COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
 ;
Copy

최상위 코드 단위 보고서에는 이전에 표시된 테이블의 단일 항목이 포함됩니다.

다음은 CREATE TABLE 문의 항목에 보고되는 모든 값입니다.

  • 파티션 키 값은 마이그레이션에 따라 달라지므로 여기 값은 달라질 수 있습니다.

  • 파일 형식 은 확장자가 .sql인 파일에서 마이그레이션되었으므로 SQL 이 됩니다.

  • CREATE TABLE 문은 TABLE 코드 단위 카테고리의 일부이므로 카테고리 는 TABLE 이 됩니다.

  • 코드 단위 자체는 CREATE TABLE 입니다.

  • 이 코드 단위가 발견된 파일 이름 은 테이블_example.sql입니다.

  • CREATE TABLE 문이 파일 시작 부분에 있다고 가정하면 라인 번호 는 1이 됩니다.

  • 코드의 라인 번호는 4입니다.

  • EWI Count 열은 출력 코드에 구문 분석 EWI 가 1개 있기 때문에 1을 보고합니다.

  • 출력 코드에 데이터 타입과 관련된 FDM 문제가 있기 때문에 FDM Count 열은 1을 보고합니다.

  • 출력 코드에 PRF 문제가 없으므로 PRF Count 는 0을 보고합니다.

  • 이 경우 최고 EWI 심각도 는 예제 EWI 의 구문 분석 심각도이므로 “Critical”이 됩니다. 다른 하나는 심각도가 “Low입니다.

  • 입력 코드의 TO_DATE 함수를 변환하기 위해 이 사용자 정의 함수가 추가되었으므로 UDFs Used 열은 JULIAN_TO_GREGORIAN_DATE_UDF 가 됩니다.

  • EWI 열은 출력 코드에 추가된 EWIs 중 하나이므로 “SSC-EWI-0001”을 보고합니다.

  • FDM 열은 출력 코드에 추가된 FDMs 중 하나이므로 “SSC-FDM-OR0042”를 보고합니다.

  • 출력 코드에 PRF 문제가 없으므로 PRF 열은 “N/A”를 보고합니다.

  • Conversion Status 는 EWIs 를 사용하지 않고 이 코드 단위의 일부 조각만 마이그레이션할 수 있었기 때문에 “Partial”입니다.

  • LoC 변환 비율 은 4개 라인 중 2개 라인만 성공적으로 변환되었으므로 50%입니다.