このトピックでは、MaxCompute のリリースノートについて説明し、関連リファレンスへのリンクを提供します。
2025 年 2 月
MaxCompute SQL V50 は、2025 年 2 月に正式リリースされました。このバージョンでは、以下の機能が追加または強化されています。
データ ウェアハウス エンジン
データ形式
DECIMAL データ型でより大きなスケールがサポートされるようになりました。 DECIMAL(precision,scale) の scale 値は、DECIMAL 値の小数部の桁数を示します。
SET odps.sql.decimal2.extended.scale.enable=true;
コマンドを実行すると、scale の範囲を [0, 18] から [0, 38] に拡張できます。 詳細については、「MaxCompute V2.0 データ型エディション」をご参照ください。構文と関数の強化
強化された STRUCT 構文: STRUCT 式の構文がサポートされるようになりました。 この構文を使用すると、名前付き式を使用して STRUCT 型のデータを構築できます。 これは、複合データ型を構築する新しい方法です。
強化された FIND_IN_SET 関数: この関数は、デリミタで区切られた部分文字列で構成される文字列内で部分文字列を検索し、その部分文字列の位置を返すために使用できます。 以前のバージョンの MaxCompute SQL では、この関数のデリミタとしてコンマ (,) のみが使用できました。 強化後、この関数に STRING 型のカスタムデリミタを指定できるようになりました。 これにより、より柔軟な文字列検索が可能になります。 詳細については、「FIND_IN_SET」をご参照ください。
新しいビルトイン関数 GET_DATA_FROM_OSS: この関数は、Object Storage Service (OSS) オブジェクトデータを Object Table からダウンロードし、後続の計算のためにバイナリデータを返すために使用できます。
機能強化
MATERIALIZED CTE: 共通テーブル式 (CTE) を定義する場合、SELECT 文で MATERIALIZE ヒントを使用して CTE の計算結果を一時テーブルにキャッシュできます。 後で CTE にアクセスすると、キャッシュから直接結果を読み取ることができます。 これにより、複数層の CTE ネストシナリオでのメモリ不足 (OOM) の問題が回避され、CTE 文のパフォーマンスが向上します。
Bloom フィルターインデックスの可観測性の向上: Bloom フィルターインデックスのマージにかかった時間が、LogView の [SubStatusHistory] タブに表示されるようになりました。 詳細については、「Bloom フィルターインデックスを生成する」をご参照ください。
マテリアライズドビューの強化: マテリアライズドビューのクエリ書き換え機能が改善され、DISTRIBUTED BY、ORDER BY、ORDER BY + LIMIT、LIMIT など、より多くの演算子がサポートされるようになりました。
パフォーマンスとパラメータのアップグレード
ARRAY_CONTAINS 関数の実行パフォーマンスが向上しました。 文字列検索シナリオでは、オプティマイザは SPLIT 操作を含む入力パラメータを自動的に識別し、デフォルトで関数を同等の FIND_IN_SET 操作に最適化します。 この最適化は、より広範囲のデリミタシナリオもサポートします。 たとえば、
ARRAY_CONTAINS(SPLIT(c1, '_'), c2)
はFIND_IN_SET(c1, c2, '_')
に自動的に最適化され、ARRAY_CONTAINS の実行パフォーマンスが向上します。デフォルトでは、動的パーティション分割の Reshuffle Split 機能が有効になり、動的パーティションの再シャッフルを含むシナリオが最適化されます。 この最適化により、動的パーティションのデータフローが分割され、単一のパスでのみ再シャッフルが実行されるため、動的パーティションの再シャッフルのオーバーヘッドが削減されると同時に、過剰な小ファイルの問題が回避されます。
Shuffle Removal 機能がさらに強化され、MAPJOIN および PARTITIONED HASH JOIN シナリオで不要なシャッフルが排除され、ジョブのパフォーマンスが向上しました。
ニア リアルタイム データ ウェアハウジング
Flink から Delta テーブルへのデータ書き込み
MaxCompute Delta テーブルは、複数のデータ書き込み方法をサポートしています。 MaxCompute は、新バージョンの Flink コネクタ プラグインを提供します。 Flink コネクタ プラグインを使用すると、Flink から MaxCompute 標準テーブルおよび Delta テーブルにデータを書き込むことができます。 これにより、Flink から MaxCompute へのデータ書き込みが容易になります。 また、Flink CDC データを Delta テーブルに直接書き込むこともできます。 詳細については、「Flink を使用して Delta テーブルにデータを書き込む」をご参照ください。
Lakehouse と外部テーブル機能
PARQUET 形式のデータを解析するために外部テーブルを作成する場合、TINYINT、SMALLINT、DATETIME などの一部のデータ型で暗黙的な変換がサポートされます。
MAX_PT 関数を使用して、外部テーブルの最新のパーティションをクエリできます。 この関数を使用して、OSS 外部テーブルのデータを含む最新のパーティションをクエリできます。 詳細については、「MAX_PT」をご参照ください。
2024 年 11 月
MaxCompute SQL V49 バージョンは、2024 年 11 月に正式リリースされました。このバージョンでは、以下の機能が追加または強化されています。
データ ウェアハウス エンジン
新機能
ビットマップインデックス: 多数の重複値がある低カーディナリティ列にビットマップインデックスを作成できます。 範囲フィルタリングのシナリオでは、ビットマップインデックスを使用して最大 50% 以上のデータをフィルタリングできます。 これにより、クエリが高速化されます。 詳細については、「ビットマップインデックス (ベータ)」をご参照ください。
Bloom フィルターインデックス: Bloom フィルターは効率的な確率的データ構造です。 MaxCompute では、Bloom フィルターインデックスを使用して大規模なポイントクエリを実行できます。 これにより、クエリ中の不要なデータスキャンが削減され、全体的なクエリ効率とパフォーマンスが向上します。 詳細については、「Bloom フィルターインデックス (ベータ)」をご参照ください。
ビルトイン関数
ビルトイン関数 JSON_EXPLODE が追加されました。 この関数は、JSON 配列または JSON オブジェクトの各要素を複数の行に展開するために使用されます。 詳細については、「JSON_EXPLODE」をご参照ください。
構文の強化
CREATE TABLE 文で OR REPLACE 句を使用して、テーブルのメタデータを更新できます。 宛先テーブルが既に存在する場合は、テーブルのメタデータを直接更新できます。 テーブルを再作成する前に既存のテーブルを削除する必要はありません。 これにより、SQL 文の使用が簡素化され、使いやすさが向上します。 詳細については、「テーブルの作成と削除」をご参照ください。
MaxCompute SQL スクリプトでは、単一行コメントと複数行コメントを使用して、コードの可読性を向上させることができます。 詳細については、「SQL コメント」をご参照ください。
SUBQUERY_MAPJOIN ヒントがサポートされるようになりました。 SCALAR、IN、EXISTS などの特定のサブクエリは、実行中に JOIN 操作に変換されます。 MAPJOIN アルゴリズムを使用して実行効率を向上させるために、ヒントを明示的に指定できます。 詳細については、「SUBQUERY_MAPJOIN ヒント」をご参照ください。
新しいパラメータ
元のパラメータ
odps.stage.mapper.split.size
は、マップステージの全体設定をサポートしています。 新しいフラグを使用して、行または同時実行性によってテーブルを柔軟に分割できます。 新しいフラグは、テーブルの各行のサイズが小さく、後続の計算操作のワークロードが大きいシナリオでタスクの同時実行性を向上させることができます。 詳細については、「フラグパラメータ」をご参照ください。クエリが同じパーティションテーブルに繰り返しアクセスする場合、
set odps.optimizer.merge.partitioned.table=true;
コマンドを実行して、システムがパーティションテーブルへのアクセス操作をマージできるようにすることができます。 これにより、パーティションテーブルに対する I/O 操作が最小限に抑えられ、クエリのパフォーマンスが向上します。 詳細については、「フラグパラメータ」をご参照ください。
動作の変更
MaxCompute で実行されるすべての DML 操作について、動的パーティションを静的パーティションに変換する機能がデフォルトで有効になっています。 この機能は、クエリのパフォーマンスを向上させるのに役立ちます。 この実装により、UPDATE、DELETE、および MERGE INTO 操作の動作が変更されます。 詳細については、「2024 年のサービスに関するお知らせ」の関連するお知らせをご参照ください。
ビッグデータ AI (MaxFrame)
LogView 2.0 は MaxFrame と互換性があり、以下の MaxFrame 関連機能をサポートしています。 詳細については、「LogView 2.0 を使用して MaxFrame ジョブを表示する」をご参照ください。
MaxFrame セッションで送信されたすべての有向非循環グラフ (DAG) の実行レコードと実行時間を表示できます。
各 DAG のサブ DAG の実行シーケンス、実行時間、演算子トポロジ、およびステータス関係をインタラクティブに表示できます。
各サブインスタンスの設定、ステータス、メモリ使用量、および CPU 使用率を表示できます。
MaxFrame は、Python ベースのジョブ開発におけるサードパーティ パッケージの管理を簡素化するための自動パッケージング サービスを提供します。 このサービスを使用すると、ジョブ開発中に必要な外部依存関係ファイルを宣言できます。 ジョブの実行時に、依存関係ファイルは自動的にパッケージ化され、ジョブ開発環境に統合されます。 パッケージを手動でアップロードする必要はありません。 これにより、パッケージ管理が簡素化されます。 詳細については、「自動パッケージング サービス」をご参照ください。
Lakehouse と外部テーブル機能
JNI インターフェースに基づく Parquet 外部テーブルへのデータ書き込み中に、ZSTD 圧縮がサポートされるようになりました。
この機能が導入される前は、Parquet 外部テーブルを作成するときに、非圧縮ファイルと Snappy ファイルのみを書き込むことができました。 この機能が導入された後、ZSTD 圧縮アルゴリズムを使用して圧縮されたファイルもこのシナリオで書き込むことができるようになりました。 これにより、圧縮率と読み取り/書き込みパフォーマンスが向上し、コスト効率が向上します。 詳細については、「OSS 外部テーブルを作成する」をご参照ください。
CsvStorageHandler と OpenCsvSerde が提供され、データの読み取りと書き込みでより多くのデータ型がサポートされるようになりました。
MaxCompute は、Hive と互換性のある読み取り/書き込み標準 OpenCsvSerde (CsvSerde と呼ばれる) を提供します。 OpenCsvSerde でサポートされるデータ型は、Hive 互換のデータ型です。 MaxCompute は、カスタム読み取り/書き込み標準 CsvStorageHandler (CsvHandler と呼ばれる) も提供します。 CsvStorageHandler でサポートされるデータ型は、MaxCompute V2.0 データ型エディションでサポートされるデータ型です。 CsvSerde と CsvHandler のデータ型は完全に同じではありませんが、INT や FLOAT など、複数の基本データ型の共通部分があります。 ただし、これらのデータ型の解析動作にはまだ多くの違いがあります。 まだ統一された標準は策定されていません。 たとえば、FLOAT 型の場合、CsvSerde は INF などの特殊値の処理を定義します。 ただし、CsvHandler は特殊値を処理せず、parseFloat メソッドを使用して解析のみを試みます。 その結果、CsvHandler と CsvSerde の両方を使用すると、基本データ型の解析動作が同じにならない場合があります。
CsvStorageHandler は、BOOLEAN、TIMESTAMP、DATE、DATETIME など、複数の基本データ型をサポートしています。 これにより、MaxCompute から OSS にすべてのデータ型のデータをエクスポートし、CSV 形式でデータを保存できます。 OSS に基づいてクロスリージョン レプリケーションが実行された後、データを MaxCompute にリストアできます。
OSS 外部テーブルでは、RAM ロールを引き受けることによって STS 認証を実行できます。
この機能は、外部テーブルが関係するシナリオで、RAM ロールを引き受けることによって (AccessKey ペアは不要) MaxCompute にアクセスしたり、RAM ロールを引き受けることによって他のクラウド サービスから MaxCompute にアクセスしたりできるように最適化されています。 この機能が最適化される前は、前述のシナリオでロールを引き受けると、外部テーブルには MaxCompute がピア サービスにアクセスするためのテーブルプロパティと統合された RAM ロールが含まれているため、システムは RAM ロールのユーザー情報を取得できませんでした。 その結果、RAM ロールを引き受けることによって外部テーブルにアクセスできませんでした。 この機能が最適化された後、外部テーブルが関係する場合でも、RAM ロールの使用と RAM ロールに基づくシームレスなアクセスに悪影響が及ぶことはありません。 詳細については、「OSS 外部テーブルを作成する」をご参照ください。
オプティマイザは、クエリ中に一時統計テーブルの統計をサポートして、小さなテーブルを識別し、クエリプランを最適化します。
外部テーブルを使用してクエリされるデータは外部データレイクに保存されるため、データのオープン性を確保するために、システムはローカルでメタデータを確立しません。 この場合、事前に統計を収集しないと、オプティマイザは保守的なポリシーを使用するため、クエリ効率が低下します。 オプティマイザは、クエリ中に一時統計テーブルの統計をサポートして、小さなテーブルを識別するようになりました。 これにより、さまざまな方法を積極的に使用してクエリプランを最適化できます。 これらの方法には、ハッシュ結合操作の実行、結合順序の最適化、多数のシャッフル操作の削減、実行されるパイプラインの短縮などがあります。 詳細については、「OSS データを読み取る」をご参照ください。