Snowpark Migration Accelerator: 파이프라인 랩 - 평가¶
SnowConvert를 사용할 때와 마찬가지로, SMA를 통해 코드를 실행하고, 결과를 평가하고, 문제를 해결한 후 새 플랫폼에서 실행합니다. 그러나 SnowConvert와 달리, SMA는 소스 플랫폼이나 Snowflake에 연결하지 않습니다. SMA는 완전히 오프라인으로 실행할 수 있는 로컬 애플리케이션입니다. 그러나 성능은 평가에 달려 있습니다. 변환과 관련된 대부분의 작업은 Spark API 및 Snowpark API 간의 호환성을 구축하여 수행되었습니다.
추출 및 코드 가용성¶
AdventureWorks 랩에 사용할 파일은 다음과 같습니다.
end_to_end_lab_source_code.zip
이 랩의 목적상, 변환하는 노트북 및 스크립트 파일이 이미 파일로 액세스할 수 있다고 가정합니다. 일반적으로, SMA는 파일을 입력으로 받으며 소스 플랫폼에 연결하지 않습니다. 특정 도구로 파일을 오케스트레이션하는 경우 파일을 내보내야 할 수 있습니다. Databricks 또는 EMR의 일부로 노트북을 사용하는 경우, 오늘 SMA를 통해 실행할 Jupyter Notebook과 마찬가지로 노트북을 .ipynb 파일로 내보낼 수 있습니다.x20;
이 랩에는 몇 개의 파일만 있지만, 대규모 마이그레이션에서는 수백 또는 수천 개의 파일이 있는 경우가 많습니다. 가능한 파일을 추출하고 SMA를 통해 해당 파일을 실행합니다. 이와 같은 도구를 사용하면 좋은 점은 무엇을 빠뜨렸는지 알 수 있다는 것입니다.
여기에는 ‘customer_update.csv’ 데이터 파일도 있습니다. 현재 Adventure Works에서 사용 중인 POS(Point of Sale) 시스템에서 로컬로 생성되는 파일의 샘플입니다. 해당 시스템도 업데이트 중이지만, 이 개념 증명(POC)은 기존 파이프라인을 Spark 대신 Snowpark와 연동하는 것에 초점을 맞추고 있습니다.
이러한 각 파일을 로컬 컴퓨터의 단일 디렉터리에 넣어 보겠습니다.

프로젝트 디렉터리를 만드는 것이 좋습니다. 원하는 대로 호출할 수 있지만, 이 랩에서는 spark_adw_lab을 사용해 보겠습니다. 즉, 이름이 spark_adw_lab인 폴더를 생성한 다음 해당 디렉터리에 source_files라는 다른 폴더를 생성합니다(경로는 /your/accessible/directory/spark_adw_lab/source_files와 같은 형식임). 이 작업은 필수는 아니지만 정리하는 데 도움이 됩니다. SMA는 모든 하위 디렉터리 세트도 스캔하므로 하나의 폴더에는 특정 파이프라인을 추가하고 다른 폴더에는 노트북을 추가할 수 있습니다.
액세스 ¶
이제 액세스 가능한 디렉터리에 소스 파일이 있으므로 SMA를 실행할 차례입니다.
SMA를 아직 다운로드하지 않은 경우 Snowflake 웹 사이트에서 다운로드할 수 있습니다. Snowflake 계정의 SnowSight 마이그레이션 페이지에서도 다운로드할 수 있습니다.

