반응형
1억 건이 넘는 데이터를 한 파일로 S3에 저장했다.
parquet 파일로 저장을 했고, 파일이 2GB가 넘는다.
Athena에서 count 쿼리를 날려보니 1억 2천 건이다.
Select * FROM table
명령어를 날려본다.
조회하는데 12분이 걸린다.
해당 데이터는 날짜기준 컬럼이 있다.
이 컬름을 기준으로 파티셔닝을 진행해본다.
spark 의 partitionBy() 를 사용한다.
partitionBy 에서 파티셔닝 할 컬럼명을 입력해준다.
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
## database information
server_name = "jdbc:sqlserver://serverip:port"
database_name = "database"
table_name = "table"
username = "user"
password = "password"
## s3 bucket information
bucket_name = "bucket_name"
target1_name = "prefix1"
url = server_name + ";" + "databaseName=" + database_name + ";"
jdbcDF = spark.read \\
.format("com.microsoft.sqlserver.jdbc.spark") \\
.option("url", url) \\
.option("dbtable", f"dbo.{table_name}") \\
.option("user", username) \\
.option("password", password).load()
jdbcDF.write.format('parquet') \\
.partitionBy("ymd_id") \\
.mode("overwrite") \\
.save(f"s3://{bucket_name}/{target1_name}/{database_name }/{table_name}/")
print(f"upload path = s3://{bucket_name}/{target1_name}/{database_name}/{table_name}/")
job = Job(glueContext)
job.init(args['JOB_NAME'], args)
job.commit()
반응형
'AWS' 카테고리의 다른 글
AWS Glue에서 ngdbc 를 이용해 SAP HANA CLOUD 데이터를 S3에 저장하기 (0) | 2023.01.04 |
---|---|
AWS Glue에서 hdbcli 를 이용해 SAP BW 데이터를 S3에 저장하기 (0) | 2023.01.04 |
AWS Glue에서 Spark를 이용해 MSSQL 데이터를 S3에 저장하기 (0) | 2022.12.26 |
AWS Glue에서 pymssql 을 이용해 MSSQL 데이터를 S3에 저장하기 (0) | 2022.12.26 |
KOSIS openAPI 를 AWS Glue 에서 실행해보기 (1) | 2022.12.13 |