데이터 수집, 시간 이동 및 테이블 롤백
이 튜토리얼에서는 watsonx.data 데이터를 수집하고, 시간 이동 및 테이블 롤백 작업을 수행하는 과정을 안내합니다.
- 데이터 수집
-
데이터 수집은 watsonx.data 데이터를 가져와서 로드하는 프로세스입니다. 다음과 같은 방법으로 watsonx.data 데이터 수집을 수행할 수 있습니다:
- 데이터 관리자 페이지에서 파일에서 테이블 만들기 옵션을 사용하여 데이터를 수집합니다.
- SQL 쿼리를 사용하여 데이터 수집.
- '
IBM-lh' 명령줄 도구를 사용하여 데이터를 수집합니다. - Spark 엔진을 사용하여 데이터를 수집합니다.
자세한 내용은 데이터 수집을 참조하세요.
- 시간 여행
-
Apache Iceberg 테이블의 시간 이동 기능을 사용하면 테이블 기록을 가져오고 검사할 수 있습니다. 테이블 스냅샷을 사용하여 시간 이동 기능을 지원합니다. 테이블 스냅샷은 특정 시점의 테이블 상태를 나타냅니다. Iceberg는 테이블을 생성하거나 수정(삽입, 업데이트, 삭제)할 때 테이블 스냅샷 레코드를 생성합니다. 그런 다음 이 스냅샷 레코드를 사용하여 쿼리하여 테이블 세부 정보를 확인할 수 있습니다.
Hive 테이블은 시간 이동 기능을 지원하지 않습니다.
- 롤백
- 테이블 롤백 기능을 사용하면 테이블 스냅샷을 사용하여 테이블을 이전 시점으로 롤백할 수 있습니다.
유스 케이스 시나리오
여러분이 회사의 데이터 엔지니어이고 회사 데이터베이스에서 자동차 기록을 관리하는 임무를 맡고 있다고 가정해 보겠습니다. 스토리지에 있는 기존 데이터 레코드를 업로드합니다. 기존 테이블에 새 데이터 집합을 추가합니다. 검토 후 추가된 새 데이터 집합이 적절하지 않다는 것을 확인하고 테이블을 이전 상태로 롤백하기로 결정합니다.
다음 동영상은 이 설명서의 개념과 작업을 시각적으로 학습할 수 있는 방법을 제공합니다.
목표
- Spark 엔진을 사용하여 테이블을 만들고 샘플 데이터를 테이블에 로드합니다.
- '
cars' 테이블에 더 많은 레코드를 로드합니다. - 테이블 스냅샷을 사용하여 테이블 레코드를 검색합니다.
- 테이블 롤백 작업을 수행합니다.
시작하기 전에
- https://ibm.box.com/v/data-cars-csv에서
cars.csv' 파일을 다운로드합니다. - Lite 요금제 인스턴스가 프로비저닝되어 있어야 합니다.
- 라이트 요금제 인스턴스에는 실행 중인 상태의 스파크 및 Presto 엔진이 포함되어야 합니다.
- 카탈로그를 Presto 스파크 엔진 모두에 연결합니다. 여기, Apache Iceberg 카탈로그.
프로시저
테이블 만들기 및 데이터 로드
이 섹션에서는 Spark 엔진을 사용하여 ' cars '이라는 이름의 테이블을 생성하고 데이터 프레젠테이션 ' cars.csv 파일을 수집하는 절차를 안내합니다.
-
watsonx.data 콘솔에 로그인하십시오.
-
탐색 메뉴에서 데이터 관리자를 선택합니다.
-
데이터 수집을 클릭하고 로컬 시스템을 선택합니다. 데이터 수집 방법에 대한 자세한 내용은 로컬 시스템에서 데이터 수집하기를 참조하세요.
-
데이터 찾아보기 탭을 클릭합니다. Iceberg 카탈로그를 새로 고침하여 새 스키마와 데이터가 포함된 테이블을 확인합니다. 테이블 열, 시간 이동, 데이터 샘플 및 DDL 탭을 볼 수 있습니다.
-
시간 여행을 클릭합니다. 테이블에 '
406레코드가 있음을 확인할 수 있습니다.
테이블에 더 많은 레코드 로드
여러 트랜잭션(두 개의 트랜잭션)을 수행하여 ' cars 테이블을 업데이트합니다. 첫 번째 트랜잭션에서는 ' TESLA ' 모델에 대한 다른 두 개의 자동차 레코드를 수집하고, 두 번째 트랜잭션에서는 Kia Optima' 모델에 대한 하나의 레코드를 수집합니다.
그렇게 하려면:
-
워크스페이스 쿼리로 이동합니다.
-
Presto 엔진을 선택합니다.
-
다음 SQL 쿼리를 사용하여 첫 번째 데이터 집합을 '
cars' 테이블에 삽입합니다.INSERT INTO iceberg_data.automobiles.cars VALUES ('Tesla Model S', 102, 0, 0, 670, 4766, 3.1, 2023, 'USA'), ('Tesla Model 3', 134, 0, 0, 283, 3582, 5.8, 2023, 'USA'); -
쿼리를 실행하십시오. 데이터가 추가되고 총 레코드는 '
408입니다. -
다음 SQL 쿼리를 사용하여 두 번째 데이터 집합을 '
cars' 테이블에 삽입합니다.INSERT INTO iceberg_data.automobiles.cars VALUES ('Kia Optima', 27, 4, 2457, 185, 3200, 8.5, 2023, 'South Korea'); -
쿼리를 실행하십시오. 데이터가 추가되고 총 레코드가 '
409'이 됩니다. -
데이터 관리자로 이동합니다.
-
테이블을 선택합니다
cars. 자동차 섹션에서 시간 여행 탭을 선택합니다. 데이터 트랜잭션에 해당하는 스냅샷 레코드( SnapshotID 포함)를 볼 수 있습니다.
테이블 스냅샷을 사용하여 테이블 레코드 검색.
이 튜토리얼의 이 섹션에서는 테이블 스냅샷을 사용하여 테이블 레코드를 검색하는 절차를 안내합니다. 감사 및 규제 목적으로 데이터를 검색하기 위해 쿼리를 실행합니다.
-
워크스페이스 쿼리로 이동합니다.
-
다음 쿼리를 실행하여 수행된 세 개의 삽입 트랜잭션에 해당하는 스냅샷 레코드를 검색합니다.
SELECT * FROM iceberg_data.automobiles."cars$snapshots" ORDER BY committed_at;결과 세트에는 스냅샷_id, 날짜, 시간, 시간대가 포함된 3개의 스냅샷 레코드가 포함됩니다. 이 튜토리얼에서는 각 트랜잭션의 SnapshotID, 날짜, 시간을 다음과 같이 참조합니다:
<Tran1Time>, '<Tran1SnapshotID>' , '<Tran2Time>' , '<Tran2SnapshotID>, '<Tran3Time>' , '<Tran3SnapshotID>' 입니다.데이터 관리자 > '
cars' 테이블 > 시간 이동 탭에서 스냅샷 레코드를 볼 수도 있습니다. -
다음 쿼리에서 스냅샷 ID 또는 시간을 입력하고 쿼리를 실행하여 해당 시점의 테이블 정보를 검색합니다.
| 시나리오 | 조회 | 결과 |
|---|---|---|
| 스냅샷 ID를 사용하여 초기 상태의 데이터를 검색합니다. | SELECT * FROM iceberg_data.automobiles.cars FOR VERSION AS OF <Tran1SnapshotID> ORDER BY Snapshot ID; |
결과 섹션에 406개의 레코드가 표시됩니다. |
| 타임스탬프를 사용하여 초기 상태의 데이터를 검색합니다. | SELECT * FROM iceberg_data.automobiles.cars FOR TIMESTAMP AS OF CAST('<Tran1Time>' AS TIMESTAMP WITH TIME ZONE) ORDER BY Snapshot ID; |
결과 섹션에는 406개의 레코드가 표시됩니다. |
| 스냅샷 ID를 사용하여 초 단위 트랜잭션 이후의 데이터를 검색합니다. | SELECT * FROM iceberg_data.automobiles.cars FOR VERSION AS OF <Tran2SnapshotID> ORDER BY Snapshot ID; |
결과 섹션에는 408개의 레코드가 표시됩니다. |
| 타임스탬프를 사용하여 세 번째 트랜잭션 이후의 데이터를 검색합니다. | SELECT * FROM iceberg_data.automobiles.cars FOR TIMESTAMP AS OF CAST('<Tran3Time>' AS TIMESTAMP WITH TIME ZONE) ORDER BY Snapshot ID; |
결과 섹션에는 409개의 레코드가 표시됩니다. |
| 두 번째 트랜잭션과 세 번째 트랜잭션 사이의 특정 시점의 데이터를 검색합니다. | SELECT * FROM iceberg_data.automobiles.cars FOR TIMESTAMP AS OF CAST('Choose-a-time-between-<Tran2Time>-and-<Tran3Time>' AS TIMESTAMP WITH TIME ZONE) ORDER BY Snapshot ID; |
결과 섹션에는 408개의 레코드가 표시됩니다. |
| 테이블이 생성되기 전의 데이터를 검색합니다(실패할 것으로 예상됨). | SELECT * FROM iceberg_data.automobiles.cars FOR TIMESTAMP AS OF CAST('2024-01-01 00:00:00.000 UTC' AS TIMESTAMP WITH TIME ZONE) ORDER BY Snapshot ID; |
기록을 찾을 수 없습니다. |
테이블 롤백 수행
watsonx.data 사용하면 스냅샷을 사용하여 테이블을 이전 시점으로 롤백할 수 있습니다.
테이블 데이터를 이전 스냅샷으로 롤백하려면 다음과 같이 하세요:
-
데이터 관리자로 이동합니다.
-
테이블을 선택합니다
cars. 자동차 섹션에서 시간 여행 탭을 선택합니다. 스냅샷 레코드( SnapshotID 사용)를 볼 수 있습니다. -
두 번째 스냅샷의 행 끝에 있는 오버플로 메뉴를 클릭하고(두 번째 스냅샷에는 408개의 레코드가 포함됩니다) 스냅샷으로 롤백을 클릭합니다. 스냅샷으로의 롤백 확인 창이 열립니다. 스냅샷으로 롤백을 클릭합니다. 데이터 롤백이 성공했습니다. 이제 테이블에 408개의 레코드가 있어야 합니다.
-
롤백을 확인하려면 다음 쿼리를 실행하여 세 번째 트랜잭션에 해당하는 행이 제거되었는지 확인합니다.
- 샘플 쿼리를 통해 테이블에 'Kia Optima' 레코드가 포함되어 있지 않은지 확인합니다.
SELECT * FROM iceberg_data.automobiles.cars WHERE car IN ('Kia Optima', 'Tesla Model S', 'Tesla Model 3');결과에는 '테슬라 모델 S'와 '테슬라 모델 3'에 해당하는 데이터 기록만 나열됩니다. 테이블이 이제 두 번째 스냅샷으로 롤백되었으므로 테이블에 'Kia Optima'(세 번째 트랜잭션)에 해당하는 레코드가 없습니다.
- 테이블의 총 행 수를 계산하는 샘플 쿼리입니다.
SELECT COUNT(*) FROM iceberg_data.automobiles.cars;테이블에서 두 번째 트랜잭션을 수행했을 때의 행 수와 일치하는 408개의 행 수가 표시되어야 합니다. 테이블이 이전(두 번째 트랜잭션) 상태로 돌아갑니다.