フィルターは、特定のアカウントやゾーンの集合、日付ごとのリクエスト、特定のユーザーエージェントからのリクエストなどにクエリを絞り込みます。フィルターがないと、クエリの性能が落ちたり、結果が対応範囲を超えたり、返るデータがノイズだらけになったりします。
GraphQL のフィルターは GraphQL Input Object ↗ で表され、ノード上のブール代数を使えます。
次のリソースの引数としてフィルターを使えます。
- zones
- accounts
- tables(データセット)
ゾーン ID(zoneTag)でゾーン関連のデータを照会できます。
zones(filter: {zoneTag: "your Zone ID"}) {
...
}ゾーンフィルターは、次の文法に従う必要があります。
filter
{ zoneTag: t }
{ zoneTag_gt: t }
{ zoneTag_in: [t, ...] }複合フィルター(カンマ区切り、AND、OR)はサポートしていません。
ゾーン ID がわかっているときは、zoneTag: t と zoneTag_in: [t, ...] の形式を使います。ゾーン ID がわからないときにすべてのゾーンを走査するには、上限とあわせて zoneTag_gt: t の形式を使います。ゾーンは常に英数字順に並びます。
フィルターを省略すると、すべてのゾーンの結果を取得します(対応している上限まで)。
アカウントフィルターはゾーンフィルターと同じ構造とルールです。ゾーン ID(zoneTag)の代わりにアカウント ID(accountTag)を使います。
アカウントスコープのクエリではアカウントフィルターを指定する必要があります。複数のアカウントを同時に照会することはできません。
テーブルフィルターでは、少なくとも 1 つのノードを照会する必要があります。複数ノードのフィルターを作成して組み合わせるには AND 演算子を使います。テーブルフィルターは OR 演算子もサポートします。OR は明示的に指定する必要があります。
次の文法はテーブルフィルターを表します。k はフィルター対象の GraphQL ノード、op はそのノードで使える演算子の 1 つです。
filter
{ kvs }
kvs
kv
kv, kvs
kv
k: v
k_op: v
AND: [filters]
OR: [filters]
filters
filter
filter, filters演算子の対応は、ノードの型とノード名によって異なります。
次の演算子は、すべての配列型で使えます。
| 演算子 | 比較 |
|---|---|
has |
配列がその値を含む |
hasall |
配列が指定した値の一覧をすべて含む |
hasany |
配列が指定した値の一覧のうち少なくとも 1 つを含む |
次の演算子は、すべてのスカラー型で使えます。
| 演算子 | 比較 |
|---|---|
gt |
より大きい |
lt |
より小さい |
geq |
以上 |
leq |
以下 |
neq |
等しくない |
in |
含まれる |
文字列比較には like 演算子を使えます。ワイルドカードとして % 文字をサポートします。
query GeneralExample($zoneTag: string, $start: Time) {
viewer {
zones(filter: { zoneTag: $zoneTag }) {
httpRequestsAdaptiveGroups(
filter: { datetime_gt: $start, clientCountryName: "GB" }
limit: 1
) {
count
}
}
}
}次の GraphQL の例は、特定のノードをフィルターする方法です。続けて SQL 相当を示します。
httpRequestsAdaptiveGroups(filter: {datetime: "2018-01-01T10:00:00Z"}) {
...
}WHERE datetime="2018-01-01T10:00:00Z"次の GraphQL の例は、複数フィールド(ここでは 2 つの datetime フィールド)にフィルターを適用する方法です。続けて SQL 相当を示します。
httpRequests1hGroups(filter: {datetime_gt: "2018-01-01T10:00:00Z", datetime_lt: "2018-01-01T11:00:00Z"}) {
...
}WHERE (datetime > "2018-01-01T10:00:00Z") AND (datetime < "2018-01-01T10:00:00Z")次の GraphQL の例は、フィルターで OR 演算子を使う方法です。この OR 演算子は、clientCountryName フィールドの値が US または GB であるものを絞り込みます。
httpRequestsAdaptiveGroups(
filter: {
datetime: "2018-01-01T10:00:00Z",
OR:[{clientCountryName: "US"}, {clientCountryName: "GB"}]) {
...
}WHERE datetime="2018-01-01T10:00:00Z"
AND ((clientCountryName = "US") OR (clientCountryName = "GB"))次の GraphQL の例は、配列フィールドをフィルターして、特定の値を含むデータだけを返す方法です。続けて SQL 相当を示します。
mnmFlowDataAdaptiveGroups(filter: {ruleIDs_has: "rule-id"}) {
...
}WHERE has(ruleIDs, 'rule-id')次の GraphQL の例は、配列フィールドをフィルターして、複数の値を含むデータだけを返す方法です。続けて SQL 相当を示します。
mnmFlowDataAdaptiveGroups(filter: {ruleIDs_hasall: ["rule-id-1", "rule-id-2"]}) {
...
}WHERE has(ruleIDs, 'rule-id-1') AND has(ruleIDs, 'rule-id-2')requestSource フィルターに eyeball を指定すると、サイトのエンドユーザーだけのリクエスト、データ転送、訪問データを返します。ゾーンに対する Cloudflare 製品の操作(キャッシュパージ、ヘルスチェック、Workers のサブリクエストなど)は除外されます。
サブクエリは現在サポートしていません。この制限の回避策として、2 つの GraphQL クエリを使えます。