Skip to content

Spark to Snowflake 적재 전략

LSH edited this page Sep 10, 2023 · 3 revisions

Snowflake 연결 준비

  • 세션 설정
spark = SparkSession.builder \
    .appName("Snowflake Example") \
    .config("spark.jars.packages", "net.snowflake:snowflake-jdbc:3.13.22,net.snowflake:spark-snowflake_2.12:2.12.0-spark_3.4") \
    .getOrCreate()
  • 연결 정보 지정 (sfOptions)
sfOptions = { 
  "sfURL" : "<account> .snowflakecomputing.com ", 
  "sfAccount" : "<account>", 
  "sfUser" : " <사용자>", 
  "sfPassword": "***", 
  "sfDatabase": "<데이터베이스>", 
  "sfSchema": "<스키마>", 
  "sfWarehouse": "<웨어하우스>", 
}

1. append 전략 → write mode append

result_df.write \
    .format(SNOWFLAKE_SOURCE_NAME) \
    .options(**sf_options) \
    .option("dbtable", "temp") \
    .mode("append") \
    .save()

2. overwrite 전략 → write mode overwrite

  • 컬럼의 형태가 변경되는 것을 방지하기 위해서 sfOptions 옵션을 추가해야 한다
  • 위 옵션을 추가할 경우, df 컬럼 순서대로 테이블에 적재된다
    • 즉 컬럼 명 자동 매핑 을 지원하지 않고, df와 테이블의 컬럼 갯수가 반드시 일치해야 한다
result_df.write \
    .format(SNOWFLAKE_SOURCE_NAME) \
    .options(**sf_options) \
    .option("dbtable", "temp") \
    .mode("overwrite") \
    .save()
sfOptions = { 
   ...
  "truncate_table": " ON", 
  "usestagingtable": "OFF", 
}