Topik ini menjelaskan cara menggunakan Schemaless Query di MaxCompute untuk membaca file Parquet yang dihasilkan oleh Spark SQL dan mengekspor hasil komputasi ke OSS menggunakan perintah UNLOAD. Contoh ini menggunakan kluster E-MapReduce Serverless Spark.
Prasyarat
Sebuah ruang kerja EMR Serverless Spark telah dibuat.
Topik ini menggunakan wilayah China (Hangzhou) sebagai contoh. Nama ruang kerja adalah
schemaless_test, dan nama Bucket OSS adalahoss-mc-test.Sebuah Proyek MaxCompute telah dibuat.
Langkah 1: Hasilkan data Parquet berdasarkan Serverless Spark
Masuk ke Konsol E-MapReduce. Di panel navigasi sebelah kiri, pilih .
Di halaman Spark, klik nama ruang kerja yang telah dibuat. Di halaman EMR Serverless Spark, klik Data Development di panel navigasi sebelah kiri.
Buat pekerjaan Spark SQL, masukkan perintah SQL berikut untuk membuat tabel dalam format Parquet dan menulis data ke dalamnya, lalu klik Run.
PentingSebelum menjalankan perintah berikut, pastikan direktori data dan database yang dipilih di pojok kanan atas halaman terhubung dengan jalur Bucket OSS yang telah dibuat.
CREATE TABLE example_table01 ( id INT, name STRING, age INT ) USING PARQUET; INSERT INTO example_table01 VALUES (1, 'Alice', 30), (2, 'Bob', 25), (3, 'Charlie', 35), (4, 'David', 40), (5, 'Eve', 32), (6, 'Frank', 28), (7, 'Grace', 33), (8, 'Hannah', 29), (9, 'Ian', 36), (10, 'Julia', 31); SELECT * FROM example_table01;Gambar berikut menunjukkan contoh keluaran.

Setelah pekerjaan berhasil dieksekusi, Anda dapat melihat tabel
example_table01yang dihasilkan di halaman Metadata di Konsol Pembentukan Danau Data.
Anda juga dapat melihat file Parquet yang dihasilkan di direktori Bucket OSS.

Langkah 2: Baca data menggunakan Schemaless Query
Untuk informasi lebih lanjut, lihat kueri tanpa skema.
Saat Anda menulis data ke tabel Parquet, file bernama _SUCCESS akan dihasilkan. Anda harus menggunakan parameter file_pattern_blacklist untuk menambahkan file _SUCCESS ke blacklist sehingga file ini tidak dibaca. Jika Anda tidak menambahkan parameter ini, kesalahan akan terjadi.
SELECT * FROM
LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/example_table01/'
(
'file_format'='parquet',
'file_pattern_blacklist'='.*_SUCCESS.*'
);Hasil berikut dikembalikan:
+------------+------------+------------+
| id | name | age |
+------------+------------+------------+
| 1 | Alice | 30 |
| 2 | Bob | 25 |
| 3 | Charlie | 35 |
| 4 | David | 40 |
| 5 | Eve | 32 |
| 6 | Frank | 28 |
| 7 | Grace | 33 |
| 8 | Hannah | 29 |
| 9 | Ian | 36 |
| 10 | Julia | 31 |
+------------+------------+------------+Langkah 3: Lakukan perhitungan menggunakan SQL
Kueri jumlah total orang yang berusia lebih dari 30 tahun.
SELECT COUNT(*) FROM
LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/example_table01/'
(
'file_format'='parquet',
'file_pattern_blacklist'='.*_SUCCESS.*'
)
WHERE age>30;Hasil berikut dikembalikan:
+------------+
| _c0 |
+------------+
| 6 |
+------------+Langkah 4: Ekspor hasil perhitungan ke OSS menggunakan perintah UNLOAD
MaxCompute memungkinkan Anda mengekspor data dari proyek MaxCompute ke penyimpanan eksternal seperti OSS untuk digunakan oleh mesin komputasi lainnya. Untuk informasi lebih lanjut, lihat UNLOAD.
Jalankan perintah berikut di MaxCompute untuk mengekspor hasil perhitungan dari Langkah 3: Lakukan perhitungan menggunakan SQL ke OSS dalam format Parquet.
Sebelum menjalankan kode berikut, Anda harus membuat direktori
unload_schemalessdi Bucket OSSoss-mc-test.UNLOAD FROM ( SELECT COUNT(*) FROM LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/example_table01/' ('file_format'='parquet','file_pattern_blacklist'='.*_SUCCESS.*') WHERE age>30 ) INTO LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/unload_schemaless/' ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' WITH SERDEPROPERTIES ('odps.properties.rolearn'='acs:ram::<uid>:role/AliyunODPSDefaultRole') STORED AS PARQUET PROPERTIES('mcfed.parquet.compression'='SNAPPY') ;Masuk ke Konsol OSS untuk memeriksa apakah operasi UNLOAD berhasil.
