Guava Table를 활용한 다차원 데이터 관리

다차원 데이터 구조는 여러 개의 인덱스로 데이터를 분류하고 접근하는 방식을 의미합니다. Guava Table은 기본적으로 2차원 데이터 구조를 제공하지만, 이를 통해 더 복잡한 다차원 데이터 모델을 구현할 수 있습니다.

1. 중첩된 Table을 이용한 다차원 데이터 구현

가장 간단한 방법은 하나의 Table 내부에 또 다른 Table을 포함시키는 것입니다. 예를 들어, 날짜, 지역, 지표를 세 가지 차원으로 사용하여 시간 시퀀스 데이터를 표현할 수 있습니다.


import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Table;

public class MultiDimensionalTableExample {

    public static void main(String[] args) {
        // 3차원 Table 정의: 날짜 -> 지역 -> 지표
        Table> multiDimTable = HashBasedTable.create();

        // 지역-지표 Table 생성 및 데이터 추가
        Table regionMetrics = HashBasedTable.create();
        regionMetrics.put("매출", 5000);
        regionMetrics.put("이익", 800);

        // 날짜와 지역에 따른 데이터 저장
        multiDimTable.put("2024-11-01", "서울", regionMetrics);

        // 다른 지역 데이터 추가
        Table regionMetrics2 = HashBasedTable.create();
        regionMetrics2.put("매출", 6000);
        regionMetrics2.put("이익", 900);
        multiDimTable.put("2024-11-01", "부산", regionMetrics2);

        // 특정 값 조회
        Table seoulData = multiDimTable.get("2024-11-01", "서울");
        Integer sales = seoulData.get("매출");
        System.out.println("2024년 11월 1일 서울 매출: " + sales); // 출력: 5000

        Table busanData = multiDimTable.get("2024-11-01", "부산");
        Integer profit = busanData.get("이익");
        System.out.println("2024년 11월 1일 부산 이익: " + profit); // 출력: 900
    }
}

2. 다차원 데이터의 쿼리 및 순회

다차원 데이터 구조에서 데이터를 쿼리하거나 순회하려면, 각 차원별 키 집합을 사용하여 깊게 접근할 수 있습니다.


public class QueryMultiDimensionalTable {

    public static void main(String[] args) {
        Table> multiDimTable = HashBasedTable.create();

        // 데이터 생성 및 추가
        Table metrics1 = HashBasedTable.create();
        metrics1.put("매출", 7000);
        metrics1.put("이익", 1000);
        multiDimTable.put("2024-11-01", "대구", metrics1);

        Table metrics2 = HashBasedTable.create();
        metrics2.put("매출", 8000);
        metrics2.put("이익", 1100);
        multiDimTable.put("2024-11-01", "인천", metrics2);

        // 모든 차원의 데이터 순회
        for (String date : multiDimTable.rowKeySet()) {
            System.out.println("날짜: " + date);
            for (String region : multiDimTable.columnKeySet()) {
                Table regionData = multiDimTable.get(date, region);
                System.out.println("지역: " + region);
                for (Map.Entry entry : regionData.entrySet()) {
                    System.out.println(entry.getKey() + ": " + entry.getValue());
                }
            }
        }
    }
}

3. Map과 Table을 결합하여 더 많은 차원 지원

더 많은 차원(예: 4차원 이상)을 처리하려면 Map과 Table을 결합하여 사용할 수 있습니다. 이 방법을 통해 복잡한 다차원 데이터 모델을 효과적으로 관리할 수 있습니다.


import java.util.HashMap;
import java.util.Map;

public class NestedTableForHigherDimensions {

    public static void main(String[] args) {
        // 4차원 데이터 구조: 연도 -> 월 -> 지역 -> 지표
        Map>> nestedTable = new HashMap<>();

        // 지역-지표 Table 생성 및 데이터 추가
        Table regionMetrics = HashBasedTable.create();
        regionMetrics.put("매출", 12000);
        regionMetrics.put("이익", 1500);

        // 월별 Table 생성 및 데이터 저장
        Table> yearTable = HashBasedTable.create();
        yearTable.put("2024", "1월", regionMetrics);
        nestedTable.put("2024", yearTable);

        // 4차원 데이터 조회
        Table januaryData = nestedTable.get("2024").get("1월");
        Integer januarySales = januaryData.get("매출");
        System.out.println("2024년 1월 매출: " + januarySales); // 출력: 12000
    }
}

태그: Guava java 다차원 데이터 Table map

6월 19일 21:25에 게시됨