본문 바로가기
데이터&AI/기타개발

[snowflake] 무작정 시작하기 with Python ② - 데이터 올리기

by 일등박사 2024. 8. 17.
728x90

2024.08.16 - [데이터&AI/기타개발] - [snowflake] 무작정 시작하기 with Python ①

 

지난 포스팅에서는 SNOWFLAKE 계정을 만들고 샘플데이터 불러오기를 테스트해보았었는데요!!

오늘은 직접 만든데이터를 올리고 쿼리해보도록 하겠습니다~!!

 

1. 파일로 올리기!!

아래의 간단한 csv 파일로 해볼게요!!

,name,age
0,aaaa,11
1,bbbb,22

 

사이트에 접속해서 파일 올리기부분을 클릭합니다!!

 

 

파일을 올린뒤, 저는 MYSAMPLE DB에 mysample이라는 Table로 올려보았습니다!

 

그리고 데이터의 성격에 대하여 세팅하고 load합니다!!

 

이제 파이썬에서 쿼리해볼까요~!!?

import snowflake.connector
import pandas as pd

# Snowflake 연결 정보
conn = snowflake.connector.connect(
    user='{내ID}',
    password='{pw}',
    account='{내 계정정보, 전 포스팅 참고}',
)
cs = conn.cursor()
cs.execute("select * from  MYSAMPLE.public.mysample")
df = pd.DataFrame(cs.fetchall())
df

 

짠!!! 데이터를 잘 불러왔습니다~!

 

 

2. 파이썬 코드로로 올리기!!

우선 위와 동일하게하여 , conn은 이미 맺어진 상태에서 시작합니다!

 

아래와 같이 DB부터 SCHEMA, Table 까지 만들어줍니다!

cs = conn.cursor()
cs.execute("CREATE DATABASE MYSAMPLE_FROM_PYTHON;")
cs.execute("CREATE SCHEMA MYSAMPLE_FROM_PYTHON.GOGOGO;")
# 테이블 생성 쿼리
cs.execute("""
CREATE TABLE MYSAMPLE_FROM_PYTHON.GOGOGO.SAMPLE_TABLE (
    ID INT,
    Name STRING,
    Age INT,
    Email STRING
);
""")

cs.close()
conn.close()

 

그리고 나면!! snow flake웹에서도 확인이 가능하지요!!

 

 

 

 

이제!!! DataFrame을 내 컴퓨터에서 csv로 저장한 뒤 업로드합니다!!

# 샘플 데이터 생성
data = {
    'ID': [1, 2, 3, 4, 5],
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
    'Age': [25, 30, 35, 40, 45],
    'Email': ['alice@example.com', 'bob@example.com', 'charlie@example.com', 'david@example.com', 'eva@example.com']
}

# DataFrame 생성
sample_df = pd.DataFrame(data)
sample_df
## 데이터를 CSV로 저장하고!!
sample_df.to_csv('python_sample_data.csv', index=False)

# Stage에 파일 업로드
cs.execute("PUT file://python_sample_data.csv @MYSAMPLE_FROM_PYTHON.GOGOGO.SAMPLE1")

print("File uploaded successfully.")

그 다음은!!

# 커서 생성
# 스테이지의 csv 데이터를 복사헤서 테이블에 COPY INTO방식으로 INSERT!!
copy_into_query = """
COPY INTO MYSAMPLE_FROM_PYTHON.GOGOGO.SAMPLE_TABLE
FROM @MYSAMPLE_FROM_PYTHON.GOGOGO.SAMPLE1/python_sample_data.csv
FILE_FORMAT = (TYPE = 'CSV' FIELD_OPTIONALLY_ENCLOSED_BY = '"')
ON_ERROR = 'CONTINUE';
"""
cs.execute(copy_into_query)

 

그리구나면!!!?

cs = conn.cursor()
cs.execute("select * from  MYSAMPLE_FROM_PYTHON.GOGOGO.SAMPLE_TABLE")
df = pd.DataFrame(cs.fetchall())
df

 

짠!! 이렇게 이쁘게~~ 데이터가들어갔습니다!!!

ㅁ 참고!! 왜 테이블에 바로 안넣고 stage에 넣었다가 copy into,로 넣을까요!?
테이블에 바로 데이터를 삽입하지 않고 Staging Area를 사용하는 이유!!!
쉽게 설명하면 효율성을 위해서입니다!!

1. 대량 데이터 처리: Staging Area는 대량의 데이터를 효율적으로 업로드할 수 있도록 설계되었습니다. 대규모 데이터 파일을 직접 테이블에 삽입하면 성능 문제가 발생할 수 있지만, Staging Area를 사용하면 이러한 문제를 완화할 수 있습니다.

2. 데이터 형식 및 품질 관리: Staging Area에서는 파일의 형식, 압축, 데이터 무결성 등을 검토할 수 있습니다. 데이터를 Staging Area에 먼저 업로드한 후, 필요한 변환이나 검사를 거쳐 테이블에 삽입함으로써 데이터 품질을 보장할 수 있습니다.

3. 성능 최적화: Snowflake의 COPY INTO 명령어는 대량의 데이터를 테이블에 삽입할 때 최적화된 성능을 제공합니다. Staging Area에 데이터를 먼저 업로드하고 나중에 삽입하는 방식이 성능 측면에서 더 유리합니다.

4. 데이터 무결성: Staging Area를 사용하면 데이터가 테이블에 복사되기 전에 오류를 처리하고, 필요한 데이터 변환을 수행할 수 있습니다. 이를 통해 최종 테이블의 데이터 무결성을 유지할 수 있습니다.

5. 작업 효율성: 여러 사용자가 동시에 데이터 업로드를 진행할 때, Staging Area를 활용하면 각자의 데이터 작업을 독립적으로 수행할 수 있어 전체적인 데이터 작업 효율성이 향상됩니다.
.

 

이제 다음포스팅에서는

 

cloud native인 snowflake!!

AWS와 연계해서 데이터 넣은 방법을 알아보겠습니다!!!

728x90

댓글