Athena for Spark には、計算コードのブロックサイズの上限が 68,000 文字という既知の制限があります。この制限を超えるコードブロックで計算を実行すると、次のエラーメッセージが表示されることがあります。
「codeBlock」の「...」は制約を満たすことができませんでした。メンバーの長さは 68,000 以下である必要があります
このエラーは、Athena コンソールのノートブックエディターで以下の画像のように表示されます。

次の例のように、AWS CLI を使用して大きなコードブロックが含まれる計算を実行した場合にも、同じエラーが発生する場合があります。
aws athena start-calculation-execution \ --session-id "
{SESSION_ID}
" \ --description "{SESSION_DESCRIPTION}
" \ --code-block "{LARGE_CODE_BLOCK}
"
このコマンドでは、次のエラーメッセージが表示されます。
{LARGE_CODE_BLOCK}
「codeBlock」の「...」は制約を満たすことができませんでした。メンバーの長さは 68,000 以下である必要があります
回避方法
この問題を回避するには、クエリや計算コードが含まれるファイルを 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)