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

AnalyticDB:演算子

最終更新日:Jun 13, 2024

AnalyticDB for MySQLは、基本的なデータ処理ロジックを完了します。 演算子を組み合わせて使用するか、演算子の順序と実行方法を最適化して、データ処理効率を向上させることができます。 このトピックでは、AnalyticDB for MySQLでサポートされている一般的な演算子とそのプロパティについて説明します。

背景情報

AnalyticDB for MySQLは、基本的なデータ処理ロジックを完了します。 演算子のセットは、実行計画に基づいてデータの処理規則のセットを完成させる。 AnalyticDB for MySQLの分散システムでは、ほとんどのオペレーターが複数のノードで並行してコンピューティングジョブを完了し、データ処理効率を向上させることができます。

AnalyticDB for MySQLのSQL診断機能を使用して、プロパティを持つ演算子と演算子レベルの診断結果を表示できます。 詳細については、「オペレーターレベルの診断結果」および「実行計画を使用してクエリを分析する」トピックの「オペレーター層の実行計画階層グラフ」セクションをご参照ください。

説明

特定の演算子のみがプロパティを持ちます。

集約

AnalyticDB for MySQLは、複数のノードでの並列集計操作を可能にする分散データベースサービスです。 通常の集約とグループ化ベースの集約の詳細については、「グループ化と集約クエリの最適化」をご参照ください。 Aggregation演算子は、SUM()COUNT()AVG() などの関数を使用して、データに対して通常の集計またはグループ化ベースの集計を実行します。

次の表に、Aggregation演算子のプロパティを示します。

プロパティ

説明

GroupByKeys

グループ化に使用されるフィールド。

AggregationFunctions

使用される集計関数 (SUM()COUNT()AVG() など) 。

説明

GROUP BY句にSELECTフィールドが含まれておらず、他の集計関数が使用されていない場合、システムはARBITRARY() 関数を呼び出して、グループから値をランダムに返します。 詳細については、集計関数のトピックの「ARBITRARY」セクションを参照してください。

手順

現在の集計ステージ。 有効な値:

  • PARTIAL: 部分集約。

  • FINAL: 最終集計。

  • SINGLE: シングルステップ集約。最終的な集約が直接実行されることを指定します。

DistinctLimit

この演算子は、SQL文のDISTINCT LIMIT操作に相当します。

フィルター

AnalyticDB for MySQLは、次のタイプのデータフィルタリングをサポートしています。

  • データソースフィルタリング: ストレージレイヤーのデータインデックスは、データをフィルタリングするために使用されます。

    説明

    データソースのフィルタリングプロセスを表すために独立演算子は使用されません。 このプロセスのフィルタ条件は、TableScan演算子に反映されます。 詳細については、このトピックの「TableScan」セクションを参照してください。

  • 非データソースフィルタリング: ストレージ層のデータはインデックス化されません。 フィルター演算子を使用して、コンピューティングレイヤーでデータをフィルター処理する必要があります。

デフォルトでは、AnalyticDB for MySQLはすべてのフィールドのインデックスを作成します。 ただし、次のシナリオでは、フィルター条件はプッシュダウンされません。

  • クエリ文でno_index_columnsまたはfilter_not_pushdown_columnsヒントが使用されている場合、またはクラスターでadb_config filter_not_pushdown_columns構成が使用されている場合、フィルター条件のプッシュダウン機能は無効になります。

  • CASTなどの関数は、フィルタ条件で使用されます。

  • フィルター条件の関連列にはインデックスがありません。 たとえば、テーブルを作成するときにno_indexキーワードを使用したり、テーブルの作成後にno_indexステートメントを実行してインデックスを削除したりします。

この場合、AnalyticDB for MySQLはフィルター演算子を使用してデータをフィルターします。

フィルター演算子のプロパティを次の表に示します。

プロパティ

説明

フィルター

フィルター演算子のフィルター条件。

参加

この演算子は、SQL文のJOIN操作に相当します。 AnalyticDB for MySQLで分散テーブルを作成する場合、distributed by句を使用して配布フィールドを指定する必要があります。 データ再配布のタイプは、ジョインキーが配布フィールドとして使用されるかどうかによって決定されます。 データの再配布の詳細については、このトピックの「RemoteExchange」セクションを参照してください。

次の表に、Join演算子のプロパティを示します。

プロパティ

説明

基準

結合条件。 例: tb_1.col_a=tb_2.col_a

データ型

結合タイプ。 AnalyticDB for MySQLでは、INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOINの4種類の結合を使用できます。

方式

結合アルゴリズム。 AnalyticDB for MySQLでは、2種類の結合アルゴリズムを使用できます。

  • ハッシュ: ハッシュ結合アルゴリズムは、小さなテーブルをメモリにキャッシュし、小さなテーブルのハッシュテーブルを使用して別のテーブルと結合して一致を見つけます。

  • インデックス: インデックス結合アルゴリズムは、AnalyticDB for MySQLのフルカラムインデックス機能に基づいて結合キーのインデックスを使用します。

JoinFilter

結合のフィルター条件。The filter conditions in a join.

制限

この演算子は、SQL文のLIMIT操作に相当します。

