Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Code Workspaces에서 데이터 읽고 쓰기

JupyterLab과 RStudio에서 데이터셋, Iceberg 테이블 및 가상 테이블을 읽고 분석하거나 지원 출력을 기록할 수 있습니다. 제한 뷰는 Jupyter의 SQL과 Restricted outputs mode 조건을 따르며, 시계열 속성은 OSDK 경로로 접근합니다.

권한과 자원 크기

작업공간에 로드한 데이터셋의 보안 표지와 분류 등 필수 통제는 작업공간 계보에 포함됩니다. 입력에 필요한 접근을 잃으면 작업공간 전체의 접근도 잃을 수 있습니다. 세션 권한과 데이터 통제를 확인합니다.

JupyterLab과 RStudio는 분산 Spark 클러스터가 아닌 단일 가상 머신에서 실행합니다. 기본 최대 규모는 8 CPU와 64 GB 메모리이며 실제 선택 범위는 프로젝트의 자원 큐 및 관리형 프로파일에 따릅니다. 전체 입력이 메모리에 들어오지 않으면 행/열 필터, SQL 또는 파일 선택으로 읽을 양을 줄입니다. 대규모 데이터 파이프라인에는 Spark transform 또는 Pipeline Builder를 사용합니다.

브랜치

기본으로 작업공간과 같은 이름의 데이터셋 브랜치를 읽고, 그 브랜치가 없으면 master로 돌아갑니다. 예를 들어 작업공간이 my-branch이면 데이터셋의 my-branch를 먼저 찾습니다.

특정 입력 브랜치를 고정하려면 Data에서 데이터셋 옆 메뉴의 Pin dataset branch for reads를 선택합니다. 이는 읽을 브랜치 설정입니다.

별칭 등록

Data > Add > Read data로 자원을 선택하고 별칭을 정합니다. 데이터셋과 제한 뷰마다 별칭이 필요하며 UI가 /home/user/repo/.foundry 아래 숨김 설정에 별칭과 자원 ID의 매핑을 저장합니다.

읽기 전략으로 pandas DataFrame, Polars LazyFrame 또는 원본 파일 접근 등을 선택하면 그 형식의 코드가 생성됩니다. 전략은 나중에 바꿀 수 있고 기본 별칭 제안은 데이터셋 표시 이름과 같습니다. Done으로 등록한 뒤 Run snippet 또는 Copy to clipboard를 사용합니다.

스키마가 있는 데이터셋은 파티션 파일 수와 이름을 몰라도 논리 테이블로 읽을 수 있습니다. 파일이 많거나 이름이 매번 바뀐다는 이유만으로 비정형 파일처럼 처리할 필요는 없습니다.

표 형식 읽기

가상 Cats 데이터셋을 kittens 별칭으로 등록했다고 가정합니다. 코드에는 Cats 표시 이름 대신 별칭을 사용합니다.

from foundry.transforms import Dataset

kittens = Dataset.get("kittens").read_table(format="arrow").to_pandas()
format반환 형식
arrowApache Arrow Table. 필요하면 to_pandas로 변환
pandas 또는 dataframepandas DataFrame
polarsPolars DataFrame. 필요하면 to_pandas로 변환
lazy-polarsPolars LazyFrame. Foundry의 이 읽기 필터 경로와 함께 사용하지 않음
path원본 데이터셋 파일이 있는 로컬 경로

형식에 맞는 pyarrow, pandas 또는 polars 패키지가 필요합니다. 기본 환경에는 포함되지만 사용자 환경에는 추가 설치가 필요할 수 있습니다. 전체 메서드와 추가 인자는 Dataset API에 설명합니다.

R에서 즉시 data.frame으로 가져옵니다.

library(foundry)

kittens <- datasets.read_table("kittens")

필터 등을 먼저 정한 뒤 수집하는 경로는 다음과 같습니다.

library(foundry)
library(dplyr)

kittens_df <- Dataset.get("kittens") %>%
  collect()

여기서 collect 전의 지원 변환은 메모리에 데이터를 올리기 전에 적용합니다. SQL이 필요한 데이터셋 뷰/객체 구체화와 제한 뷰는 SQL 장의 별도 경로를 사용합니다.

출력 데이터셋 등록

  1. Data의 Import Dataset 옆 Save to dataset을 선택합니다.
  2. 출력 데이터셋의 이름과 위치를 정하고 Save합니다.
  3. Data에 추가한 출력 항목의 Save to dataset 선택을 유지합니다.
  4. 코드에서 사용할 출력 별칭을 정합니다.
  5. 표 형식은 쓸 DataFrame 변수를, 비정형 출력은 로컬 파일 또는 폴더를 지정합니다.
  6. Copy and register dataset을 선택하면 출력을 등록하고 쓰기 코드를 복사합니다.
  7. 작업공간에 붙여 넣고 실제 변수/경로와 대상 출력을 확인하여 실행합니다.

아래 예는 output_dataset_tabular와 output_dataset_non_tabular라는 출력 별칭을 등록한 경우입니다. Restricted outputs mode에서는 출력을 쓸 수 없습니다.

표 쓰기

Python 예는 kittens의 실제 데이터를 읽어 출력에 기록합니다.

from foundry.transforms import Dataset

output_table = Dataset.get("kittens").read_table(format="pandas")
Dataset.get("output_dataset_tabular").write_table(output_table)

R:

library(foundry)

output_table <- datasets.read_table("kittens")
datasets.write_table(output_table, "output_dataset_tabular")

기본 표 쓰기는 SNAPSHOT이므로 현재 출력 뷰를 대체하는 작업입니다. 기존 출력에 덧붙이는 것이라고 가정하지 않습니다.

파일과 디렉터리 쓰기

Python의 디렉터리 업로드는 실제 로컬 디렉터리를 인자로 받습니다. 하위 폴더의 파일도 재귀적으로 업로드합니다.

from foundry.transforms import Dataset


def upload_output_directory(local_directory: str):
    return Dataset.get("output_dataset_non_tabular").upload_directory(local_directory)

파일 하나에는 upload_file을 사용할 수 있습니다.

from foundry.transforms import Dataset


def upload_output_file(local_file: str):
    return Dataset.get("output_dataset_non_tabular").upload_file(local_file)

R은 로컬 파일이나 폴더 경로를 datasets.upload_files에 전달합니다.

library(foundry)

upload_output_files <- function(local_paths) {
  datasets.upload_files(local_paths, "output_dataset_non_tabular")
}

이 함수들의 인자는 이미 작업공간에 있는 실제 파일/폴더 경로입니다. 존재하지 않는 경로나 업로드 권한 오류는 실제 쓰기 실패로 처리됩니다.

트랜잭션과 transform 전환

실행 경로기본 트랜잭션
대화형 표 쓰기SDK 쓰기 호출마다 SNAPSHOT
대화형 파일 쓰기SDK 쓰기 호출마다 UPDATE
transform으로 등록한 전체 스크립트 실행여러 SDK 쓰기가 있어도 실행 전체에 한 트랜잭션. 기본 SNAPSHOT
증분 설정을 적용한 transformAPPEND

UPDATE는 파일을 추가하거나 같은 경로의 파일을 갱신하는 트랜잭션이며 행 단위 upsert를 뜻하지 않습니다.

코드를 transform으로 등록하면 대화형 쓰기는 code-workspace-sandbox/ 접두사의 브랜치에 기록하고, transform 빌드가 실행될 때 현재 브랜치를 갱신합니다. 스케줄, 계보와 증분 실행이 필요하면 Jupyter notebook 또는 R 스크립트를 transform으로 게시합니다.

데이터로 이어지는 작업