すべてのプロダクト
Search
ドキュメントセンター

Time Series Database:InfluxQL リファレンス

最終更新日:Jan 14, 2025

Influx Query Language(InfluxQL)は、TSDB for InfluxDB がサポートする SQL ライクなクエリ言語です。InfluxQL は、時系列データを保存および分析するための機能を提供します。このトピックでは、InfluxQL の基本的な概念について説明します。

表記

InfluxQL は、構文を記述するために拡張バッカスナウア記法(EBNF)を使用します。Go プログラミング言語を使用してコードを記述する際に、EBNF で指定されている表記を使用できます。詳細については、「Go プログラミング言語の仕様」をご参照ください。TSDB for InfluxDB® は Go プログラミング言語を使用して開発されており、EBNF 表記をサポートしています。

Production  = production_name "=" [ Expression ] "." .
Expression  = Alternative { "|" Alternative } .
Alternative = Term { Term } .
Term        = production_name | token [ "…" token ] | Group | Option | Repetition .
Group       = "(" Expression ")" .
Option      = "[" Expression "]" .
Repetition  = "{" Expression "}" .

次の表記は、優先順位の低い順に並べられています。

|   選択
()  グループ化
[]  オプション(0 回または 1 回)
{}  繰り返し(0 ~ n 回)

クエリリクエストの要素

文字

InfluxQL は UTF-8 でエンコードされた Unicode テキストをサポートしています。

newline             = /* Unicode コードポイント U+000A */ .
unicode_char        = /* 改行を除く任意の Unicode コードポイント */ .

文字と数字

文字:InfluxSQL は、文字とアンダースコアに ASCII 文字をサポートしています。アンダースコアは、InfluxQL では文字と同じように使用されます。アンダースコアは、ASCII 文字セットでは U+005F で示されます。

数字:InfluxQL は 10 進数のみをサポートしています。

letter              = ascii_letter | "_" .
ascii_letter        = "A" … "Z" | "a" … "z" .
digit               = "0" … "9" .

識別子

識別子は、データベース、リテンションポリシー、ユーザー、メジャーメント、タグキー、フィールドキーの名前を指定します。

