メタデータの末尾にスキップ
メタデータの先頭に移動

この章では、Clustrix プランナが最適な実行プランを見つけるために使われるオペレータをリスト表示します。EXPLAINの使用と解釈についての詳細は、Clustrix Explain Output を見てください。 

オペレータ

Clustrix has a streaming model which streams rows starting from containers (tables and indexes) and through a graph of operators. Clustrix has a rich set of operators that occasionally increase as more functionality and optimizations are added. We've decided to use one place for documenting our operators, logical and physical. explainの出力には物理的なオペレータが現れますが、論理的なオペレータは現れません。ですので、これはあなたが見るだろうオペレータの上位集合です。

一般的なオペレータ

これらはMySQLのプロンプトのexplainの出力で見るかも知れない一般的なオペレータです。

 

オペレータ
引数
詳細
例:
display(REFS [output_cast]) INPUT_ROW

ユーザに出力を表示します。

output_cast: Optional argument, if present display should promoter values for mysql protocol
REFS : 出力のスキーマリファレンス
INPUT_ROW : 行

 
stream_combine() INPUT_ROW

個々のストリームを生成する入力を取り(index_scanのように
分散すべきもの)、一つのストリームに結合します。このことは、
stream_combinの下のオペレータは並行して実行されるだろうことを意味します。

INPUT_ROW := bulk operator for separate input paths

 
stream_merge () INPUT_ROW

stream_combineに似ていて、個々のストリームを入力として取り
一つのストリームに結合しますが、このオペレータは
結合時に入力の順番を保持します。ソートキーは
opt_ctxから取られます。

INPUT_ROW := bulk operator for separate input paths

 
index_scan (NAMESPACE RELOID REPOID COLS . PROPS) EQUAL LOW HIGH NULLF?

リプリゼンテーションをスキャンします。名前空間はリレーションごとにユニークです。

NAMESPACE := vs32
RELOID := リレーションのオブジェクトID
REPOID := インデックスのオブジェクトID
COLS := 必要とされるカラムのリスト
PROPS := list of 0 or more of: read_reverse, read_all, read_latest
EQUAL := range denoting values to constrain in both low and high
(range equal ...)
LOW := 追加の下の制限。(range open/closed ...)
HIGH := 上の制限; LOWに似ています
NULLF := NULL filters ap_select.ct を見てください

 
table_scan (NAMESPACE OID COLS . PROPS) . EXPRNAMESPACE := どの名前空間かを示すvs32
OID := テーブルのオブジェクトID
COLS := 必要とされるカラムのリスト
PROPS := list of 0 more of: update, use_index, force_index
EXPR := 出力に適用する制限のリスト
 
filter () INPUT_ROW EXPR...

入力にフィルタを適用します。

EXPR := item operator; null, 0, および false は透過されます
INPUT_ROW := bulk operator providing rows

 
row_limit CALC_FOUND_ROWS INPUT_ROW LVAL OVAL

生成された行の数の制限。このオペレータは十分な行があると以前の入力オペレータが行を生成するのを止めることができます。

CALC_FOUND_ROWS := boolean
INPUT_ROW := bulk operator providing rows
LVAL := item operator for limit expression
OVAL := optional item operator for offset expression

 
row_count NAME INPUT_ROW生成される行の数を数えます。Assigns to NAME. 
user_const VALUEユーザが渡した定数。VALUE := 定数。 
const VALUEVALUE := 定数。 
ref (NAMESPACE . NAME)NAMESPACE := 名前空間のvs32
NAME := カラム名の文字列
 
param (VALUE)VALUE := u32 denoting which prepared parameter it is 
rangeMODE EXPR...MODE := closed, open, equal
EXPR := 範囲内の各カラムの表現
 
force_prop PROP INPUT_ROWPhysical operator that forces a property on its input.
PROP は以下のうちの一つです
(sort KEYS) := force sort over list of KEYS
(limit LIMVAL OFFVAL) := force limit
 
func OP EXPRS...

Function

