Cette rubrique utilise un cluster E-MapReduce Serverless Spark comme exemple pour montrer comment utiliser Schemaless Query dans MaxCompute afin de lire des fichiers Parquet générés par Spark SQL, puis exporter les résultats vers Object Storage Service (OSS) à l'aide de la commande UNLOAD.
Prérequis
-
Vous disposez d'un espace de travail EMR Serverless Spark.
Cette rubrique utilise la région Chine (Hangzhou) comme exemple. Supposons que l'espace de travail est nommé
schemaless_testet que le compartiment OSS est nomméoss-mc-test. Vous disposez d'un projet MaxCompute.
Étape 1 : Générer des données Parquet à l'aide de Serverless Spark
Connectez-vous à la console E-MapReduce. Dans le volet de navigation de gauche, sélectionnez .
Sur la page Spark, cliquez sur le nom de votre espace de travail. Sur la page EMR Serverless Spark, cliquez sur Data Development dans le volet de navigation de gauche.
-
Créez une tâche Spark SQL, saisissez les commandes SQL suivantes pour créer une table Parquet et la remplir avec des données, puis cliquez sur Run.
ImportantAvant d'exécuter les commandes ci-dessous, assurez-vous que le répertoire de données et la base de données sélectionnés dans le coin supérieur droit de la page sont associés au chemin de votre compartiment OSS.
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; -
Une fois l'exécution terminée avec succès, consultez la table
example_table01générée sur la page Metadata de la console Data Lake Formation. Sur la page Metadata, sélectionnez l'onglet Tables pour afficher la table example_table01 créée. La table est au format Parquet.Vous pouvez également visualiser les fichiers Parquet dans votre compartiment OSS. Dans le répertoire
example_table01/, vous trouverez un fichier marqueur_SUCCESSet deux fichiers de données.snappy.parquet. Cela indique que les données Parquet ont été écrites avec succès.
Étape 2 : Lire les données à l'aide de Schemaless Query
Pour en savoir plus sur la lecture des fichiers Parquet dans MaxCompute, consultez la rubrique Schemaless Query.
Lorsque Spark écrit des données dans une table Parquet, il génère un fichier marqueur nommé _SUCCESS. Utilisez le paramètre file_pattern_blacklist pour ajouter le fichier _SUCCESS à la liste de blocage. Cela empêche MaxCompute de le lire comme un fichier de données, ce qui provoquerait une erreur.
SELECT * FROM
LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/example_table01/'
(
'file_format'='parquet',
'file_pattern_blacklist'='.*_SUCCESS.*'
);
Le résultat suivant s'affiche :
+------------+------------+------------+
| 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 |
+------------+------------+------------+
Étape 3 : Effectuer des calculs à l'aide de SQL
Interrogez le nombre de personnes âgées de plus de 30 ans.
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;
Le résultat suivant s'affiche :
+------------+
| _c0 |
+------------+
| 6 |
+------------+
Étape 4 : Exporter le résultat vers OSS
Utilisez MaxCompute pour exporter des données vers un stockage externe, tel qu'OSS, afin de les rendre disponibles pour d'autres moteurs de calcul. Pour plus de détails, consultez la rubrique UNLOAD.
-
Exécutez la commande suivante dans MaxCompute pour exporter le résultat du calcul de l'étape 3 vers OSS au format Parquet.
Avant d'exécuter le code ci-dessous, créez le répertoire
unload_schemalessdans le compartiment 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') ; Connectez-vous à la console OSS pour vérifier que l'opération UNLOAD a réussi.