InfluxQL でサポートされている識別子は、次のルールに準拠しています。

  • 二重引用符(")で囲まれた識別子には、Unicode 文字を含めることができますが、改行を含めることはできません。

  • 二重引用符(")で囲まれた識別子には、二重引用符(")をエスケープするために使用される \" 文字を含めることができます。

  • 二重引用符(")で囲まれた識別子には、InfluxQL キーワードを含めることができます。

  • 引用符(")で囲まれていない識別子の最初の文字は、文字またはアンダースコア(_)の ASCII 文字である必要があります。

  • 引用符(")で囲まれていない識別子には、ASCII 文字、数字、アンダースコア(_)のみを含めることができます。

identifier          = unquoted_identifier | quoted_identifier .
unquoted_identifier = ( letter ) { letter | digit } .
quoted_identifier   = `"` unicode_char { unicode_char } `"` .

例:

cpu
_cpu_stats
"1h"
"anything really"
"1_Crazy-1337.identifier>NAME"

キーワード

ALL           ALTER         ANY           AS            ASC           BEGIN
BY            CREATE        CONTINUOUS    DATABASE      DATABASES     DEFAULT
DELETE        DESC          DESTINATIONS  DIAGNOSTICS   DISTINCT      DROP
DURATION      END           EVERY         EXPLAIN       FIELD         FOR
FROM          GRANT         GRANTS        GROUP         GROUPS        IN
INF           INSERT        INTO          KEY           KEYS          KILL
LIMIT         SHOW          MEASUREMENT   MEASUREMENTS  NAME          OFFSET
ON            ORDER         PASSWORD      POLICY        POLICIES      PRIVILEGES
QUERIES       QUERY         READ          REPLICATION   RESAMPLE      RETENTION
REVOKE        SELECT        SERIES        SET           SHARD         SHARDS
SLIMIT        SOFFSET       STATS         SUBSCRIPTION  SUBSCRIPTIONS TAG
TO            USER          USERS         VALUES        WHERE         WITH
WRITE

InfluxQL キーワードを識別子として使用する場合は、クエリステートメントで識別子を二重引用符(")で囲む必要があります。

クエリステートメントで識別子を二重引用符(")で囲むことなく、time キーワードを識別子として使用できます。time キーワードは、連続クエリ、データベース、メジャーメント、リテンションポリシー、サブスクリプション、またはユーザーの名前として使用できます。これらの場合、time を囲むために二重引用符(")を使用する必要はありません。time キーワードをフィールドキーまたはタグキーとして使用することはできません。フィールドキーまたはタグキーとして使用される time キーワードを含むデータは、TSDB for InfluxDB に書き込むことができません。time キーワードをフィールドキーまたはタグキーとして使用すると、TSDB for InfluxDB はエラーを返します。詳細については、FAQ トピックを参照してください。

リテラル

整数

InfluxQL は 10 進整数をサポートしています。InfluxQL は 16 進数または 8 進数をサポートしていません。

int_lit             = ( "1" … "9" ) { digit } .

浮動小数点数

InfluxQL は浮動小数点数をサポートしています。InfluxQL は指数表記をサポートしていません。

float_lit           = int_lit "." int_lit .

文字列

文字列は単一引用符(')で囲む必要があります。文字列には、単一引用符(')をエスケープするために使用される\' 文字を含めることができます。

string_lit          = `'` { unicode_char } `'` .

期間

期間は、期間の長さを指定します。期間リテラルは、整数と時間単位で構成されます。整数と単位の間にスペースを指定することはできません。期間を記述するために複数の単位を使用できます。

有効な単位

単位

説明

ns

ナノ秒(10 億分の 1 秒)

u または µ

マイクロ秒(100 万分の 1 秒)

ms

ミリ秒(1000 分の 1 秒)

s

m

h

d

w

duration_lit        = int_lit duration_unit .
duration_unit       = "ns" | "u" | "µ" | "ms" | "s" | "m" | "h" | "d" | "w" .

日付と時刻

InfluxQL の日付と時刻の形式は、EBNF に基づいて指定されていません。日付と時刻は、Go のフォーマット規則と解析規則に基づいて指定されます。このようにして、基準となる日付と時刻は InfluxQL の必要な形式で指定されます。次の例は、基準となる日付と時刻の形式を示しています。

現地時間が 2006 年 1 月 2 日 15:04:05 の場合、次のコードは InfluxQL の基準となる日付と時刻を示しています。

time_lit            = "2006-01-02 15:04:05.999999" | "2006-01-02" .

ブール値

bool_lit            = TRUE | FALSE .

正規表現

regex_lit           = "/" { unicode_char } "/" .

比較演算子:=~ は値が一致していることを示します。!~ は値が一致していないことを示します

説明

InfluxQL クエリでは、正規表現を使用して、SELECT 句のフィールドキーとタグキー、FROM 句のメジャーメント、WHERE 句のタグ値、GROUP BY 句のタグキーを指定できます。WHERE 句、データベース、およびリテンションポリシーで STRING データ型ではないフィールド値を指定するために正規表現を使用することはできません。

クエリ

クエリは、セミコロン(;)で区切られた 1 つ以上のステートメントで構成されます。

query               = statement { ";" statement } .

statement           = alter_retention_policy_stmt |
                      create_continuous_query_stmt |
                      create_database_stmt |
                      create_retention_policy_stmt |
                      create_subscription_stmt |
                      create_user_stmt |
                      delete_stmt |
                      drop_continuous_query_stmt |
                      drop_database_stmt |
                      drop_measurement_stmt |
                      drop_retention_policy_stmt |
                      drop_series_stmt |
                      drop_shard_stmt |
                      drop_subscription_stmt |
                      drop_user_stmt |
                      explain_stmt |
                      explain_analyze_stmt |
                      grant_stmt |
                      kill_query_statement |
                      revoke_stmt |
                      select_stmt |
                      show_continuous_queries_stmt |
                      show_databases_stmt |
                      show_diagnostics_stmt |
                      show_field_key_cardinality_stmt |
                      show_field_keys_stmt |
                      show_grants_stmt |
                      show_measurement_cardinality_stmt |
                      show_measurement_exact_cardinality_stmt |
                      show_measurements_stmt |
                      show_queries_stmt |
                      show_retention_policies_stmt |
                      show_series_cardinality_stmt |
                      show_series_exact_cardinality_stmt |
                      show_series_stmt |
                      show_shard_groups_stmt |
                      show_shards_stmt |
                      show_stats_stmt |
                      show_subscriptions_stmt |
                      show_tag_key_cardinality_stmt |
                      show_tag_key_exact_cardinality_stmt |
                      show_tag_keys_stmt |
                      show_tag_values_stmt |
                      show_tag_values_cardinality_stmt |
                      show_users_stmt .

ステートメント

DELETE

重要

TSDB for InfluxDB® は削除操作をサポートしています。ただし、InfluxDB® の削除操作の構文により、削除操作によってデッドロックが発生し、読み取りおよび書き込み操作が失敗する可能性があります。したがって、TSDB for InfluxDB® で削除操作を実行しないことをお勧めします。

delete_stmt = "DELETE" ( from_clause | where_clause | from_clause where_clause ) .

例:

DELETE FROM "cpu"
DELETE FROM "cpu" WHERE time < '2000-01-01T00:00:00Z'
DELETE WHERE time < '2000-01-01T00:00:00Z'

EXPLAIN

EXPLAIN ステートメントを使用して、クエリを解析および計画し、クエリの推定リソースオーバーヘッドの概要を表示できます。

特定の SQL エンジンでは、EXPLAIN ステートメントを使用して、結合順序と結合アルゴリズムを指定し、述語と式をプッシュダウンできます。InfluxQL は結合操作をサポートしていません。ほとんどの場合、特定の関数によって返される結果には、InfluxQL クエリのオーバーヘッドが含まれています。結果には、アクセスされる時系列の総数、Time-Structured Merge Tree(TSM)ファイルにアクセスするイテレータの数、スキャンされる TSM ブロックの数などの情報が含まれます。

EXPLAIN クエリによって返される実行計画には、次の要素が含まれます。

  • 補助フィールド

  • シャードの数

  • 時系列の数

  • キャッシュされた値

  • ファイルの数

  • ブロックの数

  • ブロックのサイズ

例:

> explain select sum(pointReq) from "_internal"."monitor"."write" group by hostname;
> QUERY PLAN
------
EXPRESSION: sum(pointReq::integer)
NUMBER OF SHARDS: 2
NUMBER OF SERIES: 2
CACHED VALUES: 110
NUMBER OF FILES: 1
NUMBER OF BLOCKS: 1
SIZE OF BLOCKS: 931

EXPLAIN ANALYZE

EXPLAIN ANALYZE ステートメントを使用して、InfluxQL クエリを実行し、実行中の実際のリソースオーバーヘッドを計算できます。

explain_analyze_stmt = "EXPLAIN ANALYZE" select_stmt .

例:

> explain analyze select sum(pointReq) from "_internal"."monitor"."write" group by hostname;
> EXPLAIN ANALYZE
-----------
.
└── select
├── execution_time: 242.167µs
├── planning_time: 2.165637ms
├── total_time: 2.407804ms
└── field_iterators
├── labels
│   └── statement: SELECT sum(pointReq::integer) FROM "_internal"."monitor"."write" GROUP BY hostname
└── expression
├── labels
│   └── expr: sum(pointReq::integer)
├── create_iterator
│   ├── labels
│   │   ├── measurement: write
│   │   └── shard_id: 57
│   ├── cursors_ref: 1
│   ├── cursors_aux: 0
│   ├── cursors_cond: 0
│   ├── float_blocks_decoded: 0
│   ├── float_blocks_size_bytes: 0
│   ├── integer_blocks_decoded: 1
│   ├── integer_blocks_size_bytes: 931
│   ├── unsigned_blocks_decoded: 0
│   ├── unsigned_blocks_size_bytes: 0
│   ├── string_blocks_decoded: 0
│   ├── string_blocks_size_bytes: 0
│   ├── boolean_blocks_decoded: 0
│   ├── boolean_blocks_size_bytes: 0
│   └── planning_time: 1.401099ms
└── create_iterator
├── labels
│   ├── measurement: write
│   └── shard_id: 58
├── cursors_ref: 1
├── cursors_aux: 0
├── cursors_cond: 0
├── float_blocks_decoded: 0
├── float_blocks_size_bytes: 0
├── integer_blocks_decoded: 0
├── integer_blocks_size_bytes: 0
├── unsigned_blocks_decoded: 0
├── unsigned_blocks_size_bytes: 0
├── string_blocks_decoded: 0
├── string_blocks_size_bytes: 0
├── boolean_blocks_decoded: 0
├── boolean_blocks_size_bytes: 0
└── planning_time: 76.192µs

KILL QUERY

KILL QUERY ステートメントを使用して、クエリを停止できます。

kill_query_statement = "KILL QUERY" query_id .

ステートメントでは、query_id パラメーターは停止するクエリの ID を指定します。SHOW QUERIES ステートメントを使用して、クエリの ID をクエリできます。返された結果では、qid パラメーターはクエリの ID を示します。

例:

-- ローカルホストで qid が 36 のクエリを強制終了する
KILL QUERY 36

SELECT

select_stmt = "SELECT" fields from_clause [ into_clause ] [ where_clause ]
              [ group_by_clause ] [ order_by_clause ] [ limit_clause ]
              [ offset_clause ] [ slimit_clause ] [ soffset_clause ] [ timezone_clause ] .

例:

次のステートメントを使用して、cpu プレフィックスを含むメジャーメントに基づいてデータをクエリし、結果データを同じメジャーメントに基づいてデータベースに書き込み、リテンションポリシーを cpu_1h に設定できます。

SELECT mean("value") INTO "cpu_1h".:MEASUREMENT FROM /cpu.*/

次のステートメントを使用して、指定されたメジャーメントに基づいてデータをクエリし、指定されたタイムゾーンに基づいて結果データを日ごとにグループ化できます。

SELECT mean("value") FROM "cpu" GROUP BY region, time(1d) fill(0) tz('America/Chicago')

SHOW CARDINALITY

SHOW CARDINALITY は、メジャーメント、時系列、タグキー、タグ値、およびフィールドキーの推定または正確なカーディナリティを計算するために使用できる一連のコマンドです。

SHOW CARDINALITY ステートメントを使用して、推定または正確なカーディナリティをクエリできます。システムは、特定のプランに基づいて推定カーディナリティを計算します。このメソッドは、カーディナリティのサイズに関係なく使用できます。推定カーディナリティが高い値であっても、システムは推定カーディナリティの計算に低オーバーヘッドを消費します。システムは、TSM データに基づいて正確なカーディナリティを計算します。処理するデータのカーディナリティが高い場合、システムは正確なカーディナリティの計算に高オーバーヘッドを消費します。ビジネスシナリオで正確なカーディナリティが必要でない限り、推定カーディナリティをクエリすることをお勧めします。

データベースで Time Series Index(TSI)機能が有効になっている場合にのみ、time でデータをフィルタリングできます。

SHOW CARDINALITY ステートメントの詳細については、次のセクションを参照してください。

  • SHOW FIELD KEY CARDINALITY

  • SHOW MEASUREMENT CARDINALITY

  • SHOW SERIES CARDINALITY

  • SHOW TAG KEY CARDINALITY

  • SHOW TAG VALUES CARDINALITY

SHOW CONTINUOUS QUERIES

show_continuous_queries_stmt = "SHOW CONTINUOUS QUERIES" .

例:

-- すべての連続クエリを表示する
SHOW CONTINUOUS QUERIES

SHOW DATABASES

show_databases_stmt = "SHOW DATABASES" .

例:

-- すべてのデータベースを表示する
SHOW DATABASES

SHOW DIAGNOSTICS

次のステートメントを使用して、ノードのビルド情報、ランタイム、ホスト名、サーバー構成、メモリ使用量、Go ランタイム診断などのノード情報をクエリできます。

show_diagnostics_stmt = "SHOW DIAGNOSTICS"

SHOW FIELD KEY CARDINALITY

ON <database> 句を使用してデータベースを指定しない場合、現在のデータベースのフィールドキーセットの推定または正確なカーディナリティが返されます。

説明

オプション句:ON <database>、FROM <sources>、WITH KEY = <key>、WHERE <condition>、GROUP BY <dimensions>、LIMIT、および OFFSET 句。これらの句を使用すると、正確なカーディナリティが返されます。データベースで TSI 機能が有効になっている場合にのみ、時間でデータをフィルタリングできます。WHERE 句で時間フィルターを使用することはできません。

show_field_key_cardinality_stmt = "SHOW FIELD KEY CARDINALITY" [ on_clause ] [ from_clause ] [ where_clause ] [ group_by_clause ] [ limit_clause ] [ offset_clause ]

show_field_key_exact_cardinality_stmt = "SHOW FIELD KEY EXACT CARDINALITY" [ on_clause ] [ from_clause ] [ where_clause ] [ group_by_clause ] [ limit_clause ] [ offset_clause ]

例:

-- 現在のデータベースのフィールドキーセットの推定カーディナリティを表示する
SHOW FIELD KEY CARDINALITY

-- 指定されたデータベースのフィールドキーセットの正確なカーディナリティを表示する
SHOW FIELD KEY EXACT CARDINALITY ON mydb

SHOW FIELD KEY

show_field_keys_stmt = "SHOW FIELD KEYS" [on_clause] [ from_clause ] .

例:

-- すべてのメジャーメントのフィールドキーとフィールド値のデータ型を表示する
SHOW FIELD KEYS

-- 指定されたメジャーメントのフィールドキーとフィールド値のデータ型を表示する
SHOW FIELD KEYS FROM "cpu"

SHOW GRANTS

show_grants_stmt = "SHOW GRANTS FOR" user_name .

例:

-- jdoe の権限を表示する
SHOW GRANTS FOR "jdoe"

SHOW MEASUREMENT CARDINALITY

ON <database> 句を使用してデータベースを指定しない場合、現在のデータベースのメジャーメントセットの推定または正確なカーディナリティが返されます。

説明

オプション句:ON <database>、FROM <sources>、WITH KEY = <key>、WHERE <condition>、GROUP BY <dimensions>、LIMIT、および OFFSET 句。これらの句を使用すると、正確なカーディナリティが返されます。データベースで TSI 機能が有効になっている場合にのみ、時間でデータをフィルタリングできます。WHERE 句で時間フィルターを使用することはできません。

show_measurement_cardinality_stmt = "SHOW MEASUREMENT CARDINALITY" [ on_clause ] [ from_clause ] [ where_clause ] [ group_by_clause ] [ limit_clause ] [ offset_clause ]

show_measurement_exact_cardinality_stmt = "SHOW MEASUREMENT EXACT CARDINALITY" [ on_clause ] [ from_clause ] [ where_clause ] [ group_by_clause ] [ limit_clause ] [ offset_clause ]

例:

-- 現在のデータベースのメジャーメントセットの推定カーディナリティを表示する
SHOW MEASUREMENT CARDINALITY

-- 指定されたデータベースのメジャーメントセットの正確なカーディナリティを表示する
SHOW MEASUREMENT EXACT CARDINALITY ON mydb

SHOW MEASUREMENTS

show_measurements_stmt = "SHOW MEASUREMENTS" [on_clause] [ with_measurement_clause ] [ where_clause ] [ limit_clause ] [ offset_clause ] .

例:

-- すべてのメジャーメントを表示する
SHOW MEASUREMENTS

-- region タグ = 'uswest' AND host タグ = 'serverA' のメジャーメントを表示する
SHOW MEASUREMENTS WHERE "region" = 'uswest' AND "host" = 'serverA'

-- 'h2o' で始まるメジャーメントを表示する
SHOW MEASUREMENTS WITH MEASUREMENT =~ /h2o.*/

SHOW QUERIES

show_queries_stmt = "SHOW QUERIES" .

例:

-- 現在実行中のすべてのクエリを表示する
SHOW QUERIES

SHOW RETENTION POLICIES

show_retention_policies_stmt = "SHOW RETENTION POLICIES" [on_clause] .

例:

-- データベースのすべてのリテンションポリシーを表示する
SHOW RETENTION POLICIES ON "mydb"

SHOW SERIES

show_series_stmt = "SHOW SERIES" [on_clause] [ from_clause ] [ where_clause ] [ limit_clause ] [ offset_clause ] .

例:

SHOW SERIES FROM "telegraf"."autogen"."cpu" WHERE cpu = 'cpu8'

SHOW SERIES CARDINALITY

ON <database> 句を使用してデータベースを指定しない場合、現在のデータベースのシリーズセットの推定または正確なカーディナリティが返されます。

シリーズセットのカーディナリティは、ランダムアクセスメモリ(RAM)の使用量に影響します。

説明

オプション句:ON <database>、FROM <sources>、WITH KEY = <key>、WHERE <condition>、GROUP BY <dimensions>、LIMIT、および OFFSET 句。これらの句を使用すると、正確なカーディナリティが返されます。データベースで TSI 機能が有効になっている場合にのみ、時間でデータをフィルタリングできます。WHERE 句で時間フィルターを使用することはできません。

show_series_cardinality_stmt = "SHOW SERIES CARDINALITY" [ on_clause ] [ from_clause ] [ where_clause ] [ group_by_clause ] [ limit_clause ] [ offset_clause ]

show_series_exact_cardinality_stmt = "SHOW SERIES EXACT CARDINALITY" [ on_clause ] [ from_clause ] [ where_clause ] [ group_by_clause ] [ limit_clause ] [ offset_clause ]

例:

-- 現在のデータベースのシリーズの推定カーディナリティを表示する
SHOW SERIES CARDINALITY

-- 指定されたデータベースのシリーズの推定カーディナリティを表示する
SHOW SERIES CARDINALITY ON mydb

-- 正確なシリーズカーディナリティを表示する
SHOW SERIES EXACT CARDINALITY

-- 指定されたデータベースのシリーズのシリーズカーディナリティを表示する
SHOW SERIES EXACT CARDINALITY ON mydb

SHOW SHARD GROUPS

show_shard_groups_stmt = "SHOW SHARD GROUPS" .

例:

SHOW SHARD GROUPS

SHOW SHARDS

show_shards_stmt = "SHOW SHARDS" .

例:

SHOW SHARDS

SHOW STATS

SHOW STATS ステートメントを使用して、TSDB for InfluxDB ノードと使用可能なコンポーネントに関する統計情報をクエリできます。コンポーネントを有効にした後、コンポーネントにアクセスできます。

show_stats_stmt = "SHOW STATS [ FOR '<component>' | 'indexes' ]"

SHOW STATS

  • SHOW STATS ステートメントは、インデックスのメモリ使用量をクエリしません。インデックスのメモリ使用量をクエリするには、SHOW STATS FOR 'indexes' ステートメントを使用します。

  • SHOW STATS によって返される統計値はメモリに保存されます。ノードが再起動した後、統計値は 0 にリセットされます。SHOW STATS ステートメントは 10 秒間隔で自動的に実行され、_internal データベースにデータを提供します。

SHOW STATS FOR <component>

  • SHOW STATS FOR <component> ステートメントを使用して、指定されたコンポーネントに関する統計情報をクエリできます。

  • runtime コンポーネントの場合、TSDB for InfluxDB システムのメモリ使用量の要約が Go のランタイムパッケージに基づいて返されます。詳細については、「Go ランタイム」をご参照ください。

SHOW STATS FOR 'indexes'

  • SHOW STATS FOR 'indexes' ステートメントを使用して、すべてのインデックスの推定メモリ使用量をクエリできます。SHOW STATS ステートメントは、インデックスのメモリ使用量の計算に大量のリソースが消費されるため、インデックスのメモリ使用量をクエリしません。

例:

> show stats
name: runtime
-------------
Alloc   Frees   HeapAlloc       HeapIdle        HeapInUse       HeapObjects     HeapReleased    HeapSys         Lookups Mallocs NumGC   NumGoroutine    PauseTotalNs    Sys             TotalAlloc
4136056 6684537 4136056         34586624        5816320         49412           0               40402944        110     6733949 83      44              36083006        46692600        439945704


name: graphite
tags: proto=tcp
batches_tx      bytes_rx        connections_active      connections_handled     points_rx       points_tx
----------      --------        ------------------      -------------------     ---------       ---------
159             3999750         0                       1                       158110          158110

SHOW SUBSCRIPTIONS

show_subscriptions_stmt = "SHOW SUBSCRIPTIONS" .

例:

SHOW SUBSCRIPTIONS

SHOW TAG KEY CARDINALITY

ON <database> 句を使用してデータベースを指定しない場合、現在のデータベースのタグキーセットの推定または正確なカーディナリティが返されます。

説明

オプション句:ON <database>、FROM <sources>、WITH KEY = <key>、WHERE <condition>、GROUP BY <dimensions>、LIMIT、および OFFSET 句。これらの句を使用すると、正確なカーディナリティが返されます。データベースで TSI 機能が有効になっている場合にのみ、時間でデータをフィルタリングできます。WHERE 句で時間フィルターを使用することはできません。

show_tag_key_cardinality_stmt = "SHOW TAG KEY CARDINALITY" [ on_clause ] [ from_clause ] [ where_clause ] [ group_by_clause ] [ limit_clause ] [ offset_clause ]

show_tag_key_exact_cardinality_stmt = "SHOW TAG KEY EXACT CARDINALITY" [ on_clause ] [ from_clause ] [ where_clause ] [ group_by_clause ] [ limit_clause ] [ offset_clause ]

例:

-- 推定タグキーカーディナリティを表示する
SHOW TAG KEY CARDINALITY

-- 正確なタグキーカーディナリティを表示する
SHOW TAG KEY EXACT CARDINALITY

SHOW TAG KEYS

show_tag_keys_stmt = "SHOW TAG KEYS" [on_clause] [ from_clause ] [ where_clause ]
                     [ limit_clause ] [ offset_clause ] .

例:

-- すべてのタグキーを表示する
SHOW TAG KEYS

-- cpu メジャーメントのすべてのタグキーを表示する
SHOW TAG KEYS FROM "cpu"

-- region キー = 'uswest' の cpu メジャーメントのすべてのタグキーを表示する
SHOW TAG KEYS FROM "cpu" WHERE "region" = 'uswest'

-- host キー = 'serverA' のすべてのタグキーを表示する
SHOW TAG KEYS WHERE "host" = 'serverA'

SHOW TAG VALUES

show_tag_values_stmt = "SHOW TAG VALUES" [on_clause] [ from_clause ] with_tag_clause [ where_clause ]
                       [ limit_clause ] [ offset_clause ] .

例:

-- region タグのすべてのメジャーメントのすべてのタグ値を表示する
SHOW TAG VALUES WITH KEY = "region"

-- region タグの cpu メジャーメントのタグ値を表示する
SHOW TAG VALUES FROM "cpu" WITH KEY = "region"

-- 文字 c を含まないすべてのタグキーのすべてのメジャーメントのすべてのタグ値を表示する
SHOW TAG VALUES WITH KEY !~ /.*c.*/

-- service = 'redis' の region & host タグキーの cpu メジャーメントのタグ値を表示する
SHOW TAG VALUES FROM "cpu" WITH KEY IN ("region", "host") WHERE "service" = 'redis'

SHOW TAG VALUES CARDINALITY

ON <database> 句を使用してデータベースを指定しない場合、現在のデータベースの指定されたタグキーに対応するタグ値の推定または正確なカーディナリティが返されます。

説明

オプション句:ON <database>、FROM <sources>、WITH KEY = <key>、WHERE <condition>、GROUP BY <dimensions>、LIMIT、および OFFSET 句。これらの句を使用すると、正確なカーディナリティが返されます。データベースで TSI 機能が有効になっている場合にのみ、時間でデータをフィルタリングできます。

show_tag_values_cardinality_stmt = "SHOW TAG VALUES CARDINALITY" [ on_clause ] [ from_clause ] [ where_clause ] [ group_by_clause ] [ limit_clause ] [ offset_clause ] with_key_clause

show_tag_values_exact_cardinality_stmt = "SHOW TAG VALUES EXACT CARDINALITY" [ on_clause ] [ from_clause ] [ where_clause ] [ group_by_clause ] [ limit_clause ] [ offset_clause ] with_key_clause

例:

-- 指定されたタグキーの推定タグキー値カーディナリティを表示する
SHOW TAG VALUES CARDINALITY WITH KEY = "myTagKey"

-- 指定されたタグキーの推定タグキー値カーディナリティを表示する
SHOW TAG VALUES CARDINALITY WITH KEY = "myTagKey"

-- 指定されたタグキーの正確なタグキー値カーディナリティを表示する
SHOW TAG VALUES EXACT CARDINALITY WITH KEY = "myTagKey"

-- 指定されたタグキーの正確なタグキー値カーディナリティを表示する
SHOW TAG VALUES EXACT CARDINALITY WITH KEY = "myTagKey"

SHOW USERS

show_users_stmt = "SHOW USERS" .

例:

-- すべてのユーザーを表示する
SHOW USERS

from_clause     = "FROM" measurements .

group_by_clause = "GROUP BY" dimensions fill(fill_option).

into_clause     = "INTO" ( measurement | back_ref ).

limit_clause    = "LIMIT" int_lit .

offset_clause   = "OFFSET" int_lit .

slimit_clause   = "SLIMIT" int_lit .

soffset_clause  = "SOFFSET" int_lit .

timezone_clause = tz(string_lit) .

on_clause       = "ON" db_name .

order_by_clause = "ORDER BY" sort_fields .

to_clause       = "TO" user_name .

where_clause    = "WHERE" expr .

with_measurement_clause = "WITH MEASUREMENT" ( "=" measurement | "=~" regex_lit ) .

with_tag_clause = "WITH KEY" ( "=" tag_key | "!=" tag_key | "=~" regex_lit | "IN (" tag_keys ")"  ) .

binary_op        = "+" | "-" | "*" | "/" | "%" | "&" | "|" | "^" | "AND" |
                   "OR" | "=" | "!=" | "<>" | "<" | "<=" | ">" | ">=" .

expr             = unary_expr { binary_op unary_expr } .

unary_expr       = "(" expr ")" | var_ref | time_lit | string_lit | int_lit |
                   float_lit | bool_lit | duration_lit | regex_lit .

その他

alias            = "AS" identifier .

back_ref         = ( policy_name ".:MEASUREMENT" ) |
                   ( db_name "." [ policy_name ] ".:MEASUREMENT" ) .

db_name          = identifier .

dimension        = expr .

dimensions       = dimension { "," dimension } .

field_key        = identifier .

field            = expr [ alias ] .

fields           = field { "," field } .

fill_option      = "null" | "none" | "previous" | int_lit | float_lit . | "linear"

host             = string_lit .

measurement      = measurement_name |
                   ( policy_name "." measurement_name ) |
                   ( db_name "." [ policy_name ] "." measurement_name ) .

measurements     = measurement { "," measurement } .

measurement_name = identifier | regex_lit .

password         = string_lit .

policy_name      = identifier .

privilege        = "ALL" [ "PRIVILEGES" ] | "READ" | "WRITE" .

query_id         = int_lit .

query_name       = identifier .

retention_policy = identifier .

retention_policy_option      = retention_policy_duration |
                               retention_policy_replication |
                               retention_policy_shard_group_duration |
                               "DEFAULT" .

retention_policy_duration    = "DURATION" duration_lit .

retention_policy_replication = "REPLICATION" int_lit .

retention_policy_shard_group_duration = "SHARD DURATION" duration_lit .

retention_policy_name = "NAME" identifier .

series_id        = int_lit .

shard_id         = int_lit .

sort_field       = field_key [ ASC | DESC ] .

sort_fields      = sort_field { "," sort_field } .

subscription_name = identifier .

tag_key          = identifier .

tag_keys         = tag_key { "," tag_key } .

user_name        = identifier .

var_ref          = measurement .

コメント

InfluxQL ステートメントにコメントを追加して、クエリを記述できます。

  • 単一行コメントのプレフィックスは 2 つのハイフン(--)で、サフィックスは TSDB for InfluxDB® が検出できる改行です。単一行コメントは複数行にまたがることはできません。

  • 複数行コメントのプレフィックスは /* で、サフィックスは */ です。複数行コメントは複数行にまたがることができます。InfluxQL はネストされた複数行コメントをサポートしていません。

クエリエンジンによるクエリの実行方法

InfluxQL の基本的な知識を習得し、クエリエンジンによって InfluxQL クエリがどのように実行されるかを理解することをお勧めします。このようにして、ビジネスシナリオでクエリ結果を使用する方法と、効率的な方法でクエリを作成する方法を学ぶことができます。

次のプロセスは、クエリのライフサイクルを示しています。

  1. InfluxQL ステートメントはトークンに変換され、抽象構文木(AST)に解析されます。結果はクエリのコード表現です。

  2. AST は query executor に渡され、クエリを適切なハンドラーに割り当てます。たとえば、メタデータ関連のクエリはメタデータサービスによって実行され、SELECT ステートメントはシャードで実行されます。

  3. クエリエンジンは、指定された時間範囲に一致するシャードを見つけます。時間範囲は SELECT ステートメントで指定されます。これらのシャードでは、ステートメントで指定された各フィールドに対してイテレータが作成されます。

  4. イテレータはエミッターに渡されます。エミッターはイテレータを解放し、結果データポイントを結合します。エミッターは、単純な時間ベースのデータポイントを複雑なオブジェクトに変換し、オブジェクトをクライアントに返します。

イテレータ

イテレータはクエリエンジンのコアです。イテレータは、一連のデータポイントをループするために使用できるシンプルなインターフェースを提供します。次の例では、イテレータを使用して浮動小数点数をループしています。

type FloatIterator interface {
    Next() *FloatPoint
}

次の例では、IteratorCreator インターフェースを使用してイテレータを作成しています。

type IteratorCreator interface {
    CreateIterator(opt *IteratorOptions) (Iterator, error)
}

イテレータを作成するときに、IteratorOptions を使用して、有効なフィールド、時間範囲、ディメンションを指定できます。IteratorCreator インターフェースは、ShardsShardEngine レベルなど、複数のレベルで使用できます。このようにして、クエリを最適化できます。たとえば、COUNT() 関数が結果を返す前にデータを前処理できます。

イテレータを使用して、データノードから生データを読み取ることができます。また、イテレータを組み合わせて、入力イテレータにデータを提供することもできます。たとえば、DistinctIterator を使用して、入力イテレータの各時間ウィンドウの値を計算できます。また、FillIterator を使用して、入力イテレータの欠落データポイントを置き換えるデータを生成することもできます。

イテレータを組み合わせてデータを集計できます。次のステートメントは例を示しています。

SELECT MEAN(value) FROM cpu GROUP BY time(10m)

前のステートメントでは、MEAN(value) はシャードに基づいて生成される mean iterator を指定します。次のステートメントでは、平均値の導関数を計算するために使用されるイテレータが追加されます。

SELECT DERIVATIVE(MEAN(value), 20m) FROM cpu GROUP BY time(10m)

補助フィールド

InfluxQL は、FIRST()LAST()MIN()MAX() などのセレクター関数をサポートしています。したがって、クエリエンジンは、要求されたデータポイントと関連データを同時に返す必要があります。

次のステートメントは例を示しています。

SELECT FIRST(value), host FROM cpu GROUP BY time(1h)

このステートメントを使用して、1 時間ごとに生成される最初のデータポイントの value と、各データポイントに関連付けられている host をクエリできます。補助フィールドをより効率的にするために、data points には 1 つのタイプの value のみが指定されます。このようにして、host パラメーターはデータポイントの補助フィールドとして使用されます。補助フィールドは、データポイントがエミッターに渡されるまでデータポイントに追加されます。エミッターは補助フィールドを分割し、対応するイテレータに割り当てます。

組み込みイテレータ

次のヘルパーイテレータを使用してクエリを実行できます。

  • マージイテレータ:同じタイプの 1 つ以上のイテレータをマージして新しいイテレータを生成します。マージイテレータは、クエリエンジンが次の時間ウィンドウのデータをスキャンする前に、現在の時間ウィンドウで収集されたすべてのデータポイントが返されるようにします。マージイテレータは、データポイントを時間でソートしません。マージイテレータは、高速アクセスを必要とし、ソートの要件が低い集計クエリを集計します。

  • ソート済みマージイテレータ:同じタイプの 1 つ以上のイテレータをマージして新しいイテレータを生成し、データポイントを時間でソートします。ソート済みマージイテレータは、merge iterators よりもデータの処理に時間がかかります。生データポイントをクエリする非集計クエリは、データポイントを時間でソートしてから返します。このようにして、ソート済みマージイテレータを非集計クエリに使用できます。

  • 制限イテレータ:各名前グループまたはタググループのデータポイントの数を制限します。制限イテレータは、LIMIT および OFFSET 構文に基づいて作成されます。

  • フィルイテレータ:入力イテレータの欠落データポイントを置き換える値を生成します。生成された値は、null 値、前のデータポイントの値、または指定された値にすることができます。

  • バッファリングされたイテレータ:データポイントが未読状態であることを確認し、データポイントをバッファーに返します。この場合、データポイントを再度読み取ることができます。バッファリングされたイテレータは、通常、時間ウィンドウのデータを予測するために使用されます。

  • 削減イテレータ:削減関数を呼び出して、時間ウィンドウの各データポイントを処理します。時間ウィンドウのすべての操作が実行された後、ウィンドウのすべてのデータポイントが返されます。削減イテレータは、COUNT() などの単純な集計関数に使用できます。

  • スライス削減イテレータ:時間ウィンドウのすべてのデータポイントを収集し、データポイントを削減関数に送信します。要求された結果は、スライス削減イテレータから返されます。スライス削減イテレータは、DERIVATIVE() などの集計関数に使用できます。

  • 変換イテレータ:変換関数を呼び出して、入力イテレータから取得された各データポイントを二項式に変換します。

  • 重複排除イテレータ:データポイントの重複を排除し、一意のデータポイントを返します。重複排除イテレータは大量のリソースを消費するため、メタデータクエリなど、少量のデータで実行されるクエリにのみ使用できます。

イテレータの呼び出し

InfluxQL 関数は、シャードレベルとエンジンレベルの 2 つのレベルで実行できます。

イテレータをより効率的にするために、特定の関数呼び出しを複数のレイヤーで実行できます。たとえば、COUNT() はシャードレベルで実行できます。count iterator は、複数の count iterators を含めて、シャードの総数を計算できます。NewCallIterator() 関数を使用して、カウントイテレータを作成できます。

特定のイテレータはより複雑であるため、エンジンレベルで関数呼び出しを実行するために使用する必要があります。たとえば、DERIVATIVE() は時間ウィンドウのすべてのデータポイントを取得してから、データポイントを計算します。このタイプのイテレータはクエリエンジンによって作成され、シャードレベルでは作成できません。

InfluxDB® は InfluxData によって登録された商標であり、TSDB for InfluxDB® とは提携しておらず、推奨もしていません。