Bu konu, E-MapReduce Serverless Spark kümesi örneği üzerinden MaxCompute'te Schemaless Query özelliğinin nasıl kullanılacağını gösterir. Senaryoda, Spark SQL tarafından oluşturulan Parquet dosyaları okunur ve sonuçlar UNLOAD komutu kullanılarak Object Storage Service (OSS) hizmetine aktarılır.
Ön Koşullar
-
Bir EMR Serverless Spark çalışma alanına sahip olmalısınız.
Bu konuda örnek olarak China (Hangzhou) bölgesi kullanılmıştır. Çalışma alanı adının
schemaless_test, OSS paketi adının iseoss-mc-testolduğu varsayılmıştır. Bir MaxCompute projesine sahip olmalısınız.
1. Adım: Serverless Spark kullanarak Parquet verisi oluşturma
E-MapReduce konsolunda oturum açın. Sol gezinme bölmesinde seçeneğini belirleyin.
Spark sayfasında çalışma alanınızın adına tıklayın. EMR Serverless Spark sayfasında sol gezinme bölmesinden Data Development seçeneğine tıklayın.
-
Bir Spark SQL işi oluşturun. Parquet tablosu oluşturmak ve bu tabloyu verilerle doldurmak için aşağıdaki SQL komutlarını girin. Ardından Run düğmesine tıklayın.
ÖnemliAşağıdaki komutları çalıştırmadan önce sayfanın sağ üst köşesinde seçili olan veri dizini ve veritabanının OSS paket yolunuzla eşleştiğinden emin olun.
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; -
Çalıştırma işlemi başarılı olduktan sonra oluşturulan
example_table01tablosunu Data Lake Formation konsolundaki Metadata sayfasında görüntüleyebilirsiniz. Metadata sayfasında Tables sekmesini seçerek oluşturduğunuz example_table01 tablosunu görebilirsiniz. Tablo Parquet formatındadır.Parquet dosyalarını OSS paketinizde de görüntüleyebilirsiniz.
example_table01/dizininde bir_SUCCESSişaretçi dosyası ve iki adet.snappy.parquetveri dosyası bulunur. Bu durum, Parquet verilerinin başarıyla yazıldığını gösterir.
2. Adım: Schemaless Query kullanarak verileri okuma
MaxCompute'te Parquet dosyalarının okunması hakkında daha fazla bilgi edinmek için bkz. Schemaless Query.
Spark, bir Parquet tablosuna veri yazdığında _SUCCESS adlı bir işaretçi dosyası oluşturur. MaxCompute'in bu dosyayı veri dosyası olarak okumasını ve hata oluşmasını önlemek için file_pattern_blacklist parametresini kullanarak _SUCCESS dosyasını engelleme listesine eklemelisiniz.
SELECT * FROM
LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/example_table01/'
(
'file_format'='parquet',
'file_pattern_blacklist'='.*_SUCCESS.*'
);
Aşağıdaki sonuç döndürülür:
+------------+------------+------------+
| 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 |
+------------+------------+------------+
3. Adım: SQL kullanarak hesaplama yapma
Yaşı 30'dan büyük olan kişilerin sayısını sorgulayın.
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;
Aşağıdaki sonuç döndürülür:
+------------+
| _c0 |
+------------+
| 6 |
+------------+
4. Adım: Sonucu OSS'e aktarma
MaxCompute kullanarak verileri OSS gibi harici depolama alanlarına aktarabilir ve diğer hesaplama motorlarının kullanımına sunabilirsiniz. Ayrıntılı bilgi için bkz. UNLOAD.
-
3. Adımdaki hesaplama sonucunu Parquet formatında OSS'e aktarmak için MaxCompute'te aşağıdaki komutu çalıştırın.
Aşağıdaki kodu çalıştırmadan önce
oss-mc-testOSS paketindeunload_schemalessdizinini oluşturmanız gerekir.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') ; UNLOAD işleminin başarılı olduğunu doğrulamak için OSS konsolunda oturum açın.