すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:スキーマレスクエリを使用してレイク上の Parquet データを読み取る

最終更新日:Jul 24, 2025

このトピックでは、MaxCompute でスキーマレスクエリを使用して、Spark SQL によって生成された Parquet ファイルを読み取り、UNLOAD コマンドを使用して計算結果を OSS にエクスポートする方法について説明します。 この例では、E-MapReduce Serverless Spark クラスタを使用します。

前提条件

ステップ 1:Serverless Spark に基づいて Parquet データを生成する

  1. E-MapReduce コンソールにログインします。 左側のナビゲーションウィンドウで、[EMR Serverless] > [Spark] を選択します。

  2. [Spark] ページで、作成したワークスペースの名前をクリックします。 [EMR Serverless Spark] ページで、左側のナビゲーションウィンドウの [データ開発] をクリックします。

  3. 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;

    次の図は出力例を示しています。

    image

  4. タスクが正常に実行された後、Data Lake Formation コンソール[メタデータ] ページで、生成された example_table01 テーブルを表示できます。image

    生成された Parquet ファイルは、OSS バケットディレクトリでも表示できます。image

ステップ 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」をご参照ください。

  1. MaxCompute で次のコマンドを実行して、ステップ 3:SQL を使用して計算を実行する の計算結果を Parquet 形式で OSS にエクスポートします。

    次のコードを実行する前に、OSS バケット oss-mc-testunload_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')
    ;
  2. OSS コンソールにログインして、UNLOAD 操作が成功したかどうかを確認します。image