데이터 수집, 시간 이동 및 테이블 롤백

이 튜토리얼에서는 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 파일을 수집하는 절차를 안내합니다.

  1. watsonx.data 콘솔에 로그인하십시오.

  2. 탐색 메뉴에서 데이터 관리자를 선택합니다.

  3. 데이터 수집을 클릭하고 로컬 시스템을 선택합니다. 데이터 수집 방법에 대한 자세한 내용은 로컬 시스템에서 데이터 수집하기를 참조하세요.

  4. 데이터 찾아보기 탭을 클릭합니다. Iceberg 카탈로그를 새로 고침하여 새 스키마와 데이터가 포함된 테이블을 확인합니다. 테이블 열, 시간 이동, 데이터 샘플 및 DDL 탭을 볼 수 있습니다.

  5. 시간 여행을 클릭합니다. 테이블에 ' 406 레코드가 있음을 확인할 수 있습니다.

테이블에 더 많은 레코드 로드

여러 트랜잭션(두 개의 트랜잭션)을 수행하여 ' cars 테이블을 업데이트합니다. 첫 번째 트랜잭션에서는 ' TESLA ' 모델에 대한 다른 두 개의 자동차 레코드를 수집하고, 두 번째 트랜잭션에서는 Kia Optima' 모델에 대한 하나의 레코드를 수집합니다.

그렇게 하려면:

  1. 워크스페이스 쿼리로 이동합니다.

  2. Presto 엔진을 선택합니다.

  3. 다음 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');
    
  4. 쿼리를 실행하십시오. 데이터가 추가되고 총 레코드는 ' 408 입니다.

  5. 다음 SQL 쿼리를 사용하여 두 번째 데이터 집합을 ' cars ' 테이블에 삽입합니다.

    INSERT INTO iceberg_data.automobiles.cars VALUES
    ('Kia Optima', 27, 4, 2457, 185, 3200, 8.5, 2023, 'South Korea');
    
  6. 쿼리를 실행하십시오. 데이터가 추가되고 총 레코드가 ' 409'이 됩니다.

  7. 데이터 관리자로 이동합니다.

  8. 테이블을 선택합니다 cars. 자동차 섹션에서 시간 여행 탭을 선택합니다. 데이터 트랜잭션에 해당하는 스냅샷 레코드( SnapshotID 포함)를 볼 수 있습니다.

테이블 스냅샷을 사용하여 테이블 레코드 검색.

이 튜토리얼의 이 섹션에서는 테이블 스냅샷을 사용하여 테이블 레코드를 검색하는 절차를 안내합니다. 감사 및 규제 목적으로 데이터를 검색하기 위해 쿼리를 실행합니다.

  1. 워크스페이스 쿼리로 이동합니다.

  2. 다음 쿼리를 실행하여 수행된 세 개의 삽입 트랜잭션에 해당하는 스냅샷 레코드를 검색합니다.

    SELECT * FROM iceberg_data.automobiles."cars$snapshots" ORDER BY committed_at;
    

    결과 세트에는 스냅샷_id, 날짜, 시간, 시간대가 포함된 3개의 스냅샷 레코드가 포함됩니다. 이 튜토리얼에서는 각 트랜잭션의 SnapshotID, 날짜, 시간을 다음과 같이 참조합니다: <Tran1Time>, ' <Tran1SnapshotID>' , ' <Tran2Time>' , ' <Tran2SnapshotID>, ' <Tran3Time>' , ' <Tran3SnapshotID>' 입니다.

    데이터 관리자 > ' cars ' 테이블 > 시간 이동 탭에서 스냅샷 레코드를 볼 수도 있습니다.

  3. 다음 쿼리에서 스냅샷 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 사용하면 스냅샷을 사용하여 테이블을 이전 시점으로 롤백할 수 있습니다.

테이블 데이터를 이전 스냅샷으로 롤백하려면 다음과 같이 하세요:

  1. 데이터 관리자로 이동합니다.

  2. 테이블을 선택합니다 cars. 자동차 섹션에서 시간 여행 탭을 선택합니다. 스냅샷 레코드( SnapshotID 사용)를 볼 수 있습니다.

  3. 두 번째 스냅샷의 행 끝에 있는 오버플로 메뉴를 클릭하고(두 번째 스냅샷에는 408개의 레코드가 포함됩니다) 스냅샷으로 롤백을 클릭합니다. 스냅샷으로의 롤백 확인 창이 열립니다. 스냅샷으로 롤백을 클릭합니다. 데이터 롤백이 성공했습니다. 이제 테이블에 408개의 레코드가 있어야 합니다.

  4. 롤백을 확인하려면 다음 쿼리를 실행하여 세 번째 트랜잭션에 해당하는 행이 제거되었는지 확인합니다.

    • 샘플 쿼리를 통해 테이블에 '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개의 행 수가 표시되어야 합니다. 테이블이 이전(두 번째 트랜잭션) 상태로 돌아갑니다.