변환 런타임의 입력과 출력 객체
Input과 Output 명세를 선언하면 실행 시 compute 함수에 해당 런타임 객체를 주입합니다. Spark, 경량 실행과 가상 테이블은 서로 다른 객체를 사용하며 같은 메서드 이름이라도 반환 유형과 모드가 다를 수 있습니다.
객체 선택
| 참조 | 역할 |
|---|---|
| TransformInput | 일반 Spark 데이터셋 입력 |
| TransformOutput | 일반 Spark 출력 |
| IncrementalTransformInput | 증분 Spark 입력 |
| IncrementalTransformOutput | 증분 Spark 출력 |
| TableTransformInput | 가상 테이블의 Spark 입력 |
| IncrementalTableTransformInput | 증분 가상 테이블과 Iceberg 변경 로그 |
| LightweightInput | 경량 실행 입력 |
| LightweightOutput | 경량 실행 출력 |
| IncrementalLightweightInput | 증분 경량 입력 |
| IncrementalLightweightOutput | 증분 경량 출력 |
DataFrame과 파일 경로
Spark 입력 및 출력의 dataframe은 PySpark DataFrame입니다. 경량 객체의 dataframe은 pandas DataFrame이며 arrow와 polars도 별도로 제공합니다. Spark의 path 속성은 Compass 경로이고 경량 객체의 path() 메서드는 기반 파일을 다운로드한 경로를 반환합니다.
가상 테이블의 catalog와 identifier는 기반 테이블 유형이 지원할 때만 사용할 수 있습니다. 증분 가상 테이블의 추가 DataFrame 모드와 Iceberg 변경 로그를 일반 데이터셋 입력이나 파일시스템 모드에 그대로 적용하지 않습니다.
증분 읽기와 쓰기
mode 인자를 받는 증분 입력 읽기는 added가 기본이고, 증분 출력 읽기는 current가 기본입니다. 출력 데이터 읽기와 출력 쓰기 모드는 별개입니다. Spark 증분 출력의 filesystem에서는 current 뷰만 쓸 수 있습니다. 경량 증분 출력의 filesystem에는 mode 인자가 정의되어 있지 않습니다.
쓰기를 시작한 뒤에는 set_mode를 바꾸지 않습니다. replace는 데이터를 대체하고 append는 기존 파일을 덮어쓰지 않습니다. 경량 출력의 modify는 파일 덮어쓰기도 허용합니다. incremental 설정이 실행 상태와 쓰기 동작을 결정하는 조건도 함께 확인합니다.
스키마의 종류
Spark 증분 출력에서 이전 트랜잭션이 없는 previous 뷰를 읽으려면 PySpark StructType을 제공합니다. 경량 출력의 빈 데이터 읽기는 FoundryFieldSchema를 사용합니다. 두 유형은 JobSpec 매개변수를 설명하는 Param.schema의 JSON 스키마와도 다릅니다.
출력 메타데이터
Spark write_dataframe의 bucket_cols와 bucket_count는 함께 지정합니다. 열 설명은 각 800자 이하이며 typeclass 맵의 name 및 kind 값은 각 100자 이하입니다.
경량 출력은 지원되는 DataFrame과 Arrow, DuckDB 관계 또는 경로를 기록할 수 있습니다. column_description이라는 기존 이름과 column_descriptions라는 현재 이름 중 하나만 사용합니다. 원시 Parquet의 put_metadata는 성공한 파일 업로드 뒤에 호출하고, expectation용 로컬 LazyFrame 읽기는 커밋 전에 수행합니다.