도구를 다운로드한 후 설치합니다. [SMA 설치(https://docs.snowconvert.com/sma/general/getting-started/installation)]에 대한 자세한 내용은 SMA 설명서를 참조하세요.
Snowpark Migration Accelerator 사용¶
도구를 설치했으면 엽니다. SMA를 실행하면 파트너 도구인 SnowConvert와 매우 유사하게 보입니다. 이 두 도구는 모두 코드 파일을 도구에 입력하면 도구가 실행되는 유사한 개념을 기반으로 합니다. 참고로, SnowConvert는 소스에서 DDL 및 데이터를 직접 가져와 Snowflake에 직접 입력할 수 있습니다. 하지만 SMA는 이 작업을 수행하지 않습니다. 코드 파일만 소스로 받아 Snowflake와 호환되는 파일로 출력합니다. 주된 이유는 사용자가 어떻게 Spark 코드를 오케스트레이션할지를 SMA가 알지 못하기 때문이지만, 동시에 사용 시 보안을 강화하기 위해서입니다.
SMA를 실행하면 새 프로젝트를 만들지, 아니면 기존 프로젝트를 열지 묻는 메시지가 표시됩니다.

프로젝트 생성 화면으로 이동합니다.

이 화면에서 프로젝트와 관련된 세부 정보를 입력합니다. 모든 필드는 필수 항목입니다. 이 프로젝트의 경우 다음과 유사한 항목을 입력할 수 있습니다.
프로젝트 이름: Spark ADW Lab
입력 폴더 경로: /your/accessible/directory/spark_adw_lab/source_files
출력 폴더 경로(SMA는 출력을 위한 디렉터리를 자동으로 생성하지만, 이를 수정할 수 있음): /your/accessible/directory/spark_adw_lab/source_files_output
이메일 주소: your.name@your_domain.com
고객의 회사: 해당 조직
이 프로젝트 생성 화면에 대한 몇 가지 참고 사항은 다음과 같습니다.
이메일 및 회사 필드는 진행 중인 프로젝트를 추적하는 데 도움이 됩니다. 예를 들어, 대규모 SI에는 SMA를 실행하는 단일 사용자를 대표하는 여러 이메일 주소와 여러 조직이 있을 수 있습니다. 이 정보는 SMA에서 생성한 프로젝트 파일에 저장됩니다.
SQL에 대한 숨겨진 필드가 있습니다. SMA는 SQL을 스캔하고 분석할 수 있지만 SQL을 변환하지는 않습니다. 또한 다음과 같은 경우에만 SQL을 식별할 수 있습니다.
.sql 파일에 있는 SQL
Jupyter Notebook의 SQL 셀에 있는 SQL
spark.sql 문에 단일 문자열로 전달되는 SQL.
이 SQL 기능은 Snowflake와 호환되지 않는 SQL이 있는 위치를 확인하는 데 도움이 될 수 있지만, SMA의 주요 용도는 아닙니다. Spark SQL 및 HiveQL에 대한 추가 지원이 곧 제공될 예정입니다.
모든 프로젝트 정보를 입력했으면 이 HoL에서는 평가 단계를 건너뜁니다. (평가를 만들지 않는 걸까요?) 코드를 변환하지 않을 경우 평가를 실행하면 SMA에서 생성된 전체 보고서 세트를 확인할 수 있으므로 도움이 될 수 있습니다. 그런 다음 변환된 코드의 추가 복사본을 만들지 않고도 이러한 보고서를 탐색하거나 조직의 다른 사용자와 공유할 수 있습니다. 그러나 이러한 모든 동일한 평가 보고서는 변환 중에도 생성됩니다. 따라서 지금은 평가 모드를 건너뛰고 변환으로 넘어가겠습니다.
애플리케이션의 오른쪽 하단에서 “SAVE & SKIP ASSESSMENT”를 선택합니다.

“저장”하는 파일은 로컬 프로젝트 파일입니다. 프로젝트 생성 화면에 입력한 모든 정보는 위에서 방금 지정한 디렉터리에 확장명이 ‘.snowma’인 로컬 텍스트 파일로 저장됩니다.

그러면 변환 화면으로 이동합니다. 이 화면에서 입력 및 출력 디렉터리 필드가 다시 표시되지만, 해당 필드는 프로젝트 생성 페이지에서 입력한 항목으로 이미 채워져 있습니다. 여기서 유일한 새 필드는 액세스 코드 입력 필드입니다. 액세스 코드는 무료로 제공되지만 만료됩니다. 따라서 Snowpark Migration Accelerator(SMA)를 사용하기 위해 이미 액세스 코드를 요청했더라도 다시 요청해야 할 수 있습니다. (이러한 액세스 코드를 생성하는 메커니즘은 SnowConvert와 유사하지만, SnowConvert의 액세스 코드는 SMA에서 작동하지 않습니다. 다른 액세스 코드를 요청하고 사용해야 합니다.)
“Enter access code…” 필드 옆의 “Inquire about an access code”를 선택하여 액세스 코드를 요청할 수 있습니다.

이 옵션을 선택하면 액세스 코드를 생성하기 위해 사용자의 신원을 확인하는 팝업 메뉴가 표시됩니다.

위에 표시된 모든 필드를 채우고 유효한 이메일 주소를 입력했는지 확인합니다. 이전의 프로젝트 생성 화면에서는 생성 중인 프로젝트와 연결할 이메일 주소를 입력했습니다. 그러나 실제로는 해당 이메일로 아무 것도 전송되지 않았습니다. 이는 프로젝트를 로컬에서 추적하기 위한 것이었습니다. 이 양식을 작성하면 입력한 이메일로 액세스 코드가 전송됩니다.
양식을 제출하면 곧 액세스 코드가 포함된 이메일을 받게 됩니다. 이메일은 sma-notifications@snowflakel.com에서 발송되며, 다음과 같은 형식입니다.

위 이미지에서 **<your access code here>**에는 일련의 숫자, 문자, 대시가 표시됩니다. 해당 문자열을 복사하여 SMA의 액세스 코드 필드에 붙여넣습니다.:

값을 상자에 붙여넣으면 SMA가 액세스 코드의 유효성을 검사합니다. 유효성 검사에 성공하면 액세스 코드 대화 상자 아래에 액세스 코드 세부 정보가 표시됩니다.

액세스 코드의 유효성을 검사하기 위해 SMA는 Snowflake 라이선싱 API를 호출합니다. 인터넷에 연결되어 있지 않은 경우 도구가 액세스 코드의 유효성을 검사할 수 없으며 오류 메시지가 표시됩니다. 완전히 오프라인 상태인 환경에서 도구를 실행해야 하는 경우 sma-support@snowflake.com으로 문의하여 액세스 코드 유효성 검사에 대한 도움을 받으세요.
이제 액세스 코드의 유효성이 검사되었으므로 변환 설정을 살펴볼 수 있습니다.

이 실습 랩의 출력을 간소화할 수 있는 한 가지 설정이 있는데, 바로 pandas DataFrame을 Snowpark API로 변환하지 못하게 비활성화하는 것입니다.

이 설정은 현재 업데이트 중이므로, 이 옵션을 선택 취소하지 않으면 여러 경고가 많이 추가될 것입니다. 대부분의 pandas DataFrame은 pandas modin 구현 시 사용할 수 있으므로, 지금은 간단한 import 호출 변경만으로 충분합니다. 2025년 6월 말까지의 이 문제 관련 내용을 확인하세요. 다른 설정도 살펴볼 수 있지만, 그대로 두겠습니다. 출력 코드가 호환되는 테스트 라이브러리인 Snowpark Checkpoints가 있다는 점에 유의해야 합니다. 이와 관련된 설정이 있지만, 이 랩에서는 변경하지 않겠습니다.
“CLOSE”를 선택하여 설정을 저장하고 닫습니다.

“START CONVERSION” 옵션은 애플리케이션의 오른쪽 하단에 있습니다. 이 옵션을 선택하여 변환을 시작해 보겠습니다.
다음 화면에는 변환 진행 상태가 표시됩니다.

SnowConvert와 마찬가지로, SMA는 입력 디렉터리에 전체 코드베이스의 의미 체계 모델을 구축합니다. 코드 요소, SQL 오브젝트 및 기타 참조된 아티팩트 간의 관계를 구축하고 Snowflake에서 기능적으로 동등한 결과와 가장 근접한 출력을 생성합니다. 이는 주로 Spark API에서 Snowpark API로 참조를 변환하는 것을 의미합니다. SMA의 엔지니어링 팀은 Snowpark 엔지니어링 팀에 소속되어 있으므로, 대부분의 변환이 Snowpark API에 내장되어 있어 변경 사항이 사소해 보일 수 있습니다. 하지만 SMA에서 생성되는 다양한 평가 정보를 사용하면 마이그레이션 프로젝트를 실제로 추진할 수 있습니다. 생성된 모든 평가 정보를 심층적으로 검토하는 작업은 당장 진행할 필요가 없습니다. SMA가 이 단락을 읽는 동안 변환을 완료했을 것이기 때문입니다.
SMA가 완료되면 오른쪽 하단에 “VIEW RESULTS” 옵션이 표시됩니다.

결과 페이지에 결과가 표시됩니다.

결과 페이지에는 이 코드베이스가 Snowflake에 대해 얼마나 “준비”되었는지를 나타내는 매우 간소화된 메트릭인 “준비도 점수”가 표시됩니다. 결과는 다음에 검토하겠지만, Snowpark Migration Accelerator를 쉽게 실행할 수 있다는 점에 유의하세요. SMA는 단지 “액셀러레이터”에 불과합니다. 해결책도 아니며, 자동화 도구도 아닙니다. SMA는 하나의 데이터 소스에 연결하고 다른 데이터 소스로 출력하는 파이프라인을 완전히 마이그레이션하지 않으므로, SnowConvert에서 수행하는 단순한 DDL의 SQL-SQL 마이그레이션보다 항상 더 많은 주의가 필요합니다. 그러나 Snowflake는 이를 최대한 간소화하기 위해 지속적으로 노력하고 있습니다.
출력 해석¶
SMA는 SnowConvert보다 훨씬 더 많은 양의 평가 정보를 생성합니다. 결과를 구문 분석하는 작업은 어려울 수 있습니다. 달성하려는 목표에 따라 다양한 방향으로 진행될 수 있습니다.
다음은 매우 간단한 시나리오입니다. 따라서 수행할 일부 단계는 지나친 것처럼 보일 수 있습니다. (파일이 2개뿐인데 이 프로젝트에 존재하는 종속성을 분석할 필요가 있을까 싶지만 살펴볼 수도 있겠죠?) 목표는 이러한 소규모 POC 환경에서도 일반적으로 권장되는 단계를 그대로 따르는 것입니다. 하지만 범위가 명확하고 파일이 2개뿐이라는 점을 분명히 하겠습니다. 둘 다 소스에서와 같이 작동하기만 하면 됩니다.
준비도 점수¶
이를 염두에 두고 애플리케이션에 표시되는 출력의 첫 번째 부분인 준비도 점수를 살펴보겠습니다. 여러 준비도 점수가 표시되며, 각 준비도 점수를 확장하면 해당 준비도 점수가 무엇을 반영하는지 더 잘 이해할 수 있습니다.

각 준비도 점수는 Snowpark 및 Snowflake에서 지원되는 API의 함수 또는 요소 수를 이 실행의 해당 API와 관련된 모든 함수 또는 요소 수로 나눈 매우 기본적인 계산입니다 창을 확장하면 점수 계산 방식을 보여주는 계산이 표시됩니다. 이 창의 왼쪽 상단에 있는 “How to read through the scores”를 선택하여 준비도 점수를 해석하는 방법에 대해 자세히 알아볼 수도 있습니다.
이 실행의 Spark API 준비도 점수는 97.92%입니다. (사용자의 점수는 다를 수 있습니다. 해당 도구는 격주로 업데이트되며 두 플랫폼 간의 호환성이 계속 발전함에 따라 변경될 수 있습니다.) 이는 도구에서 식별한 Spark API 참조의 97.92%가 Snowflake에서 지원된다는 것을 의미합니다. 여기서 “지원”된다는 것은 이미 존재하는 유사한 함수가 있을 수 있거나 SMA가 기능적으로 동등한 출력을 생성했다는 것을 의미합니다. 이 점수가 높을수록 이 코드가 Snowflake에서 빠르게 실행될 가능성이 높아집니다.
(참조의 97.92%는 Snowpark API에서 직접 지원되거나 SMA에서 변환됩니다. 대부분은 직접 지원될 가능성이 높지만, SMA가 생성한 출력 보고서 폴더의 SparkUsageInventory 보고서를 검토하면 변환된 항목과 전달된 항목을 정확하게 확인할 수 있습니다. 이 랩에서는 issues.csv 파일에서 지원되지 않는 부분을 살펴볼 것이므로, 해당 내용을 자세히 다루지는 않겠지만, 이 정보를 참고할 수 있습니다.)
다른 준비도 점수도 확인할 수 있습니다. 시간이 지남에 따라 준비도 점수가 변하기 때문에 이 랩에 표시된 것보다 더 많은 점수를 볼 수 있습니다. 이 랩에서는 각 점수를 살펴보지 않지만, 낮은 점수는 항상 조사할 필요가 있다는 점에 유의하세요.
코드 분석됨¶
각 준비도 점수 바로 아래에는 처리할 수 없는 코드가 있는지 알려주는 작은 표시기가 있습니다.

이 숫자는 완전히 구문 분석된 파일의 백분율을 나타냅니다. 이 숫자가 100% 미만인 경우는 SMA가 구문 분석하거나 처리할 수 없는 일부 코드가 있는 것입니다. 문제를 해결하기 위해 가장 먼저 살펴봐야 할 곳입니다. 100% 미만인 경우 문제 요약을 보고 구문 분석 오류가 발생한 위치를 확인해야 합니다. SMA의 출력을 검토할 때 가장 먼저 살펴봐야 할 곳입니다. 대량의 코드를 스캔할 수 없는 경우 SMA를 다시 실행하는 것이 가장 합리적일 수 있기 때문입니다.
여기서는 워크로드의 **50%**만 성공적으로 구문 분석되었습니다. 안타깝습니다. 당황스러울 수 있지만, 너무 성급하게 판단하지 말아야 합니다. 파일은 2개뿐이며 구문 분석 오류가 얼마나 많은지 아직 모릅니다.
이 숫자 결과와 관계없이, 이 페이지에서 마지막으로 살펴볼 부분은 문제 요약입니다. 다음 요약이 표시될 때까지 애플리케이션에서 아래로 스크롤합니다.

문제 요약¶
문제는 SnowConvert 및 SMA 모두의 핵심 요소입니다. 각 도구는 수신된 입력을 기반으로 기능적으로 동등한 출력을 생성하려고 시도하지만, 어떤 변환도 100% 자동화되지는 않습니다. 두 도구는 이 점을 인지하고, 변환할 수 없거나 추가적인 주의가 필요할 수 있는 모든 항목을 문제로 표시합니다. 문제는 스프레드시트에 요약되지만, 출력 코드에 직접 주석으로 작성되기도 합니다.
UI의 문제 요약은 도구의 실행 중에 발견된 문제를 강조 표시합니다. 문제는 대개 EWI(오류, 경고 및 문제)라는 약어로 지칭됩니다. SnowConvert와 유사하지만 동일하지는 않은 SMA는 다음 3가지 유형의 문제를 생성합니다.
구문 분석 오류 - 이 문제 유형은 심각한 것으로 간주되며 즉시 처리해야 합니다. SMA 작업 방식으로 인해 구문 분석되지 않는 코드가 있으면 보고서에서 정보가 빠지고 변환 과정이 누락될 수 있습니다.
변환 오류 - 이러한 오류는 SMA가 인식하지만(또는 적어도 인식한다고 생각하지만) 어떤 이유로든 변환할 수 없습니다. 이러한 오류에는 일반적으로 매우 구체적인 문제 코드가 있으므로 다음으로 처리해야 합니다.
경고 - 이러한 오류 코드는 SMA가 변환하지 못한 코드이거나 Snowpark 및 Snowflake에 이와 동등한 기능이 있는 코드임을 나타내지만, 테스트를 수행할 때 문제가 발생할 수 있습니다. 기능적으로 100% 동일하지 않을 수 있습니다.
[SMA 설명서 페이지에 문제 유형에 대한 정보](/migrations/sma-docs/issue-analysis/issue-code- category)가 더 많이 있지만, 여기서 실행했을 때의 문제 요약은 다음과 같습니다.

이 요약에서는 고유한 문제에 대한 코드, 개수, 수준 및 설명을 확인할 수 있습니다. 문제가 많더라도 고유한 문제가 적을수록 프로그래밍 방식으로 처리할 수 있는 가능성이 높아집니다. 고유한 각 문제 코드에 대한 자세한 내용을 보려면 UI에서 코드를 클릭합니다. 그러면 해당 특정 문제에 대한 SMA 설명서 페이지로 이동합니다.
몇 가지 변환 오류, 경고 및 1개의 구문 분석 오류가 있는 것 같습니다. 즉, 도구가 읽을 수 없는 항목이 1개 있었습니다. (PND로 시작하는 오류 코드가 많이 발생하는 경우 변환 설정에서 해당 옵션을 선택 취소하지 않았기 때문일 수 있습니다. 이러한 항목이 표시되면 무시해도 됩니다.)
문제의 수와 관계없이 마이그레이션을 시작할 준비가 되었다면 항상 자세한 문제 파일을 살펴보는 것이 좋습니다. 이 파일은 SMA를 실행한 컴퓨터에 로컬로 저장된 csv 파일입니다. 이 파일은 SMA의 오른쪽 하단에 있는 “VIEW REPORTS” 옵션을 선택하여 확인할 수 있습니다.

그러면 모든 보고서가 있는 로컬 디렉터리로 이동합니다. 현재 기준으로 SMA가 생성한 보고서가 많이 있습니다.

이러한 각 보고서에는 SMA 사용 방법에 따라 몇 가지 중요한 정보가 있습니다. 지금은 issues.csv 파일만 살펴보겠지만, [SMA 설명서]/migrations/sma-docs/user-guide/assessment/output-reports/README)에서 SMA가 생성한 EVERY 보고서 및 인벤토리에 대한 자세한 정보를 확인할 수 있습니다.
문제 파일을 열면 다음과 같이 표시됩니다.

이 보고서의 스키마에 유의합니다. 문제 코드, 문제에 대한 설명, 문제 유형(카테고리), 각 문제가 있는 파일, 각 문제가 있는 파일의 줄 번호 및 해당 특정 문제에 대한 설명서 페이지로 연결되는 링크가 제공됩니다. 이러한 모든 정보는 문제를 탐색할 때 유용합니다.
이를 파일별로 피벗하면 파일별로 어떤 유형의 문제가 있는지 확인할 수 있습니다.

몇 가지 문제만 있으며, 구문 분석 오류는 파이프라인 Python 스크립트에 있는 것 같습니다. 여기서부터 시작하면 됩니다.
일반적으로, 보고서 디렉터리에 있는 다른 보고서 중 하나인 ArtifactDependencyInventory.csv 파일을 살펴볼 것입니다. 그러나 이는 매우 작은 실행 파일입니다. 이제 이러한 출력 파일에 실제로 무엇이 있는지 살펴보고 Snowflake에서(또는 Snowflake 함께) 실행할 수 없는지 살펴보겠습니다.