MarkDistinct

この演算子は、SQL文のCOUNT(DISTINCT) 操作に相当します。

説明
  • MarkDistinct演算子は、SQL文に2つ以上のCOUNT(DISTINCT) 操作が含まれる場合にのみ使用されます。

  • SQL文にCOUNT(DISTINCT) 操作が1つしか含まれていない場合、AnalyticDB for MySQLは自動的にAggregation演算子を使用します。 詳細については、このトピックの「集約」セクションを参照してください。

プロジェクト

この演算子は、CASE WHEN THEN制御フロー文やCONCAT() 関数など、SQL文の特定のフィールドに対する射影演算と同等です。

次の表に、Project演算子のプロパティを示します。

プロパティ

説明

ProjectExpression

プロジェクション式。

RemoteExchange

この演算子は、上流ステージから下流ステージにデータを転送するために使用される方法を示します。 次の方法を使用できます。

  • ブロードキャスト: 上流ステージの各計算ノードのデータがコピーされ、下流ステージのすべての計算ノードに転送されます。

  • 再分割: 上流ステージの各計算ノードのデータは、特定のルールに基づいて分割され、下流ステージの指定された計算ノードに分散されます。

  • 収集: 上流ステージの各計算ノードのデータは、下流ステージの特定の計算ノードに集中されます。

詳細については、「実行計画を使用してクエリを分析する」トピックの「ステージ層の実行計画階層グラフ」をご参照ください。

RemoteSource

この演算子は、現在のステージの入力データがネットワークを介してリモートノードから転送されることを示します。

RemoteSource演算子のプロパティを次の表に示します。

プロパティ

説明

OutputColumns

RemoteSourceオペレータによってエクスポートされるフィールド。

ステージ出力

このオペレータは、現在のステージで処理されたデータを、ネットワークを介して下流のステージのノードに転送する。

ソート

この演算子は、SQL文のORDER BY操作に相当します。 この演算子は、ORDER BY句のフィールドをソートします。

次の表に、ソート演算子のプロパティを示します。

プロパティ

説明

OrderBy

データのソートに使用されるフィールド。

注文

データがソートされる順序。 有効な値:

  • ASC_NULLS_FIRST: データは昇順でソートされ、NULL値はNULL以外の値の前に返されます。

  • ASC_NULLS_LAST: データは昇順でソートされ、NULL値はNULL以外の値の後に返されます。

  • DESC_NULLS_FIRST: データは降順でソートされ、NULL値はNULL以外の値の前に返されます。

  • DESC_NULLS_LAST: データは降順でソートされ、非NULL値の後にNULL値が返されます。

SortMerge

このオペレータは、分散ソート中に、上流段の複数のノードから転送されたデータをマージしてソートする。

TableScan

この演算子は、データソースからデータを読み取ります。 基になるデータソースは、インデックスを使用してデータをフィルタリングできます。

次の表に、TableScan演算子のプロパティを示します。

プロパティ

説明

TableName

スキャンされたデータが属するテーブルの名前。

SelectFields

TableScanノードによってスキャンされるフィールド。

データベース

スキャンされたデータが属するデータベースの名前。

FilterPushDown

フィルター条件をストレージノードにプッシュダウンするかどうかを指定します。

説明

このプロパティは、現在のステージにフィルター条件が含まれている場合にのみ表示されます。

PushedDownFilter

ストレージノードにプッシュダウンされるフィルター条件。

説明

このプロパティは、現在のステージにフィルター条件が含まれている場合にのみ表示されます。

TableWriter

INSERT INTOやREPLACE INTOなどのETL (extract-transform-load) ジョブを実行するSQL文を使用してデータを照会した後、この演算子はデータをテーブルに書き込みます。

TopN

この演算子は、SQL文のORDER BY LIMIT m,n操作に相当します。

次の表に、TopN演算子のプロパティを示します。

プロパティ

説明

OrderBy

データのソートに使用されるフィールド。

集計

この演算子は、SQL文のORDER BY LIMIT操作に相当します。

注文

データがソートされる順序。 有効な値:

  • ASC_NULLS_FIRST: データは昇順でソートされ、NULL値はNULL以外の値の前に返されます。

  • ASC_NULLS_LAST: データは昇順でソートされ、NULL値はNULL以外の値の後に返されます。

  • DESC_NULLS_FIRST: データは降順でソートされ、NULL値はNULL以外の値の前に返されます。

  • DESC_NULLS_LAST: データは降順でソートされ、非NULL値の後にNULL値が返されます。

手順

TopN演算子の実行ステップ。 有効な値:

  • PARTIAL: 分散ソート中、各ノードのデータは部分的にソートされます。

  • SORTMERGE: 部分的にソートされたデータに対して最終的なマージとソートが実行されます。

  • シングル: 最終的なマージとソートは、データに対して直接実行されます。

Offset

この演算子は、SQL文のORDER BY OFFSET操作に相当します。

Union

この演算子は、SQL文のUNION操作に相当します。

ウィンドウ

この演算子は、SQL文のウィンドウ関数に相当します。 詳細については、「ウィンドウ関数」をご参照ください。