Spark에서의 데이터베이스 & 테이블 관리
Catalog
- Spark에서 테이블과 뷰에 대한 메타데이터를 관리하는 시스템
- 메모리 기반 카탈로그 : Spark 세션이 끝나면 메타데이터가 사라짐
- Hive와 호환되는 카탈로그 : Persistent 카탈로그로, 세션 종료 후에도 테이블, 뷰 유지
테이블 관리 방식
- 테이블은 데이터베이스라는 폴더와 같은 구조로 관리
- 2단계 구조 : 데이터베이스 -> 테이블
- 2단계 구조 : 데이터베이스 -> 테이블
테이블 유형
- 메모리 기반 테이블/뷰
- 임시 테이블로, 세션 중에만 유효
- 세션 종료시 사라짐
- 예시
# 메모리 기반 임시 테이블 생성 예시
data = [(1, 'Alice'), (2, 'Bob')]
df = spark.createDataFrame(data, ['id', 'name'])
# DataFrame을 메모리 기반 테이블로 등록
df.createOrReplaceTempView("memory_table")
# 메모리 기반 테이블에 대한 SQL 쿼리 실행
result = spark.sql("SELECT * FROM memory_table WHERE id = 1")
result.show()
- 스토리지 기반 테이블
- 기본적으로 HDFS와 Parquet 포맷을 사용하여 데이터 저장
- Hive와 호환되는 메타스토어 사용
- 종류
- Managed Table
- 데이터와 메타데이터 모두 Spark가 관리
- 테이블 삭제 시 데이터도 함께 삭제
- UnManaged(External) Table
- 데이터는 외부에서 관리하고 Spark는 메타데이터만 관리
- 테이블 삭제 시 데이터 삭제 X
- Managed Table
- 예시
# Managed Table 생성 예시
spark.sql("CREATE TABLE managed_table (id INT, name STRING) USING parquet")
# 데이터 삽입
spark.sql("INSERT INTO managed_table VALUES (1, 'Alice'), (2, 'Bob')")
# 테이블 삭제
spark.sql("DROP TABLE managed_table") # 테이블 삭제 시, 데이터도 함께 삭제됨
# External Table 생성 예시
spark.sql("""
CREATE TABLE external_table (id INT, name STRING)
USING parquet
LOCATION '/path/to/external/data'
""")
# 데이터 삽입 (외부 파일 경로에 저장)
spark.sql("INSERT INTO external_table VALUES (1, 'Alice'), (2, 'Bob')")
# 테이블 삭제
spark.sql("DROP TABLE external_table") # 테이블 삭제 시, 데이터는 삭제되지 않음
'데이터 > Spark' 카테고리의 다른 글
[Spark] 6. Spark Execution Plan (0) | 2024.12.03 |
---|---|
[Spark] 5. File Format (0) | 2024.12.03 |
[Spark] 3. Spark SQL (0) | 2024.12.02 |
[Spark] 2. Spark Session (0) | 2024.12.02 |
[Spark] 1. Spark? (1) | 2024.11.28 |