プライマリ・コンテンツに移動
Oracle® Big Data Discovery Cloud Service EQLリファレンス

E65371-04
目次へ
目次
索引へ移動
索引

前
次
機械翻訳について

SET関数

SETの集計関数は、単一割当て属性を取得し、その属性からすべての(非NULL)値のセットを構成します。

単一割当て属性には、非データ型(mdex:longなど)があります。 そのため、SET関数は、非セット・データ型属性を取得し、セット・データ型の結果(たとえば、mdex:long-set)を生成します。

SET関数の動作は次のとおりです:
  • NULL値はすべて破棄されます。 つまり、属性に対して2つの非NULL値があり、1つのNULL値がある場合は、2つの非NULL値のみが返されます。
  • 属性にNULL以外の値が含まれていない場合、空のセットが戻されます。
  • 属性内の重複する値は破棄されます。 たとえば、3つのレコードのすべてにWineType=Redの割当があり、そのうちの2つにPrice=14.95の割当(3つ目にはprice=21.95)がある場合、Redセットには2つの価格値(1つの14.95と1つの21.95)のみが返されます。
  • 文字列値は、大文字と小文字が区別されます。 したがって、文字列値"Merlot"は文字列値"merlot"と区別されます。これは、値が重複しないことを意味します。
  • セット内の値の順序は、指定されておらず、監視できません。

結果セットには、設定データ型(mdex:double-setなど)があります。 それ以降のすべての操作は、セットのルールに従う必要があります。

このSET機能は、後述の1つの引数バージョンと2つの引数バージョンで使用できます。 この関数はSELECT句でのみ使用できます。

SET 1引数のバージョン

SET関数の1引数バージョンの構文は、次のとおりです:
SET(<single-assign_attribute>)
属性のデータ型は、非セット・データ型(単一割当て二重属性の場合のmdex:doubleなど)である必要があります。
この例では、Priceは単一割当てのdouble属性です:
RETURN results AS
SELECT
  SET(Price) AS prices
FROM WineState
GROUP BY WineType
ORDER BY WineType
この文の結果は次のようになります:
WineType             prices
---------------------------------------------------------------
| Blanc de Noirs | { 16.99 }                                  |
| Bordeaux       | { 21.99 }                                  |
| Brut           | { 22.99, 23.99 }                           |
| Chardonnay     | { 17.95, 34.95 }                           |
| Merlot         | { 25.99 }                                  |
| Pinot Noir     | { 14.99 }                                  |
| Red            | { 12.99, 13.95, 17.5, 18.99, 21.99, 9.99 } |
| White          | { 20.99, 32.99, 43.99 }                    |
| Zinfandel      | { }                                        |
---------------------------------------------------------------

結果として、ZinfandelにはPrice属性の割当てがないため、Zinfandelでは空のセットがあります。

SET 2引数バージョン

SETアグリゲータの結果が非常に大きくなる(Dgraphで過剰なメモリーが消費される)場合、2引数形式のアグリゲータが設定サイズを制限します。

2引数バージョンのSET関数の構文は、次のとおりです:
SET(<single-assign_attribute>, <max-size>)
説明:
  • single-assign_attributeは、データ型が非セット・データ型(単一割当て文字列属性の場合のmdex:stringなど)である属性です。
  • max-sizeは、セットの最大サイズを指定する整数です。 max-sizeがセット内の要素数より少ない場合、Dgraphでは破棄する要素を任意に選択します。この選択は、問合せの複数の実行にわたって安定しています。 max-sizeが0 (ゼロ)または負の数の場合、SETは常に空のセットを返します。
max-sizeは整数リテラルである必要があることに注意してください:
SET(Price, 3) is valid.

SET(Price, x) is not valid, even if x is an integer.
このサンプル問合せは、問合せによりセットが最大2つの要素に制限されることを除き、1引数の例と同じです:
RETURN results AS
SELECT
  SET(Price, 2) AS prices
FROM WineState
GROUP BY WineType
ORDER BY WineType
この文の結果は次のようになります:
WineType             prices
-------------------------------------
| Blanc de Noirs | { 16.99 }        |
| Bordeaux       | { 21.99 }        |
| Brut           | { 22.99, 23.99 } |
| Chardonnay     | { 17.95, 34.95 } |
| Merlot         | { 25.99 }        |
| Pinot Noir     | { 14.99 }        |
| Red            | { 12.99, 9.99 }  |
| White          | { 20.99, 32.99 } |
| Zinfandel      | { }              |
-------------------------------------

その結果、赤のセットには2つの要素があり、一方の引数のSETバージョンを持つ6つの要素があることに注意してください。 白セットと同様に、以前は3つの要素で構成されています。

データ型エラー

SET 関数を使用する場合、結果セットにはmdex:double-setデータ型などのセット・データ型があることに注意してください。

たとえば、価格が複数割当のdouble属性であるとします。 この不正な例:
RETURN results AS
SELECT SET(Price) AS prices
FROM WineState
GROUP BY WineType
HAVING prices > 10
次のエラーがスローされます:
In statement "results": In HAVING clause: Cannot compare mdex:double-set and mdex:long

このエラーの理由は、価格がmdex:double-setタイプで、mdex:doubleタイプである10の数値と比較されていることです。

そのため、問合せは次のように修正する必要があります:
RETURN results AS
SELECT SET(Price) AS prices
FROM WineState
GROUP BY WineType
HAVING SOME x IN prices SATISFIES (x > 10)

この例では、SATISFIES式によって数値の比較が可能になります。