このトピックでは、MaxCompute でスキーマレスクエリを使用して、Spark SQL によって生成された Parquet ファイルを読み取り、UNLOAD コマンドを使用して計算結果を OSS にエクスポートする方法について説明します。 この例では、E-MapReduce Serverless Spark クラスタを使用します。
前提条件
EMR Serverless Spark ワークスペースが作成されている。
このトピックでは、例として 中国 (杭州) リージョンを使用します。 ワークスペース名は
schemaless_testで、OSS バケット名はoss-mc-testです。MaxCompute プロジェクトが作成されている。
ステップ 1:Serverless Spark に基づいて Parquet データを生成する
E-MapReduce コンソールにログインします。 左側のナビゲーションウィンドウで、 を選択します。
[Spark] ページで、作成したワークスペースの名前をクリックします。 [EMR Serverless Spark] ページで、左側のナビゲーションウィンドウの [データ開発] をクリックします。
Spark SQL タスクを作成するで、次の SQL コマンドを入力して Parquet 形式のテーブルを作成し、データを書き込み、[実行] をクリックします。
重要次のコマンドを実行する前に、ページの右上隅で選択したデータディレクトリとデータベースが、作成した 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;次の図は出力例を示しています。

タスクが正常に実行された後、Data Lake Formation コンソールの [メタデータ] ページで、生成された
example_table01テーブルを表示できます。
生成された Parquet ファイルは、OSS バケットディレクトリでも表示できます。

ステップ 2:スキーマレスクエリを使用してデータを読み取る
詳細については、「スキーマレスクエリ」をご参照ください。
Parquet テーブルにデータを書き込むと、_SUCCESS という名前のファイルが生成されます。 file_pattern_blacklist パラメーターを使用して、_SUCCESS ファイルをブラックリストに追加して、このファイルが読み取られないようにする必要があります。 このパラメータを追加しないと、エラーが発生します。
SELECT * FROM
LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/oss-mc-test/example_table01/'
(
'file_format'='parquet',
'file_pattern_blacklist'='.*_SUCCESS.*'
);次の結果が返されます。
+------------+------------+------------+
| 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:SQL を使用して計算を実行する
30 歳以上の人々の総数をクエリします。
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;次の結果が返されます。
+------------+
| _c0 |
+------------+
| 6 |
+------------+ステップ 4:UNLOAD コマンドを使用して計算結果を OSS にエクスポートする
MaxCompute では、MaxCompute プロジェクトから OSS などの外部ストレージにデータをエクスポートして、他のコンピューティングエンジンで使用できます。 詳細については、「UNLOAD」をご参照ください。
MaxCompute で次のコマンドを実行して、ステップ 3:SQL を使用して計算を実行する の計算結果を Parquet 形式で OSS にエクスポートします。
次のコードを実行する前に、OSS バケット
oss-mc-testにunload_schemalessディレクトリを作成する必要があります。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') ;OSS コンソールにログインして、UNLOAD 操作が成功したかどうかを確認します。
