브랜치 만들기
lakeFS는 Git과 비슷한 방식으로 브랜치를 사용해요. 변경 사항을 다시 통합할 준비가 될 때까지(혹은 통합할지 말지 결정할 때까지) 격리해 두는 아주 좋은 방법이죠. lakeFS는 zero-copy 브랜칭 기법을 사용하기 때문에 데이터의 브랜치를 만드는 게 아주 효율적이에요.
출처: 문서
본문
lakeFS는 Git과 비슷한 방식으로 브랜치를 사용해요. 변경 사항을 다시 통합할 준비가 될 때까지(혹은 통합할지 말지 정할 때까지) 격리해 두는 아주 좋은 방법이에요. lakeFS는 zero-copy 브랜칭 기술을 쓰기 때문에 데이터의 브랜치를 만드는 게 매우 효율적이에요.
이전 단계에서 호수(lakes) 데이터를 확인했으니, 이제 덴마크 호수 데이터만 담는 새 데이터셋을 만들어 볼 거예요. 왜냐고요? 음, 그냥 그러고 싶으니까요 :)
가장 먼저 할 일은 이 개발을 진행할 브랜치를 만드는 거예요. lakectl 도구로 브랜치를 만들 건데, 먼저 자격 증명으로 lakectl을 설정해야 해요. 새 터미널 창에서 다음을 실행하세요:
lakectl config
Tip
어떤 이유로든 command not found 오류가 나면, 대신
python -m lakectl로 lakectl을 호출할 수 있어요.
프롬프트를 따라 첫 단계에서 받은 자격 증명을 입력하세요. Server endpoint URL은 http://127.0.0.1:8000으로 그대로 두면 돼요.
lakectl 설정이 끝났으니, 이제 브랜치를 만들어 볼게요. 다음을 실행하세요:
lakectl branch create lakefs://quickstart/denmark-lakes --source lakefs://quickstart/main
이런 확인 메시지가 뜰 거예요:
Source ref: lakefs://quickstart/main
created branch 'denmark-lakes' 3384cd7cdc4a2cd5eb6249b52f0a709b49081668bb1574ce8f1ef2d956646816
데이터 변환하기
이제 데이터를 변경해 볼 거예요. lakeFS에는 네이티브 클라이언트가 여러 개 있고, S3 호환 엔드포인트도 있어요. 즉, S3를 쓸 수 있는 도구라면 무엇이든 lakeFS와 동작한다는 뜻이에요. 꽤 멋지죠.
여기서는 lakeFS 웹 인터페이스에 내장된 DuckDB를 사용할 거예요.
lakeFS Objects 페이지에서 lakes.parquet 파일을 선택해 DuckDB 에디터를 열어요:
먼저 호수 데이터를 DuckDB 테이블로 불러와서 다룰 수 있게 만들어요. DuckDB 에디터의 기존 텍스트를 다음으로 바꾸세요:
CREATE OR REPLACE TABLE lakes AS
SELECT * FROM READ_PARQUET('lakefs://quickstart/denmark-lakes/lakes.parquet');
행 개수가 100,000으로 표시되면 DuckDB 테이블이 만들어진 거예요.
아까 본 것과 같은 데이터인지 확인차 같은 쿼리를 다시 실행해 볼게요. parquet 파일을 함수로 직접 쿼리하는 게 아니라 DuckDB 테이블(lakes)을 쿼리한다는 점에 주목하세요.
SELECT country, COUNT(*)
FROM lakes
GROUP BY country
ORDER BY COUNT(*)
DESC LIMIT 5;
데이터 변경하기
이제 원본 lakes.parquet에서 불러온 테이블에서 덴마크가 아닌 행을 모두 지워 볼게요:
DELETE FROM lakes WHERE Country != 'Denmark';
아까와 같은 쿼리를 다시 실행해서 잘 됐는지 확인할 수 있어요:
SELECT country, COUNT(*)
FROM lakes
GROUP BY country
ORDER BY COUNT(*)
DESC LIMIT 5;
데이터를 lakeFS에 다시 쓰기
지금까지의 변경은 DuckDB가 가진 데이터 사본에만 적용됐어요. 이제 lakeFS로 다시 밀어 넣어 볼게요. 이번에는 main이 아니라 denmark-lakes 브랜치에 쓰는 거니까 경로가 다르다는 점에 주의하세요:
COPY lakes TO 'lakefs://quickstart/denmark-lakes/lakes.parquet';
브랜치에서 데이터가 바뀌었는지 확인하기
parquet 파일 자체에 새 데이터가 들었는지 직접 확인해 봐요. 확실하게 하려고 lakes 테이블을 drop한 다음, parquet 파일을 직접 쿼리할 거예요:
DROP TABLE lakes;
SELECT country, COUNT(*)
FROM READ_PARQUET('lakefs://quickstart/denmark-lakes/lakes.parquet')
GROUP BY country
ORDER BY COUNT(*)
DESC LIMIT 5;
그럼 main의 데이터는요?
denmark-lakes 브랜치에서 데이터를 바꾸고 데이터셋의 상당 부분을 삭제했어요. 그럼 main 브랜치의 원본 데이터는 어떻게 됐을까요? 아무 일도 없었어요! 위와 같은 쿼리를 main 브랜치에 대해 실행해서 직접 확인해 보세요:
SELECT country, COUNT(*)
FROM READ_PARQUET('lakefs://quickstart/main/lakes.parquet')
GROUP BY country
ORDER BY COUNT(*)
DESC LIMIT 5;
다음 단계에서는 변경 사항을 커밋하고 브랜치를 main으로 다시 머지하는 방법을 살펴볼 거예요.
← 미리 채워진 데이터 쿼리하기 브랜치를 main에 다시 머지하기 →
더 알아보기 (Learn more)
공식 문서의 자세한 내용은 https://docs.lakefs.io/quickstart/branch/에서 확인하실 수 있어요.