全部产品
Search
文档中心

MaxCompute:Gunakan Schemaless Query untuk membaca data Parquet di danau

更新时间:Jul 24, 2025

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

Langkah 1: Hasilkan data Parquet berdasarkan Serverless Spark

  1. Masuk ke Konsol E-MapReduce. Di panel navigasi sebelah kiri, pilih EMR Serverless > Spark.

  2. Di halaman Spark, klik nama ruang kerja yang telah dibuat. Di halaman EMR Serverless Spark, klik Data Development di panel navigasi sebelah kiri.

  3. Buat pekerjaan Spark SQL, masukkan perintah SQL berikut untuk membuat tabel dalam format Parquet dan menulis data ke dalamnya, lalu klik Run.

    Penting

    Sebelum 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.

    image

  4. Setelah pekerjaan berhasil dieksekusi, Anda dapat melihat tabel example_table01 yang dihasilkan di halaman Metadata di Konsol Pembentukan Danau Data.image

    Anda juga dapat melihat file Parquet yang dihasilkan di direktori Bucket OSS.image

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.

  1. 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_schemaless di Bucket OSS oss-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')
    ;
  2. Masuk ke Konsol OSS untuk memeriksa apakah operasi UNLOAD berhasil.image