Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

フィルタリング

最終更新 Markdown で表示Agent セットアップ

フィルターは、特定のアカウントやゾーンの集合、日付ごとのリクエスト、特定のユーザーエージェントからのリクエストなどにクエリを絞り込みます。フィルターがないと、クエリの性能が落ちたり、結果が対応範囲を超えたり、返るデータがノイズだらけになったりします。

フィルターの構造

GraphQL のフィルターは GraphQL Input Object で表され、ノード上のブール代数を使えます。

次のリソースの引数としてフィルターを使えます。

  • zones
  • accounts
  • tables(データセット)

ゾーンフィルター

ゾーン ID(zoneTag)でゾーン関連のデータを照会できます。

zones(filter: {zoneTag: "your Zone ID"}) {
    ...
}

ゾーンフィルターは、次の文法に従う必要があります。

filter
    { zoneTag: t }
    { zoneTag_gt: t }
    { zoneTag_in: [t, ...] }

複合フィルター(カンマ区切り、ANDOR)はサポートしていません。

ゾーン ID がわかっているときは、zoneTag: tzoneTag_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 相当を示します。

GraphQL

httpRequestsAdaptiveGroups(filter: {datetime: "2018-01-01T10:00:00Z"}) {
    ...
}

SQL

WHERE datetime="2018-01-01T10:00:00Z"

複数フィールドでフィルターする

次の GraphQL の例は、複数フィールド(ここでは 2 つの datetime フィールド)にフィルターを適用する方法です。続けて SQL 相当を示します。

GraphQL

httpRequests1hGroups(filter: {datetime_gt: "2018-01-01T10:00:00Z", datetime_lt: "2018-01-01T11:00:00Z"}) {
    ...
}

SQL

WHERE (datetime > "2018-01-01T10:00:00Z") AND (datetime < "2018-01-01T10:00:00Z")

OR 演算子でフィルターする

次の GraphQL の例は、フィルターで OR 演算子を使う方法です。この OR 演算子は、clientCountryName フィールドの値が US または GB であるものを絞り込みます。

GraphQL

httpRequestsAdaptiveGroups(
        filter: {
          datetime: "2018-01-01T10:00:00Z",
          OR:[{clientCountryName: "US"}, {clientCountryName: "GB"}]) {
    ...
}

SQL

WHERE datetime="2018-01-01T10:00:00Z"
  AND ((clientCountryName = "US") OR (clientCountryName = "GB"))

配列を 1 つの値でフィルターする

次の GraphQL の例は、配列フィールドをフィルターして、特定の値を含むデータだけを返す方法です。続けて SQL 相当を示します。

GraphQL

mnmFlowDataAdaptiveGroups(filter: {ruleIDs_has: "rule-id"}) {
    ...
}

SQL

WHERE has(ruleIDs, 'rule-id')

配列を複数の値でフィルターする

次の GraphQL の例は、配列フィールドをフィルターして、複数の値を含むデータだけを返す方法です。続けて SQL 相当を示します。

GraphQL

mnmFlowDataAdaptiveGroups(filter: {ruleIDs_hasall: ["rule-id-1", "rule-id-2"]}) {
    ...
}

SQL

WHERE has(ruleIDs, 'rule-id-1') AND has(ruleIDs, 'rule-id-2')

エンドユーザーでフィルターする

requestSource フィルターに eyeball を指定すると、サイトのエンドユーザーだけのリクエスト、データ転送、訪問データを返します。ゾーンに対する Cloudflare 製品の操作(キャッシュパージ、ヘルスチェック、Workers のサブリクエストなど)は除外されます。

サブクエリ(高度なフィルター)

サブクエリは現在サポートしていません。この制限の回避策として、2 つの GraphQL クエリを使えます。

役に立ちましたか?