다차원 데이터 구조는 여러 개의 인덱스로 데이터를 분류하고 접근하는 방식을 의미합니다. 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
}
}