Dépasser la limite de taille des blocs de code de 68 000 - Amazon Athena

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Dépasser la limite de taille des blocs de code de 68 000

Athena pour Spark a une limite de taille des blocs de code de calcul connue de 68 000 caractères. Lorsque vous exécutez un calcul avec un bloc de code dépassant cette limite, le message d'erreur suivant peut s'afficher :

«... » à « codeBlock » ne satisfaisait pas à la contrainte : le membre doit avoir une longueur inférieure ou égale à 68000

L'image suivante montre cette erreur dans l'éditeur de bloc-notes de la console Athena.

Message d'erreur concernant la taille des blocs de code dans l'éditeur de bloc-notes Athena

La même erreur peut se produire lorsque vous utilisez le AWS CLI pour exécuter un calcul comportant un bloc de code volumineux, comme dans l'exemple suivant.

aws athena start-calculation-execution \ --session-id "{SESSION_ID}" \ --description "{SESSION_DESCRIPTION}" \ --code-block "{LARGE_CODE_BLOCK}"

La commande affiche le message d'erreur suivant :

{LARGE_CODE_BLOCK} à « codeBlock » ne satisfaisait pas à la contrainte : le membre doit avoir une longueur inférieure ou égale à 68000

Solution

Pour contourner ce problème, chargez le fichier contenant votre code de requête ou de calcul sur Amazon S3. Ensuite, utilisez boto3 pour lire le fichier et exécuter votre code SQL or.

Les exemples suivants supposent que vous avez déjà chargé le fichier contenant votre SQL requête ou votre code Python sur Amazon S3.

SQLexemple

L'exemple de code suivant lit le fichier large_sql_query.sql à partir d'un compartiment Amazon S3, puis exécute la requête volumineuse que le fichier contient.

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 exemple

L'exemple de code suivant lit le fichier large_py_spark.py à partir d'Amazon S3, puis exécute le bloc de code volumineux que le fichier contient.

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)