OP := オペレータのシンボル
EXPRS := 1 or more item operators

 
mtable_scan (NAMESPACE SET? NELEMS . TYPES) MTABLE

メモリテーブルを実際のテーブルであるかのようにスキャンします。

NAMESPACE := カラムが現れる値空間
SET?:= whether this is an ordered set, or just a bag of blobs
NELEMS := mtableの中の要素の数
TYPES := カラムの種類のoidvs
MTABLE := item operator that provides the mtable blob

 
mtable_build (COLS) . EXPRS

メモリテーブルを構築します。IN セットは、時々メモリテーブルに変換されます。

COLS := 使用するカラム名のリスト(0 名前空間内)
EXPRS := list of (tuple () (param...) (param...) ...)
Denotes psuedo-mtable that should be built from previous constants.

 
mtable_find (NAMESPACE . TYPES) INPUT MTABLE EQUAL

メモリテーブル内で値を見つけます。

NAMESPACE := カラムが現れる値空間
TYPES := カラムの種類のoidvs
INPUT := bulk input
MTABLE := item operator that provides the mtable blob
EQUAL := range denoting values to constrain in both low and high
(range equal ...)

 
table_lock (RELOID LOCK) EXPR

Grabs one or more table locks for the duration of the subexpression.

RELOID := ロックするテーブルのoid
LOCK := Lock シンボル
EXPR := 通過される行の発生器

 
table_locks NUMLOCKS EXPR

Placeholder for properly costing table locks.

NUMLOCKS := vs32 of the number of table locks to grab
EXPR := 行の発生器

 
pk_lock (NAMESPACE OID COLS LOCK) INPUT . PKREFS

きめの細かいロックをするために使われます

NAMESPACE := vs32
OID := テーブルのオブジェクトID
COLS := columns to bind
LOCK := 行ロックシンボル
INPUT := bulk operator
PKREFS := ロックするプライマリキーの値を示すrefsのリスト

 
pk_lookup (NAMESPACE RELOID REPOID COLS . PROPS) INPUT PKSARGE

Used to lookup which fine grained lock to take.

NAMESPACE := vs32
RELOID := リレーションのオブジェクトID
REPOID := インデックスのオブジェクトID
COLS := columns to bind/rebind
INPUT := bulk operator
PKSARGE := range denoting exact sarge on baserep

 
table_write (OID REFS . PROPS) INPUT_ROWOID := テーブルのオブジェクトID
REFS := 各カラムで使うための値を含んでいるスキーマリファレンス
PROPS := list of 0 or more of: ignore, replace, impdflt,
serialize, multirow, lock_dst_x, lock_dst_s
INPUT_ROW := bulk operator that produces rows
カラムは入力行スキーマから取られます
 
table_delete (OID REFS) INPUT_ROWOID := テーブルのオブジェクトID
REFS := 各カラムで使うための値を含んでいるスキーマリファレンス
INPUT_ROW := bulk operator that produces rows
カラムは入力行スキーマから取られます
 
table_update (OID OLD_REFS NEW_REFS . PROPS) INPUT_ROWOID := テーブルのオブジェクトID
OLD_REFS := 古いカラムの値を表すスキーマリファレンス
NEW_REFS := カラムの値を表すスキーマリファレンス
PROPS := list of 0 or more of: ignore, serialize
INPUT_ROW := bulk operator that produces rows with old/new column values
 

集合オペレータ

集合オペレータは GROUP BY および DISTINCT オペレーションを実行します。

オペレータ
引数
詳細
例:
aggregate

(KEY AGG_EXPR ONEOF) INPUT_ROW

