AWS

AWS Glue에서 hdbcli 를 이용해 SAP BW 데이터를 S3에 저장하기

whistory 2023. 1. 4. 10:43
반응형

 

 

 

SAP BW 에서도 데이터를 가져와 했다.

 

SAP은 처음이다. (RFC와 ODATA는 해봤지만)

SAP 엔지니어가 jdbc를 통해 SAP에 붙을 수 있도록 환경 설정을 해주었다.

 

hdbcli 라이브러를 이용해 접속을 해보려고한다.

 

일단 hdbcli 라이브러리를 S3에 업로드하고,

 

Glue 에서

[Advanced properties] - [Python library path] 에 업로드한 라이브러리의 S3 경로를 입력해준다.

 

s3://bucket_name/hdbcli-2.14.23-cp34-abi3-manylinux1_x86_64.whl

 

일단 테이블 정보를 확인해본다.

from hdbcli import dbapi
import os
import pandas as pd

## SAP BW connection
conn = dbapi.connect(
    address='host',
    port=port,
    user='user',
    password='password',
    database='database'
)
cursor = conn.cursor()

sql = 'SELECT * FROM SYS.TABLE_COLUMNS WHERE TABLE_NAME="T100"'
cursor = conn.cursor()
cursor.execute(sql)
for row in cursor:
    print(row)

 

 

 

 

 

 

접속이 정상적으로 이루어지는 것을 확인했다.

 

 

 

쿼리 문법을 잘 몰라 헤맨부분인데,

쿼리할때 테이블 명을

 

SAPHANADB."TABLENAME" 이렇게 줘야 하더라..

 

 

 

그럼 이제 S3에 저장한다.

from hdbcli import dbapi
import os
import pandas as pd

## SAP BW connection
conn = dbapi.connect(
    address='host',
    port=port,
    user='user',
    password='password',
    database='database'
)
cursor = conn.cursor()
cursor.execute('SELECT ARBGB, MSGNR, SPRSL, TEXT FROM SAPHANADB."T100"')
row = cursor.fetchall()

Dataname = ['ARBGB','MSGNR','SPRSL','TEXT']

df = pd.DataFrame(row, columns=Dataname)
print(df)

conn.close()

bucket_name = "bucket_name"
prefix = "prefix"
tempFileName = "file.parquet"

result = f"s3://{bucket_name}/{prefix}/{tempFileName}"
df.to_parquet(result
            , engine='pyarrow'
            , index=False)

print(f"complete ==> {result}")

 

반응형