68k 코드 블록 크기 한도 문제 해결
Athena for Spark에서 알려진 계산 코드 블록 크기 한도는 6만 8,000자입니다. 이 한도를 초과하는 코드 블록을 사용하여 계산을 실행하면 다음과 같은 오류 메시지가 나타날 수 있습니다.
'...' at 'codeBlock' failed to satisfy constraint: Member must have length less than or equal to 68000
다음 이미지는 Athena 콘솔 노트북 편집기에서 발생한 이 오류를 보여줍니다.
다음 예제와 같이 코드 블록이 큰 계산을 실행하기 위해 AWS CLI를 사용할 때도 같은 오류가 발생할 수 있습니다.
aws athena start-calculation-execution \ --session-id "
{SESSION_ID}
" \ --description "{SESSION_DESCRIPTION}
" \ --code-block "{LARGE_CODE_BLOCK}
"
이 명령은 다음과 같은 오류 메시지를 표시합니다.
{LARGE_CODE_BLOCK}
at 'codeBlock' failed to satisfy constraint: Member must have length less than or equal to 68000
차선책
이 문제를 해결하려면 쿼리 또는 계산 코드가 있는 파일을 Amazon S3에 업로드합니다. 그런 다음 boto3를 사용하여 파일을 읽고 SQL 또는 코드를 실행합니다.
다음 예제에서는 SQL 쿼리 또는 Python 코드가 있는 파일을 Amazon S3에 이미 업로드했다고 가정합니다.
SQL 예제
다음 코드 예제는 Amazon S3 버킷에서 large_sql_query.sql
파일을 읽고 파일에 포함된 대형 쿼리를 실행합니다.
s3 = boto3.resource('s3') def read_s3_content(
bucket_name
,key
): response = s3.Object(bucket_name
,key
).get() return response['Body'].read() # SQL sql = read_s3_content('bucket_name
', 'large_sql_query.sql') df = spark.sql(sql)
PySpark 예제
다음 코드 예제는 Amazon S3에서 large_py_spark.py
파일을 읽고 파일에 있는 대형 코드 블록을 실행합니다.
s3 = boto3.resource('s3') def read_s3_content(
bucket_name
,key
): response = s3.Object(bucket_name
,key
).get() return response['Body'].read() # PySpark py_spark_code = read_s3_content('bucket_name
', 'large_py_spark.py') exec(py_spark_code)