Workbook 변환의 작성과 실행
Workbook의 변환은 임의 개수의 입력을 받아 최대 하나의 결과를 반환합니다. Code, Template과 Manual entry 유형을 사용할 수 있습니다. 언어와 입출력 자료형을 먼저 맞춘 뒤 코드를 작성합니다.
변환 추가
그래프 왼쪽 위 New Transform에서 Python code나 Templates 등 유형을 선택합니다.
기존 노드에 마우스를 올리고 파란 +를 선택하면 그 노드를 입력으로 받는 하위 변환을 만들 수 있습니다.
이름과 alias
저장하지 않는 변환은 Workbook 안의 alias로 식별합니다. 가져온 입력과 데이터셋으로 저장한 변환에는 실제 Foundry 데이터셋 이름과 Workbook alias가 각각 있습니다.
같은 이름의 두 Titanic 데이터셋이 있다면 titanic_historical, titanic_daily_feed처럼 용도별 alias를 쓸 수 있습니다. Alias 변경은 외부 사용자가 보는 데이터셋 이름을 바꾸지 않으며 브랜치에서 수정한 alias를 병합할 수 있습니다.
Logic 패널의 이름을 선택하여 수정하고 Enter를 누릅니다. 데이터셋 이름이나 alias를 바꾸면 다른 이름도 함께 갱신할지 묻는 안내가 나타납니다.
입력과 코드
Logic 위쪽 입력 막대의 +로 입력을 추가합니다. 옆의 다중 입력 버튼으로 여러 개를 선택할 수도 있습니다.
Code 변환에는 해당 언어의 기본 구조가 표시됩니다. Global Code는 각 코드 변환 전에 실행하여 같은 언어의 변수와 함수를 제공합니다.
Template 변환에서는 데이터셋 매개변수를 선택한 뒤 그래프의 노드를 고릅니다. 열 매개변수는 먼저 데이터셋을 지정해야 열 목록을 선택할 수 있습니다. 정수나 문자열 같은 값은 직접 입력합니다.
수동 입력
Manual Entry로 표 노드를 만듭니다.
Double, Integer, Boolean과 String 열을 지원하며 최대 500행을 입력할 수 있습니다. 복사 및 붙여넣기로 데이터를 넣을 수도 있습니다.
실행 권한과 범위
변환을 실행하려면 Workbook의 Edit 권한과 Workbook이 사용하는 모든 데이터셋의 보안 표지에 대한 접근이 필요합니다.
아래 패널의 Run은 선택한 변환을 실행합니다. 옆 화살표의 Run all downstream은 하위 변환들을 실행합니다. 여러 노드를 Ctrl+클릭 또는 Cmd+클릭으로 선택한 뒤 오른쪽 클릭의 Run N datasets로 함께 실행할 수도 있습니다. 위쪽 설정 톱니바퀴의 Run all transforms는 전체 변환을 실행합니다.
실행 중 표준 출력은 Logs로 스트리밍되므로 코드 중간의 print를 볼 수 있습니다. 데이터셋으로 저장한 결과의 행 순서는 코드에서 정렬한 순서와 다를 수 있습니다. 이후 읽기에서 순서가 필요하면 다시 정렬해야 합니다.
입출력 탭
Inputs
입력 목록을 보고 연결을 추가하거나 각 입력의 전달 유형을 바꿉니다. 원천 유형과 노드 언어에 따른 기본값은 다음과 같습니다.
| 원천 | Python 노드 | R 노드 | SQL 노드 |
|---|---|---|---|
| 스키마 없는 import | Python transform input | R transform input | Spark dataframe을 요구하므로 원시 파일을 직접 분석하는 데 적합하지 않습니다. |
| 스키마 있는 import | Spark dataframe | R data.frame | Spark dataframe |
| 모델 등 custom file format import | Object | Object | Spark dataframe을 요구하므로 해당 파일 형식을 직접 처리하지 못합니다. |
| 파생 노드 | 상위의 출력 유형을 가능한 한 유지합니다. 호환되지 않으면 언어의 기본 유형으로 변환합니다. | 상위가 Pandas라면 R data.frame 등 호환 유형을 사용합니다. | Spark dataframe |
여기서 Object는 모델 등 custom file format 객체입니다. 온톨로지 객체 유형을 의미하지 않습니다.
ZIP, 이미지나 스키마 없는 데이터셋은 비정형 파일 입출력의 파일시스템 API로 읽습니다. Python과 R의 명시적 출력 핸들은 데이터셋으로 저장하는 노드에서 사용합니다.
데이터셋을 읽을 때도 기본 행 순서를 보장하지 않습니다. 분석이 특정 순서에 의존하면 명시적인 정렬 기준을 적용합니다.
Preview
미리보기는 50행으로 결과 형태를 확인하는 데 사용합니다. 대화형 실행에서 저장하지 않는 노드는 미리보기만 계산하고, 데이터셋으로 저장하는 노드는 쓰기만 계산합니다. 저장된 결과는 해당 데이터셋에서 확인합니다. 저장 여부에 따른 실행 모델은 상위 노드의 로직을 다시 계산할지 저장된 결과를 읽을지도 결정합니다.
Visualizations
그림을 생성하는 코드는 결과를 그래프와 아래쪽 Visualizations에 표시할 수 있습니다.
노드 메뉴에서 그래프상의 표시를 표 또는 그림으로 바꿀 수 있습니다.
시각화 탭과 노드 메뉴에서 그림을 다운로드하거나 보고서에 추가할 수 있습니다.
Logs
표준 출력, 경고와 오류를 확인합니다. 표준 오류가 있으면 Logs가 자동으로 선택되고 알림이 나타납니다.
Description과 Models
Description은 데이터셋 설명을 바꾸며 모든 브랜치와 Open Dataset에도 반영됩니다. Markdown을 사용할 수 있습니다. 노드의 Show Description 또는 위쪽 Tools의 Show all descriptions로 그래프에 표시합니다.
모델을 반환하는 변환은 Foundry 모델로 기록되어 모델 관리 기능에서 사용할 수 있습니다.
비결정적 로직의 재실행
현재 날짜나 timestamp를 읽는 코드, 파티션 배치에 의존하는 ID, 동률 해소 기준이 없는 행 번호와 정렬은 실행마다 결과가 달라질 수 있습니다. 같은 고정 입력의 일반적인 행 수 집계 자체가 비결정적인 것은 아닙니다.
저장하지 않은 노드를 다시 실행하거나 그 노드의 로직을 사용하는 하위 노드를 실행하면 최신 로직으로 다시 계산합니다. 실행 시각이나 비결정적 선택이 달라지면 이전 미리보기와 다른 결과가 나올 수 있습니다.
상위 A를 B와 C가 공유할 때 Run all downstream이 A를 항상 하나의 저장된 결과로 고정하는 것은 아닙니다. A의 로직이 재평가되면 B와 C가 다른 값을 받을 수 있습니다. 일관된 중간 결과가 필요하면 A를 데이터셋으로 저장하여 먼저 실행하고, 그 저장 결과를 사용하는 하위를 이어서 실행합니다. Data Lineage에서 저장된 데이터셋들을 순차 빌드하는 경로도 사용할 수 있습니다.
Pandas로 collect하면 그 실행의 값이 드라이버 메모리에 실체화되지만 메모리 한도가 있고 다음 실행에서도 같은 값을 보장하지는 않습니다. 안정적인 결과에는 입력과 정렬, 시간 기준을 명시하는 설계가 필요합니다.
저장소 변환으로 옮기기
CSV 출력, 한 변환의 여러 출력과 압축 파일의 스트리밍 처리는 저장소 변환 예제에서 구성합니다. Code Repository로 옮긴 코드는 해당 언어의 파이프라인에 등록해야 합니다.