ラインプロトコルは、InfluxDB® の Time Series Database(TSDB)にデータポイントを書き込むために使用されるテキストベースの形式です。
ラインプロトコル
構文
<measurement>[,<tag_key>=<tag_value>[,<tag_key>=<tag_value>]] <field_key>=<field_value>[,<field_key>=<field_value>] [<timestamp>]ラインプロトコルは、改行 \n を使用して行を区切ります。各行は、InfluxDB® の TSDB のデータポイントを表します。ラインプロトコルは空白に依存します。
構文の説明
ラインプロトコルは、InfluxDB® の TSDB の各データポイントのメジャーメント、タグセット、フィールドセット、およびタイムスタンプを指定するために使用されます。
要素 | 必須 | 説明 | タイプ(詳細については、「データ型」セクションを参照) |
|---|---|---|---|
measurement | はい。 | メジャーメントの名前。InfluxDB® の TSDB では、データポイントに対して 1 つのメジャーメントのみを指定できます。 | メジャーメント名は文字列である必要があります。 |
tag set | いいえ。 | データポイントのすべてのタグキーと値のペア。 | タグキーとタグ値は文字列である必要があります。 |
field set | はい。データポイントには少なくとも 1 つのフィールドを指定する必要があります。 | データポイントのすべてのフィールドキーと値のペア。 | フィールドキーは文字列である必要があります。フィールド値は、浮動小数点数、整数、またはブール値にすることができます。 |
タイムスタンプ | いいえ。データポイントにタイムスタンプが指定されていない場合、InfluxDB® の TSDB はサーバーのローカルタイムスタンプをデータポイントのタイムスタンプとして使用します。ローカルタイムスタンプは UTC で、ナノ秒単位で測定されます。 | データポイントのタイムスタンプ。InfluxDB® の TSDB では、データポイントは 1 つのタイムスタンプのみに関連付けることができます。 | タイムスタンプはナノ秒単位の UNIX 時間です。HTTP API を使用して、代替精度のタイムスタンプを指定できます。 |
InfluxDB® データベースにデータポイントを送信する前に、タグキーでタグをソートします。ソート結果は、Go bytes.Compare 関数の結果と一致する必要があります。 データ圧縮のパフォーマンスを向上させるために、データポイントには粗粒度のタイムスタンプを使用することをお勧めします。 Network Time Protocol(NTP)を使用して、ホスト間の時刻を同期します。InfluxDB® の TSDB は、ホストのローカル時間を使用してタイムスタンプをデータに割り当てます。ローカル時間は UTC です。ホストのクロックが NTP サーバーと同期されていない場合、ホストが InfluxDB® の TSDB に書き込むデータには、不正確なタイムスタンプが含まれている可能性があります。
データ型
データ型 | 要素 | 説明 |
|---|---|---|
FLOAT | field value | IEEE-754 64 ビット浮動小数点数を格納します。FLOAT はデフォルトの数値データ型です。 例: |
INTEGER | field value | -9223372036854775808 から 9223372036854775807 までの範囲の符号付き 64 ビット整数を格納します。数値の末尾に 例: |
STRING | Measurement、tag key、tag value、field key、および field value | 文字列を格納します。文字列の長さは 64 KB を超えることはできません。 |
BOOLEAN | field value | TRUE または FALSE 値を格納します。
|
TIMESTAMP | タイムスタンプ | UNIX ナノ秒タイムスタンプを格納します。HTTP API を使用して、代替精度のタイムスタンプを指定できます。
|
ブール値を書き込みおよびクエリする構文
ブール値を書き込む構文は、ブール値をクエリする構文とは異なります。詳細については、「FAQ」をご参照ください。
フィールド値のデータ型の違い
メジャーメントの各フィールドの値のデータ型は、シャード内では同じである必要がありますが、シャード間では異なる場合があります。フィールド値のデータ型の違いが SELECT * クエリに与える影響の詳細については、「FAQ」をご参照ください。
例
例 1:1.0 フィールド値を浮動小数点数として InfluxDB® の TSDB に書き込む
> INSERT mymeas value=1.0例 2:1 フィールド値を浮動小数点数として InfluxDB® の TSDB に書き込む
> INSERT mymeas value=1例 3:-1.234456e+78 フィールド値を浮動小数点数として InfluxDB® の TSDB に書き込む
> INSERT mymeas value=-1.234456e+78InfluxDB® の TSDB では、科学表記法を使用してフィールド値を指定できます。
例 4:1 フィールド値を整数として InfluxDB® の TSDB に書き込む
> INSERT mymeas value=1i例 5:"stringing along" フィールド値を文字列として InfluxDB® の TSDB に書き込む
> INSERT mymeas value="stringing along"文字列フィールド値を二重引用符(")で囲む必要があります。引用符の詳細については、「引用符」セクションを参照してください。
例 6:true フィールド値をブール値として InfluxDB® の TSDB に書き込む
> INSERT mymeas value=trueBOOLEAN 型のフィールド値を引用符(")で囲まないでください。次のステートメントは、true 値を文字列として InfluxDB® の TSDB に書き込みます。
> INSERT mymeas value="true"例 7:浮動小数点数が格納されているフィールドに文字列を書き込もうとする
浮動小数点数と文字列のタイムスタンプが同じシャードに格納されている場合、次の結果が返されます。
> INSERT mymeas value=3 1465934559000000000
> INSERT mymeas value="stringing along" 1465934559000000001
ERR: {"error":"field type conflict: input field \"value\" on measurement \"mymeas\" is type string, already exists as type float"}浮動小数点数と文字列のタイムスタンプが異なるシャードに格納されている場合、次の結果が返されます。
> INSERT mymeas value=3 1465934559000000000
> INSERT mymeas value="stringing along" 1466625759000000000
>引用符、特殊文字、および追加の命名ガイドライン
引用符
要素 | 二重引用符 | 一重引用符 |
|---|---|---|
タイムスタンプ | 使用しません。 | 使用しません |
measurement、tag key、tag value、field key | 使用しません。 | 使用しません |
field value | STRING 型のフィールド値を二重引用符(")で囲む必要があります。浮動小数点数、整数、またはブール値を二重引用符(")で囲まないでください。 | 使用しません |
ラインプロトコルでは、二重引用符(")または一重引用符(')を使用して、メジャーメント名、タグキー、タグ値、およびフィールドキーを囲むことができます。ただし、ラインプロトコルは二重引用符(")と一重引用符(')を名前、キー、または値の一部と見なします。これにより、クエリ構文が複雑になる可能性があります。次の例は、二重引用符(")と一重引用符(')がクエリ構文にどのように影響するかを示しています。
例
例 1:無効なラインプロトコル - タイムスタンプを二重引用符で囲む
> INSERT mymeas value=9 "1466625759000000000"
ERR: {"error":"unable to parse 'mymeas value=9 \"1466625759000000000\"': bad timestamp"}タイムスタンプが二重引用符(")または一重引用符(')で囲まれている場合、bad timestamp エラーが発生します。
例 2:セマンティックエラー - ブールフィールド値を二重引用符で囲む
> INSERT mymeas value="true"
> SHOW FIELD KEYS FROM "mymeas"
name: mymeas
------------
fieldKey fieldType
value stringInfluxDB® の TSDB は、二重引用符(")で囲まれたすべてのフィールド値を文字列と見なします。
例 3:セマンティックエラー - メジャーメント名を二重引用符で囲む
> INSERT "mymeas" value=200
> SHOW MEASUREMENTS
name: measurements
------------------
name
"mymeas"
> SELECT * FROM mymeas
> SELECT * FROM "mymeas"
> SELECT * FROM "\"mymeas\""
name: "mymeas"
--------------
time value
2016-06-14T20:36:21.836131014Z 200ラインプロトコルデータで二重引用符(")を使用してメジャーメント名を囲むと、セマンティックエラーが発生する可能性があります。FROM 句で二重引用符(")を使用してメジャーメント名を囲む場合、このセマンティックエラーを回避するには、バックスラッシュ(\)を使用して各二重引用符(")をエスケープする必要があります。
特殊文字
バックスラッシュ(\)を使用して、タグキー、タグ値、およびフィールドキーの次の特殊文字をエスケープします。
カンマ(
,)等号(
=)スペース(
)
バックスラッシュ(\)を使用して、メジャーメント名の次の特殊文字をエスケープします。
カンマ(
,)スペース(
)
バックスラッシュ(\)を使用して、STRING 型のフィールド値の次の特殊文字をエスケープします。
二重引用符(
")
ラインプロトコルでは、バックスラッシュ(\)をエスケープする必要はありません。このトピックにリストされていない他の特殊文字をエスケープする必要はありません。
例
例 1:特殊文字を含むデータポイントを書き込む
> INSERT "measurement\ with\ quo⚡️es\ and\ emoji",tag\ key\ with\ sp⚡️ces=tag\,value\,with"commas" field_k\ey="string field value, only \" need be esc⚡️ped"システムはデータポイントを書き込みます。データポイントでは、メジャーメントは "measurement with quo⚡️es and emoji"、タグキーは tag key with sp⚡️ces、タグ値は tag,value,with"commas"、フィールドキーは field_k\ey、フィールド値は string field value, only " need be esc⚡️ped です。
追加の命名ガイドライン
行頭のシャープ記号(#)は、ラインプロトコルでコメントの開始を示す有効な文字です。InfluxDB® の TSDB は、シャープ記号(#)と次の改行(\n)の間にあるすべての文字を無視します。
メジャーメント名、タグキー、タグ値、フィールドキー、およびフィールド値は大文字と小文字が区別されます。
ラインプロトコルは、InfluxQL キーワードを識別子名として使用します。ほとんどの場合、スキーマで InfluxQL キーワードを使用しないことをお勧めします。スキーマで InfluxQL キーワードを使用すると、InfluxQL キーワードがクエリステートメントのキーワードと見なされる可能性があります。これにより、データクエリでエラーが発生する可能性があります。
上記のルールは、time キーワードには適用されません。time キーワードは、連続クエリ名、データベース名、メジャーメント名、保存ポリシー名、サブスクリプション名、またはユーザー名として使用できます。これらの場合、time キーワードを二重引用符(")で囲む必要はありません。ただし、time キーワードをフィールドキーまたはタグキーとして使用することはできません。InfluxDB® の TSDB は、time キーワードがフィールドキーまたはタグキーとして使用されている書き込みリクエストを拒否し、エラーを報告します。詳細については、「FAQ」をご参照ください。
ラインプロトコルを使用してデータを書き込む
ラインプロトコルデータをデータベースに書き込む方法については、「ツール」の章を参照してください。
重複データポイント
データポイントは、メジャーメント名、タグセット、およびタイムスタンプによって一意に識別されます。新しいデータポイントのメジャーメント名、タグセット、およびタイムスタンプが既存のデータポイントと同じである場合、新しいデータポイントは重複データポイントです。既存のデータポイントとは異なるフィールドセットを含む重複データポイントを送信すると、新しいデータポイントのフィールドセットは、以前のフィールドセットと新しいフィールドセットの和集合になります。競合が発生した場合、新しいフィールドセットが優先されます。
重複データポイントの例とこの問題の回避方法の詳細については、「FAQ」をご参照ください。
InfluxDB® は InfluxData によって登録された商標であり、InfluxDB® の TSDB とは提携しておらず、推奨もしていません。