avpath - 述語 - Cloud

Talend Cloud Pipeline Designerユーザーガイド

Version
Cloud
Language
日本語 (日本)
Product
Talend Cloud
Module
Talend Pipeline Designer
Content
ジョブデザインと開発 > パイプラインのデザイン
デプロイメント > デプロイ中 > パイプラインの実行
データガバナンス > データのフィルタリング
データクオリティとプレパレーション > データのフィルタリング
データクオリティとプレパレーション > データセットの管理
管理と監視 > ログの監視
管理と監視 > 実行の監視

avpath述語を使用することで、式を構築する時に選択するアイテムについての具体的なルールを記述できます。述語はロケーションパスで選択されたアイテムを制限するフィルターになります。述語には、2つのタイプがあります: オブジェクトと位置です。

ロケーションパスの詳細は、avpath - ロケーションパスを参照してください。

オブジェクト述語

オブジェクト述語をパス式で使用することで、各アイテムのプロパティを操作するブール式でアイテムのサブセットをフィルタリングできます。オブジェクト述語は波括弧で囲みます。

オブジェクト述語の基本式:
  • 数値リテラル(例: 1.23)

  • 文字列リテラル(例: "John Gold")

  • ブール値リテラル(true/false)

  • サブパス(例: .nestedProp.deeplyNestedProp)

avpathでは、述語式で以下のタイプの演算子を使用できます。
  • 比較演算子

  • 文字列比較演算子

  • 論理演算子

  • 算術演算子

比較演算子

==

両方のオペランドが等しい場合にtrueを返します

.customers{.id == "1"}

===

両方のオペランドが厳密にイコールで、型変換がない場合はtrueを返します

.customers{.id === 1}

!=

オペランドが等しくない場合にtrueを返します

.customers{.id != "1"}

!==

オペランドが等しくない場合、または同じタイプでない場合にtrueを返します

.customers{.id !== 1}

>

左のオペランドが右のオペランドより大きい場合にtrueを返します

.customers{.id > 1}

>=

左のオペランドが右のオペランド以上の場合にtrueを返します

.customers{.id >= 1}

<

左のオペランドが右のオペランドより小さい場合にtrueを返します

.customers{.id < 1}

<=

左のオペランドが右のオペランド以下の場合にtrueを返します

.customers{.id <= 1}

比較ルール:
  • 比較するオペランドが両方とも配列であり、最初の配列と2番目の配列にエレメントがある場合、比較はtrueになり、2つのエレメントの比較を実行した結果はtrueになります。
  • 一方のオペランドが配列で、もう一方が配列でなく、配列にエレメントがある場合、比較はtrueになり、エレメントと別のオペランドの比較の実行の結果はtrueになります。
  • プリミティブは通常のJavaScriptプリミティブとして比較されます。

オペランドが両方とも文字列の場合は、追加の比較演算子を使用できます。

文字列比較演算子

==

通常のと同じですが、大文字と小文字は区別されません

.customers{.Lastname == "Von Celaeno"}

^==

左オペランド値が右オペランド値で始まる場合にtrueを返します

.customers{.Lastname ^== "Celaeno"}

^=

^==と同じですが、大文字と小文字は区別されません

.customers{.Lastname ^= "celaeno"}

$==

左オペランド値が右オペランド値で終わる場合にtrueを返します

.customers{.Lastname $== "Von"}

$=

と同じですが、大文字と小文字は区別されません

.customers{.Lastname $= "von"}

*==

左オペランドの値に右オペランドの値が含まれている場合にtrueを返します

.customers{.Lastname \*== "Celaeno"}

*=

*==と同じですが、大文字と小文字は区別されません

.customers{.Lastname \*= "celaeno"}

論理演算子

&&

両方のオペランドがtrueの場合にtrueを返します

.customers{.Revenue > 77000 && .customers.Lastname === "Von Celaeno"}

||

いずれかのオペランドがtrueの場合にtrueを返します

.customers{.Firstname === "Quentin" || .State === "AZ"}

!

オペランドを無効にします

.customers{!.Firstname}

論理演算子は以下のようにオペランドをブール値に変換します。
  • オペランドが配列の場合(サブパスを適用した結果も配列になります):
    • 配列の長さが0より大きい場合、結果はtrueになります。
    • それ以外の場合、結果はfalseになります。
  • javascript演算子に二重NOT (!!)を付けるとそれ以外の場合を表します。
算術演算子

+

加算

-

減算

*

乗算

/

除算

%

係数

演算子の優先順位

1 (最上位)

! -unary

2

* / %

3

+ -binary

4

>=

5

== === != !== ^= ^== $== $= *= *==

6

&&

7

||

括弧の使用により式をグループ化し、優先順位を設定して、最初に評価する部分を明示的に示します。

例:

// find the last name of the customer who lives in South Roosevelt Drive
avpath.select(doc, ".customers{.Address.Street === \"South Roosevelt Drive\"}.Lastname", schema)
// ['Novo']

// find all States where the customers revenue is less than 78000
avpath.select(doc, ".customers{.Revenue < 78000}.States", schema)
// ['AZ', 'CT']

配列位置述語

位置述語を使用すると、コンテキスト位置を使用してアイテムをフィルタリングできます。位置述語は、常に角括弧で囲みます。

以下の4種類の形式を使用できます。
  • [index] — コンテキストのインデックス位置にあるアイテムを返します(最初のアイテムはインデックス0)。たとえば、[3]はコンテキストの4番目のアイテムを返します。

  • [index:]—コンテキストのインデックスがインデックス以上のアイテムを返します。たとえば、[2:]はコンテキストのインデックスが2以上のアイテムを返します。

  • [:index] — コンテキストのインデックスがインデックスより小さいアイテムを返します。たとえば、[:5]はコンテキストの最初の5つのアイテムを返します。

  • [indexFrom:indexTo] — コンテキストのインデックスがindexFrom以上でindexTo未満のアイテムを返します。たとえば、[2:5]はインデックス2、3、4という3つのアイテムを返します。

負の位置番号を使用することもできます:
  • [-1] — コンテキストの最後のアイテムを返します。

  • [-3:] — コンテキストの最後から3つの項目を返します。

例:

// find first customer state
avpath.select(doc, ".customers[0].States")
// ['AZ']

// find last customer state
avpath.select(doc, ".customers[-1].States")
// ['CT']

// find two customer states from second position
avpath.select(doc, ".customers[1:3].States")
// ['NC', 'CT']

マップキー述語

キー述語を使用すると、正規表現を使用してキーでアイテムをフィルタリングできます。正規表現の述語は常に()の中に組み込まれます。
  • ("key" | ~"key regex") — コンテキストのアイテムを返します(正規表現と一致します)

複数の述語

複数の述語を使用できます。結果にはすべての述語に一致するアイテムのみが含まれます。

// find first customer name whose revenue less than 70000 and greater than 50000
avpath.select(doc, ".customers{.Revenue < 70000}{.Revenue > 50000}[0].Firstname")
// ['Quentin']