Supera il limite di dimensione del blocco di codice di 68k - Amazon Athena

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Supera il limite di dimensione del blocco di codice di 68k

Athena for Spark ha un limite noto di dimensione del blocco del codice di calcolo di 68000 caratteri. Quando esegui un calcolo con un blocco di codice superiore a questo limite, puoi ricevere il seguente messaggio di errore:

'...' at codeBlock 'non ha soddisfatto il vincolo: il membro deve avere una lunghezza inferiore o uguale a 68000

L'immagine seguente mostra questo errore nell'editor di notebook della console Athena.

Messaggio di errore relativo alla dimensione del blocco di codice nell'editor di notebook Athena

Lo stesso errore può verificarsi quando si utilizza il AWS CLI per eseguire un calcolo con un blocco di codice di grandi dimensioni, come nell'esempio seguente.

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

Il comando restituisce il seguente messaggio di errore:

{LARGE_CODE_BLOCK} in «codeBlock» non è riuscito a soddisfare il vincolo: il membro deve avere una lunghezza inferiore o uguale a 68000

Soluzione alternativa

Per risolvere il problema, carica il file contenente la query o il codice di calcolo su Amazon S3. Quindi, usa boto3 per leggere il file ed eseguire il tuo codice or. SQL

Gli esempi seguenti presuppongono che tu abbia già caricato il file contenente la tua SQL query o il codice Python su Amazon S3.

SQLesempio

Il codice di esempio seguente legge il file large_sql_query.sql da un bucket Amazon S3 e quindi esegue la query di grandi dimensioni che il file contiene.

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 esempio

Il seguente esempio di codice legge il file large_py_spark.py da Amazon S3 e quindi esegue il blocco di codice di grandi dimensioni contenuto nel file.

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)