Mengatasi batas ukuran blok kode 68k - Amazon Athena

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengatasi batas ukuran blok kode 68k

Athena untuk Spark memiliki kode perhitungan batas ukuran blok dikenal 68000 karakter. Ketika Anda menjalankan perhitungan dengan blok kode di atas batas ini, Anda dapat menerima pesan galat berikut:

'...' di 'CodeBlock' gagal memenuhi kendala: Anggota harus memiliki panjang kurang dari atau sama dengan 68000

Gambar berikut menunjukkan kesalahan ini di editor notebook konsol Athena.

Pesan kesalahan ukuran blok kode di editor notebook Athena

Kesalahan yang sama dapat terjadi saat Anda menggunakanAWS CLIuntuk menjalankan perhitungan yang memiliki blok kode besar, seperti pada contoh berikut.

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

Perintah memberikan pesan galat berikut:

{LARGE_CODE_BLOCK}di 'CodeBlock' gagal memenuhi kendala: Anggota harus memiliki panjang kurang dari atau sama dengan 68000

Solusi

Untuk mengatasi masalah ini, unggah file yang memiliki kueri atau kode perhitungan Anda ke Amazon S3. Kemudian, gunakan boto3 untuk membaca file dan menjalankan SQL atau kode Anda.

Contoh berikut mengasumsikan bahwa Anda telah mengunggah file yang memiliki kueri SQL atau kode Python ke Amazon S3.

Contoh SQL

Contoh kode berikut membacalarge_sql_query.sqlfile dari bucket Amazon S3 dan kemudian menjalankan kueri besar yang berisi file tersebut.

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)

PySparkcontoh

Contoh kode berikut membacalarge_py_spark.pyfile dari Amazon S3 dan kemudian menjalankan blok kode besar yang ada di 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)