論理的なオペレータ。物理的な集合の一つとして実装されています。-
hash_aggregate(KEY AGG_EXPR ONEOF) INPUT_ROWsigmaを使用します。ソートされていない出力を生成します。 
sigma_aggregate(KEY AGG_EXPR ONEOF) INPUT_ROWsigmaを使用します。KEYでソートされた出力を生成します。 
stream_aggregate(KEY AGG_EXPR ONEOF) INPUT_ROWブロッキングしません。入力のソート順(があれば)を維持します。 
dist_stream_aggregate(KEY AGG_EXPR ONEOF) INPUT_ROW複数のノード上(分割された入力)のstream_aggregate 
hash_aggregate_partial(KEY AGG_EXPR ONEOF) INPUT_ROW複数のノード上のhash_aggregate 
hash_aggregate_combine(KEY AGG_EXPR ONEOF) INPUT_ROW_partialからの結果を消費するhash_aggregate 
distinct _KEYS INPUT_ROW論理的なdistinctオペレータ。物理的なdistinctオペレータの一つとして実装されています。 
sigma_distinct _KEYS INPUT_ROW_KEYSのための値のdistinctセットあたり一行だけをもつ出力を生成します。 
sigma_distinct_combine_KEYS INPUT_ROWsigma_distinct_partialからの結果をsigma distinctします。 
sigma_distinct_partial_KEYS INPUT_ROW複数のノード上のsigma_distinct 
sort (KEY) INPUT_ROW

論理的なsortオペレータ。入力に整列を強制します。

KEY := list of (STYPE REF)
if STYPE := ソートの種類 (ASC, DSC, IFNULL)
REF := スキーマリファレンス
else STYPE:= ソートの種類 GROUP
REF := スキーマリファレンスのリスト

 
sigma_sort () INPUT_ROW [LIMIT]sigmaを使って入力の整列を強制します。コンテキストはソートキーを持ち、従って入力には決して現れません。 
表記法
説明
スキーマリファレンス

(NAMESPACE . NAME)

NAMESPACE: どの名前空間かを表すvs32 (AUTOGEN = 0)

NAME: カラム名の文字列

KEYグループ化する時にキーとして使うスキーマリファレンスのリスト
_KEYSdistinctするためのキー
AGG_EXPR(NAME FUNC DISTINCT REF)のリスト
NAME集合の場合は、これはAUTOGEN (=0)名前空間内のこの値の新しいスキーマ名を意味します。
FUNCシンボルとしての集合関数(sum, max, min, count)
DISTINCTこの集合関数はdistinct入力上で操作されるか?
REFスキーマリファレンス
ONEOFList of schema references to pass for aggregate oneof
INPUT_ROWBulk operator providing rows
LIMIT(optional) item operator representing max # rows

Join オペレータ

Join オペレータは入れ子のループjoinの左側を実行します。joinは分散されているため、hash_joinなどはClustrixのストリーミングモデルとは適合しません。

オペレータ
書式
詳細
例:
inner_joinSTRAIGHT? INPUT1 INPUT2 . _EXPR

論理的なオペレータ。物理的なjoinとして実装されています。

-
nljoinONE_TO_ONE INPUT1 INPUT2入れ子のループ join。INPUT1の各行が読み込まれ、INPUT2の正しい次の場所に送られます。 
nljoin_parONE_TO_ONE INPUT1 INPUT2Same as nljoin, differs in certain parallelization properties, primarily exists to make mechanics of optimizer work. 
left_joinSTRAIGHT? INPUT1 INPUT2 . _EXPR

STRAIGHTは常にtrueのため、INPUT1はinput2の前に読み込まれます。また、INPUT2に一致する行がない場合は、NULLの値が代用されます。

 
left_semi_join(PROBEREF) INPUT1 INPUT2 . _EXPRINPUT1とINPUT2のleft semi-joinを実行し、右側が1以上を返すものに対して左側からどのような行でも返します。 
item_joinJTYPE INPUT_ROW IT_EXPRitem_join is a placeholder for subquery expressions where item operators contain bulk operators. IT_EXPR is item operator. 
msjoinONE_TO_ONE INPUT1 INPUT2Merge sort nested-loop join. nljoinに似ていますが、ソート順を維持することができます。 
outer() INPUT1left outer join の右半分。 
outer_fwd() INPUT1 [INPUT2]

left outer join の右半分。

