null 演算子
null 演算子を使用すると、値が null の項目を含む (または、含まない) レコードを選択できます。
null 演算子は、true または false を返します。
| 演算子 | 説明 |
|---|---|
| is null | 値が null である場合は true。 |
| is not null | 値が null でない場合は true。 |
is null と is not null は射影および射影後の条件で使用します。射影前の条件では使用できません。
たとえば、営業担当が 1 回以上ミーティングしたすべての取引先を表示します。
1q = load "Meetings";
2q = group q by 'Company';
3q = foreach q generate 'Company' as 'Company', sum('MeetingDuration') as 'TotalMeetings';
4
5--filter out fields with no meetings
6q = filter q by 'TotalMeetings' is not null;または、case を使用して null 値を必要な値に置き換えできます。
1q = load "dataset";
2q = foreach q generate (case when Name is null then "john doe" else Name end) as Name;射影前では is not null や is null を使用できないため、次の例は有効ではありません。
1a = load "dataset";
2a = filter a by Year is not null;
3a = foreach a generate Name as Name, Year as Year;is null と cogroup を使用する
左外部共通グルーピングは、右データストリームを左データストリームと結合します。左側のレコードが右側と一致しない場合、欠落した右の値は、結果のデータストリームでは null になります。
たとえば、営業担当と各取引先のミーティングに関する情報を含む「Meeting (ミーティング)」データセットがあるとします。営業担当がミーティングを行っていない取引先をすべて確認する必要があります。Ops (運用) と Meetings (ミーティング) 間の左外部共通グルーピングを使用した後に、is null を使用して、結果を絞り込みます。
1ops = load "Ops";
2meetings = load "Meetings";
3q = cogroup ops by 'Account' left, meetings by 'Company' ;
4q = foreach q generate ops.'Account' as 'Account', sum(ops.'Amount') as 'sum_Amount', sum(meetings.'MeetingDuration') as 'TimeSpent';
5
6--use is null to get records with no time time spent
7q = filter q by 'TimeSpent' is null;