メインコンテンツまでスキップ
waffle.svg
Domo Knowledge Base

Magic ETL v2(ベータ)でのフィルターのスクリプトの書き込み方法

Version 1

 

はじめに

フィルターのスクリプトを使用すると、Magic ETL v2 DataFlowの作成者はSQLスタイルの構文を使用してデータを簡単にフィルターできます。フィルターのスクリプトは論理(Boolean型)式である必要があります。つまり、スクリプトの結果はTrue/Falseが返される必要があります。従来のフィルター設定タブを開くのではなく、'Column name' >= 7または`Column name` BETWEEN 15 AND 20のような式を使用することで時間を節約できるようになりました。

一般的な論理フィルター

一般的な論理フィルターの例は次のとおりです。

  • 'id' >= 7
  • `Percent Change` BETWEEN .35 AND .65
  • `Phone Number` LIKE ‘801%’ AND `Age` < 35 AND `State` = ‘California’
  • (`Age` > 20 AND (`Salary` / 12) > 40000) or `Age` > 50
  • REGEXP_LIKE(`Email`, ‘@gmail.com’)
  • `Product Type` IN (1, 3, 7, 9)

行をフィルター

NULL値は、比較関数によって異なる方法で処理されます。SQLおよびMagic ETL v2 DataFlowでは、nullとの比較の結果は常にnullであり、[行をフィルター]タイルによって誤った結果として処理されます。Magic ETL v2のほとんどのコンテキストでは、nullはnullと等しくありませんが、nullもnullと等しくないわけでもありません。また、nullは0以下ですが、0以上でもあり、0と等しくもありません。[行をフィルター]タイルが参照する列にnullがある場合、関数または他の引数に関係なく、それらの行はすべてドロップされます。nullを適切に処理できる関数は、「is null」と「is not null」のみです。v1では、フィルターが「column = null」のテストを実行した可能性があります。同じ結果を持たないため、 このようなフィルターは、「is null」演算子を使用するように変更する必要があります。

フローをv1からv2に切り替えた後、正常に実行されていても行が欠落しているような出力の場合は、この変更が原因である可能性があります。「is not equal to」関数を使用すると、特に驚くことがあります。「column <> 5」は、列の値が5の行のみをドロップするように見えるかもしれませんが、実際には、上記の理由により、列はnullの行もドロップします。次の表に、[行をフィルター]でのnullの動作の追加の例を示します。

テスト

評価済みの結果

フィルターの有効性

4 <> 5 true keep
5 <> 5 false drop
null <> 5 null drop
null = null null drop
null <> null null drop
null is null true keep
null is not null false drop
5 is not null true keep
5 is null false drop

より複雑な方法でnullを処理するには、新しいスクリプトシステムを使用します。[行をフィルター]タイルは、スクリプトの評価をサポートする3つのタイル([グループ化][スクリプトを追加]が他の2つ)の1つです。IFNULL()関数は、フィルター式からnull結果を処理する場合に特に適しています。例えば、列「col」にnull値があり、「col」の値が5でない行をフィルターしてnullを保持する場合は、次の式を記述できます:IFNULL(col <> 5, TRUE)

null処理の他に、フィルタースクリプトによって簡単になるシナリオは他にも多くあります。v1では、以下の1つのスクリプトで、それぞれ複数の条件を持つ2つの個別の[行をフィルター]タイルが必要でした。

2.png