This form of outer performs the outer calculation on a single node, which makes it much more efficient, but can only be applied in some cases.

The optional INPUT2 bulk operator does not affect cardinality.

 
dual ()一つの行を生成します。 
表記法
説明
STRAIGHT右の前に左のリレーションを読むように強制します。
INPUT1bulk operator for the left side
INPUT2bulk operator for the right side
EXPR0 or more item operators representing join constraints
PROBEREFoptional ref indicating whether the semi-join succeeded
ONE_TO_ONEwhether INPUT2 only has a cardinality of 1 or not
JTYPE is oneof
(inner) - attach via inner_join
(semi PROBEREF) - attach via left_semi_join

その他のオペレータ

これらは残りのオペレータで、いくつかは論理的で、いくつかは物理的です。 

 

オペレータ
書式
詳細
例:
genoid NAME INPUT_ROW

ユニークなidを生成します。

NAME := 新しいoidを割り当てるための名前
INPUT_ROW := bulk operator, one oid is generated for each row

 
lock_choice NUMLOCKS INPUT

全ての入力に対して、全ての行ロックまたは全てのテーブルロックのどちらかを強制します。
INPUT.

NUMLOCKS := vs32 of the number of locks to grab
INPUT := bulk operator for the rows to lock

 
any () BULK_EXPR EXPRBULK_EXPR := rows to look through
EXPR := test to apply for matches
 

check_scalar

check_scalar_expr

() INPUT_ROW

REF INPUT_ROW

Errors out if input contains more than 1 row.

INPUT_ROW := bulk operator providing rows
REF := reference to return

 
compute (NAMES TYPE) INPUT_ROW EXPR0 ...NAMES := a list of new schema names for these values (in the AUTOGEN
namespace)
TYPE := normal, fake, serialized
INPUT_ROW := bulk operator for rows
EXPRn := item operators for the expressions named in NAMES. 式(and names) are ordered from least dependant to most, so
expressions later in the list can reference names defined
earlier, but not vice-versa.
 
error (RESULT_CODE STRING ARG1...) INPUT_ROW  
exists () BULK_EXPRBULK_EXPR := rows to look through 
ferel_row(NS FEREL TYPE)NS := namespace
FEREL := ferel (for column description)
TYPE := 生成するノードタイプ (t_input など)
 
multi_distinct((NS1 NUMKEY . COLSET1) ...) INPUTNS1 := 最初のsigmaのための名前空間
NUMKEY := colindex for # of keys to distinct on
COLSET1 := 最初のsigmaのためのrefsのリスト
...
INPUT := bulk operator for row generator
 
parallel_apply ソースINPUTSOURCE := bulk operator to apply INPUTs against
INPUT := 1 or more bulk operators that take SOURCE as input
 
read_sigma (NS . COLS)NS := namespace for sigmal
COLS := カラム名のリスト
 
tree_filter () INPUT_ROW EXPR...A special type of filter that pre-evaluates its expression(s), and
then only executes the input if the expression(s) evaluates to true.
This op thus requires that its expressions have no dependencies on
the input.
EXPR := item operator; null, 0, および false は透過されます
INPUT_ROW := bulk operator providing rows
 
tuple () COL1...COL1... := item operator expression for each column
複数のカラムの比較を表すために使われます (in, =, など)
 
union_all (REFS1 REFS2 REFSOUT) INPUT_ROW1 INPUT_ROW2REFS1 := schema references used from INPUT_ROW1
REFS2 := schema references used from INPUT_ROW2
REFSOUT := schema references representing UNION display columns
INPUT_ROW1 := bulk operator providing rows
INPUT_ROW2 := bulk operator providing rows
 
var_assign (SCOPE NAME) VALUESCOPE := global/session/user
NAME := 変数名
VALUE := 変数に割り当てるための値
 
var_read(SCOPE NAME TYPE)SCOPE := global/session/user
NAME := 変数名
TYPE := 変数のoidtype (only for user)
 

 

 

  • ラベルなし
TOP
inserted by FC2 system