全部产品
Search
文档中心

Time Series Database:Referensi InfluxQL

更新时间:Jun 28, 2025

Influx Query Language (InfluxQL) adalah bahasa query mirip SQL yang didukung oleh TSDB untuk InfluxDB. InfluxQL menyediakan fitur untuk menyimpan dan menganalisis data deret waktu. Topik ini menjelaskan konsep dasar dari InfluxQL.

Notasi

InfluxQL menggunakan Extended Backus-Naur Form (EBNF) untuk menggambarkan sintaksis. Anda dapat menggunakan notasi yang ditentukan dalam EBNF saat menulis kode dengan bahasa pemrograman Go. Untuk informasi lebih lanjut, lihat Spesifikasi bahasa pemrograman Go. TSDB untuk InfluxDB® dikembangkan dengan menggunakan bahasa pemrograman Go dan mendukung notasi 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 "}" .

Notasi berikut diurutkan berdasarkan tingkat prioritas secara ascending:

|   alternation
()  grouping
[]  option (0 atau 1 kali)
{}  repetition (0 hingga n kali)

Elemen dalam permintaan query

Karakter

InfluxQL mendukung teks Unicode yang dienkripsi dalam UTF-8.

newline             = /* kode Unicode U+000A */ .
unicode_char        = /* sembarang karakter Unicode kecuali newline */ .

Huruf dan angka

Huruf: InfluxSQL mendukung karakter ASCII untuk huruf dan garis bawah. Garis bawah digunakan dengan cara yang sama seperti huruf dalam InfluxQL. Garis bawah diindikasikan oleh U+005F dalam set karakter ASCII.

Angka: InfluxQL hanya mendukung digit desimal.

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

Pengenal

Pengenal menentukan nama database, kebijakan retensi, pengguna, pengukuran, kunci tag, dan kunci bidang.

Pengenal yang didukung oleh InfluxQL sesuai dengan aturan berikut:

  • Pengenal yang diapit tanda kutip ganda (") dapat berisi karakter Unicode dan tidak boleh berisi line feed.

  • Pengenal yang diapit tanda kutip ganda (") dapat berisi karakter \" yang digunakan untuk meloloskan tanda kutip ganda (").

  • Pengenal yang diapit tanda kutip ganda (") dapat berisi kata kunci InfluxQL.

  • Karakter pertama dari pengenal yang tidak diapit tanda kutip (") harus berupa karakter ASCII untuk huruf atau garis bawah (_).

  • Pengenal yang tidak diapit tanda kutip (") hanya dapat berisi karakter ASCII, digit, dan garis bawah (_).

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

Contoh:

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

Kata Kunci

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

Jika Anda menggunakan kata kunci InfluxQL sebagai pengenal, Anda harus mengapit pengenal tersebut dalam tanda kutip ganda (") dalam pernyataan query.

Anda dapat menggunakan kata kunci time sebagai pengenal tanpa perlu mengapit pengenal tersebut dalam tanda kutip ganda (") dalam pernyataan query. Anda dapat menggunakan kata kunci time sebagai nama kueri kontinu, database, pengukuran, kebijakan retensi, langganan, atau pengguna. Dalam kasus ini, Anda tidak perlu menggunakan tanda kutip ganda (") untuk mengapit time. Anda tidak dapat menggunakan kata kunci time sebagai kunci bidang atau kunci tag. Data yang berisi kata kunci time yang digunakan sebagai kunci bidang atau kunci tag tidak dapat ditulis ke TSDB untuk InfluxDB. Jika Anda menggunakan kata kunci time sebagai kunci bidang atau kunci tag, TSDB untuk InfluxDB akan mengembalikan kesalahan. Untuk informasi lebih lanjut, lihat topik FAQ.

Literal

Bilangan Bulat

InfluxQL mendukung bilangan bulat desimal. InfluxQL tidak mendukung bilangan bulat heksadesimal atau oktal.

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

Bilangan Pecahan

InfluxQL mendukung bilangan titik mengambang. InfluxQL tidak mendukung eksponen.

float_lit           = int_lit "." int_lit .

String

String harus diapit dalam tanda kutip tunggal ('). String dapat berisi karakter \' yang digunakan untuk meloloskan tanda kutip tunggal (').

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

Durasi

Durasi menentukan panjang periode waktu. Literal durasi terdiri dari bilangan bulat dan satuan waktu. Spasi tidak dapat ditentukan antara bilangan bulat dan satuannya. Anda dapat menggunakan beberapa satuan untuk menggambarkan durasi.

Satuan yang valid

Satuan

Deskripsi

ns

Nanodetik (satu per miliar detik)

u atau µ

Mikrodetik (seper satu juta detik)

ms

Millidetik (satu ribu detik)

s

Detik

m

Menit

h

Jam

d

Hari

w

Minggu

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

Tanggal dan Waktu

Format tanggal dan waktu dalam InfluxQL tidak ditentukan berdasarkan EBNF. Tanggal dan waktu ditentukan berdasarkan aturan pemformatan dan penguraian Go. Dengan cara ini, tanggal dan waktu referensi ditentukan dalam format yang diperlukan oleh InfluxQL. Contoh berikut menunjukkan format tanggal dan waktu referensi.

Jika waktu lokal adalah 2 Januari 2006, 15:04:05, kode berikut menunjukkan tanggal dan waktu referensi dalam InfluxQL:

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

Nilai Boolean

bool_lit            = TRUE | FALSE .

Ekspresi Reguler

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

Operator perbandingan: =~ menunjukkan bahwa nilai konsisten. !~ menunjukkan bahwa nilai tidak konsisten.

Catatan

Dalam query InfluxQL, Anda dapat menggunakan ekspresi reguler untuk menentukan kunci bidang dan kunci tag dalam klausa SELECT, pengukuran dalam klausa FROM, nilai tag dalam klausa WHERE, dan kunci tag dalam klausa GROUP BY. Anda tidak dapat menggunakan ekspresi reguler untuk menentukan nilai bidang yang bukan tipe data STRING dalam klausa WHERE, database, dan kebijakan retensi.

Query

Sebuah query terdiri dari satu atau lebih pernyataan yang dipisahkan dengan titik koma (;).

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 .

Pernyataan

DELETE

Penting

TSDB untuk InfluxDB® mendukung operasi penghapusan. Namun, operasi penghapusan dapat mengakibatkan deadlock dan menyebabkan kegagalan operasi baca dan tulis karena sintaksis operasi penghapusan dalam InfluxDB®. Oleh karena itu, kami sarankan agar Anda tidak melakukan operasi penghapusan dalam TSDB untuk InfluxDB®.

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

Contoh:

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

EXPLAIN

Anda dapat menggunakan pernyataan EXPLAIN untuk mem-parsing dan merencanakan sebuah query, lalu menampilkan ringkasan tentang estimasi overhead sumber daya dari query tersebut.

SQL engine tertentu memungkinkan Anda menggunakan pernyataan EXPLAIN untuk menentukan urutan join dan algoritma join, serta mendorong predikat dan ekspresi. InfluxQL tidak mendukung operasi join. Dalam banyak kasus, hasil yang dikembalikan oleh fungsi tertentu mencakup overhead query InfluxQL. Hasilnya mencakup informasi seperti jumlah total deret waktu yang diakses, jumlah iterator yang mengakses file Time-Structured Merge Tree (TSM), dan jumlah blok TSM yang dipindai.

Rencana eksekusi yang dikembalikan oleh query EXPLAIN berisi elemen-elemen berikut:

  • Ekspresi

  • Bidang tambahan

  • Jumlah shard

  • Jumlah seri

  • Nilai yang di-cache

  • Jumlah file

  • Jumlah blok

  • Ukuran blok

Contoh:

> 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

Anda dapat menggunakan pernyataan EXPLAIN ANALYZE untuk mengeksekusi query InfluxQL dan menghitung overhead sumber daya aktual selama eksekusi.

explain_analyze_stmt = "EXPLAIN ANALYZE" select_stmt .

Contoh:

> 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

Anda dapat menggunakan pernyataan KILL QUERY untuk menghentikan query.

kill_query_statement = "KILL QUERY" query_id .

Dalam pernyataan tersebut, parameter query_id menentukan ID query yang ingin Anda hentikan. Anda dapat menggunakan pernyataan SHOW QUERIES untuk menanyakan ID query Anda. Dalam hasil yang dikembalikan, parameter qid menunjukkan ID query.

Contoh:

-- kill query dengan qid 36 pada host lokal
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 ] .

Contoh:

Anda dapat menggunakan pernyataan berikut untuk menanyakan data berdasarkan pengukuran yang berisi awalan cpu, menulis data hasil ke database berdasarkan pengukuran yang sama, dan menetapkan kebijakan retensi menjadi cpu_1h.

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

Anda dapat menggunakan pernyataan berikut untuk menanyakan data berdasarkan pengukuran yang ditentukan dan mengelompokkan data hasil berdasarkan hari berdasarkan zona waktu yang ditentukan.

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

SHOW CARDINALITY

SHOW CARDINALITY adalah serangkaian perintah yang dapat digunakan untuk menghitung cardinality perkiraan atau tepat dari pengukuran, seri, kunci tag, nilai tag, dan kunci bidang.

Anda dapat menggunakan pernyataan SHOW CARDINALITY untuk menanyakan cardinality perkiraan atau tepat. Sistem menghitung cardinality perkiraan berdasarkan rencana tertentu. Metode ini dapat digunakan terlepas dari ukuran cardinality. Sistem mengonsumsi overhead rendah untuk menghitung cardinality perkiraan meskipun cardinality perkiraan bernilai tinggi. Sistem menghitung cardinality tepat berdasarkan data TSM. Jika cardinality data yang ingin Anda proses tinggi, sistem mengonsumsi overhead tinggi untuk menghitung cardinality tepat. Kami sarankan Anda menanyakan cardinality perkiraan kecuali skenario bisnis Anda memerlukan cardinality tepat.

Anda dapat memfilter data berdasarkan time hanya ketika fitur Time Series Index (TSI) diaktifkan untuk database Anda.

Untuk informasi lebih lanjut tentang pernyataan SHOW CARDINALITY, lihat bagian berikut:

  • 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" .

Contoh:

-- tampilkan semua kueri kontinu
SHOW CONTINUOUS QUERIES

SHOW DATABASES

show_databases_stmt = "SHOW DATABASES" .

Contoh:

-- tampilkan semua database
SHOW DATABASES

SHOW DIAGNOSTICS

Anda dapat menggunakan pernyataan berikut untuk menanyakan informasi node seperti informasi build node, runtime, hostname, konfigurasi server, penggunaan memori, dan diagnostik runtime Go.

show_diagnostics_stmt = "SHOW DIAGNOSTICS"

SHOW FIELD KEY CARDINALITY

Jika Anda tidak menggunakan klausa ON <database> untuk menentukan database, cardinality perkiraan atau tepat dari set kunci bidang dalam database saat ini akan dikembalikan.

Catatan

Klausa opsional: ON <database>, FROM <sources>, WITH KEY = <key>, WHERE <kondisi>, GROUP BY <dimensi>, LIMIT, dan OFFSET. Jika Anda menggunakan klausa ini, cardinality tepat akan dikembalikan. Anda dapat memfilter data berdasarkan waktu hanya ketika fitur TSI diaktifkan untuk database Anda. Anda tidak dapat menggunakan filter waktu dalam klausa 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 ]

Contoh:

-- tampilkan cardinality perkiraan dari set kunci bidang database saat ini
SHOW FIELD KEY CARDINALITY

-- tampilkan cardinality tepat dari set kunci bidang database yang ditentukan
SHOW FIELD KEY EXACT CARDINALITY ON mydb

SHOW FIELD KEY

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

Contoh:

-- tampilkan kunci bidang dan tipe data nilai bidang dari semua pengukuran
SHOW FIELD KEYS

-- tampilkan kunci bidang dan tipe data nilai bidang dari pengukuran yang ditentukan
SHOW FIELD KEYS FROM "cpu"

SHOW GRANTS

show_grants_stmt = "SHOW GRANTS FOR" user_name .

Contoh:

-- tampilkan hak akses untuk jdoe
SHOW GRANTS FOR "jdoe"

SHOW MEASUREMENT CARDINALITY

Jika Anda tidak menggunakan klausa ON <database> untuk menentukan database, cardinality perkiraan atau tepat dari set pengukuran dalam database saat ini akan dikembalikan.

Catatan

Klausa opsional: ON <database>, FROM <sources>, WITH KEY = <key>, WHERE <kondisi>, GROUP BY <dimensi>, LIMIT, dan OFFSET. Jika Anda menggunakan klausa ini, cardinality tepat akan dikembalikan. Anda dapat memfilter data berdasarkan waktu hanya ketika fitur TSI diaktifkan untuk database Anda. Anda tidak dapat menggunakan filter waktu dalam klausa 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 ]

Contoh:

-- tampilkan cardinality perkiraan dari set pengukuran pada database saat ini
SHOW MEASUREMENT CARDINALITY

-- tampilkan cardinality tepat dari set pengukuran pada database yang ditentukan
SHOW MEASUREMENT EXACT CARDINALITY ON mydb

SHOW MEASUREMENTS

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

Contoh:

-- tampilkan semua pengukuran
SHOW MEASUREMENTS

-- tampilkan pengukuran dimana tag region = 'uswest' DAN tag host = 'serverA'
SHOW MEASUREMENTS WHERE "region" = 'uswest' AND "host" = 'serverA'

-- tampilkan pengukuran yang dimulai dengan 'h2o'
SHOW MEASUREMENTS WITH MEASUREMENT =~ /h2o.*/

SHOW QUERIES

show_queries_stmt = "SHOW QUERIES" .

Contoh:

-- tampilkan semua query yang sedang berjalan
SHOW QUERIES

SHOW RETENTION POLICIES

show_retention_policies_stmt = "SHOW RETENTION POLICIES" [on_clause] .

Contoh:

-- tampilkan semua kebijakan retensi pada database
SHOW RETENTION POLICIES ON "mydb"

SHOW SERIES

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

Contoh:

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

SHOW SERIES CARDINALITY

Jika Anda tidak menggunakan klausa ON <database> untuk menentukan database, cardinality perkiraan atau tepat dari set seri dalam database saat ini akan dikembalikan.

Cardinality dari set seri memengaruhi penggunaan memori akses acak (RAM).

Catatan

Klausa opsional: ON <database>, FROM <sources>, WITH KEY = <key>, WHERE <condition>, GROUP BY <dimensions>, LIMIT, dan klausa OFFSET. Jika Anda menggunakan klausa ini, kardinalitas yang tepat akan dikembalikan. Anda dapat menyaring data berdasarkan waktu hanya ketika fitur TSI diaktifkan untuk database Anda. Anda tidak dapat menggunakan filter waktu dalam klausa 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 ]

Contoh:

-- tampilkan estimasi kardinalitas dari seri pada basis data saat ini
SHOW SERIES CARDINALITY

-- tampilkan estimasi kardinalitas dari seri pada basis data yang ditentukan
SHOW SERIES CARDINALITY ON mydb

-- tampilkan kardinalitas seri yang tepat
SHOW SERIES EXACT CARDINALITY

-- tampilkan kardinalitas seri dari seri pada basis data yang ditentukan
SHOW SERIES EXACT CARDINALITY ON mydb

SHOW SHARD GROUPS

show_shard_groups_stmt = "SHOW SHARD GROUPS" .

Contoh:

SHOW SHARD GROUPS

SHOW SHARD

show_shards_stmt = "SHOW SHARDS" .

Contoh:

SHOW SHARDS

SHOW STATS

Anda dapat menggunakan pernyataan SHOW STATS untuk menanyakan informasi statistik tentang node TSDB untuk InfluxDB dan komponen yang tersedia. Anda dapat mengakses komponen setelah mengaktifkannya.

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

SHOW STATS

  • Pernyataan SHOW STATS tidak menanyakan penggunaan memori indeks. Untuk menanyakan penggunaan memori indeks, gunakan pernyataan SHOW STATS FOR 'indexes'.

  • Nilai statistik yang dikembalikan oleh SHOW STATS disimpan dalam memori. Nilai statistik diatur ulang ke 0 setelah node di-restart. Pernyataan SHOW STATS secara otomatis dieksekusi setiap 10 detik untuk menyediakan data bagi database _internal.

SHOW STATS FOR <component>

  • Anda dapat menggunakan pernyataan SHOW STATS FOR <component> untuk menanyakan informasi statistik tentang komponen tertentu.

  • Untuk komponen runtime, ringkasan penggunaan memori sistem TSDB untuk InfluxDB dikembalikan berdasarkan paket runtime Go. Untuk informasi lebih lanjut, lihat Go runtime.

SHOW STATS FOR 'indexes'

  • Anda dapat menggunakan pernyataan SHOW STATS FOR 'indexes' untuk menanyakan penggunaan memori perkiraan semua indeks. Pernyataan SHOW STATS tidak menanyakan penggunaan memori indeks karena perhitungan untuk penggunaan memori indeks mengonsumsi sejumlah besar sumber daya.

Contoh:

> 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" .

Contoh:

SHOW SUBSCRIPTIONS

SHOW TAG KEY CARDINALITY

Jika Anda tidak menggunakan klausa ON <database> untuk menentukan database, cardinality perkiraan atau tepat dari set kunci tag dalam database saat ini akan dikembalikan.

Catatan

Klausa opsional: ON <database>, FROM <sources>, WITH KEY = <key>, WHERE <kondisi>, GROUP BY <dimensi>, LIMIT, dan OFFSET. Jika Anda menggunakan klausa ini, cardinality tepat akan dikembalikan. Anda dapat memfilter data berdasarkan waktu hanya ketika fitur TSI diaktifkan untuk database Anda. Anda tidak dapat menggunakan filter waktu dalam klausa 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 ]

Contoh:

-- tampilkan cardinality kunci tag perkiraan
SHOW TAG KEY CARDINALITY

-- tampilkan cardinality kunci tag tepat
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 ] .

Contoh:

-- tampilkan semua kunci tag
SHOW TAG KEYS

-- tampilkan semua kunci tag dari pengukuran cpu
SHOW TAG KEYS FROM "cpu"

-- tampilkan semua kunci tag dari pengukuran cpu dimana kunci region = 'uswest'
SHOW TAG KEYS FROM "cpu" WHERE "region" = 'uswest'

-- tampilkan semua kunci tag dimana kunci 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 ] .

Contoh:

-- tampilkan semua nilai tag di seluruh pengukuran untuk tag region
SHOW TAG VALUES WITH KEY = "region"

-- tampilkan nilai tag dari pengukuran cpu untuk tag region
SHOW TAG VALUES FROM "cpu" WITH KEY = "region"

-- tampilkan semua nilai tag di seluruh pengukuran untuk semua kunci tag yang tidak termasuk huruf c
SHOW TAG VALUES WITH KEY !~ /.*c.*/

-- tampilkan nilai tag dari pengukuran cpu untuk kunci tag region & host dimana service = 'redis'
SHOW TAG VALUES FROM "cpu" WITH KEY IN ("region", "host") WHERE "service" = 'redis'

SHOW TAG VALUES CARDINALITY

Jika Anda tidak menggunakan klausa ON <database> untuk menentukan database, cardinality perkiraan atau tepat dari nilai tag yang sesuai dengan kunci tag yang ditentukan dalam database saat ini akan dikembalikan.

Catatan

Klausa opsional: ON <database>, FROM <sources>, WITH KEY = <key>, WHERE <kondisi>, GROUP BY <dimensi>, LIMIT, dan OFFSET. Jika Anda menggunakan klausa ini, cardinality tepat akan dikembalikan. Anda dapat memfilter data berdasarkan waktu hanya ketika fitur TSI diaktifkan untuk database Anda.

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

Contoh:

-- tampilkan cardinality nilai kunci tag perkiraan untuk kunci tag yang ditentukan
SHOW TAG VALUES CARDINALITY WITH KEY = "myTagKey"

-- tampilkan cardinality nilai kunci tag perkiraan untuk kunci tag yang ditentukan
SHOW TAG VALUES CARDINALITY WITH KEY = "myTagKey"

-- tampilkan cardinality nilai kunci tag tepat untuk kunci tag yang ditentukan
SHOW TAG VALUES EXACT CARDINALITY WITH KEY = "myTagKey"

-- tampilkan cardinality nilai kunci tag tepat untuk kunci tag yang ditentukan
SHOW TAG VALUES EXACT CARDINALITY WITH KEY = "myTagKey"

SHOW USERS

show_users_stmt = "SHOW USERS" .

Contoh:

-- tampilkan semua pengguna
SHOW USERS

Klausa

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 ")"  ) .

Ekspresi

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 .

Lainnya

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 .

Komentar

Anda dapat menambahkan komentar dalam pernyataan InfluxQL untuk mendeskripsikan query Anda.

  • Awalan dari komentar satu baris adalah dua tanda hubung (--) dan akhirannya adalah line feed yang dapat dideteksi oleh TSDB untuk InfluxDB®. Komentar satu baris tidak dapat mencakup beberapa baris.

  • Awalan dari komentar multi-baris adalah /* dan akhirannya adalah */. Komentar multi-baris dapat mencakup beberapa baris. InfluxQL tidak mendukung komentar multi-baris bersarang.

Bagaimana query dilakukan oleh mesin query?

Kami sarankan Anda mempelajari pengetahuan dasar tentang InfluxQL dan mempelajari cara query InfluxQL dilakukan oleh mesin query. Dengan cara ini, Anda dapat mempelajari cara menggunakan hasil query untuk skenario bisnis Anda dan cara membuat query secara efisien.

Proses berikut menggambarkan siklus hidup sebuah query:

  1. Pernyataan InfluxQL diubah menjadi token dan kemudian diuraikan menjadi pohon sintaksis abstrak (AST). Hasilnya adalah representasi kode dari query.

  2. AST diteruskan ke query executor yang menetapkan query ke handler yang sesuai. Misalnya, query terkait metadata dijalankan oleh layanan metadata dan pernyataan SELECT dieksekusi dalam shard.

  3. Mesin query menemukan shard yang cocok dengan rentang waktu yang ditentukan. Rentang waktu ditentukan dalam pernyataan SELECT. Dalam shard tersebut, iterator dibuat untuk setiap bidang yang ditentukan dalam pernyataan.

  4. Iterator diteruskan ke emitter. Emitter melepaskan iterator dan menggabungkan titik data hasil. Emitter mengonversi titik data berbasis waktu sederhana menjadi objek kompleks dan mengembalikan objek tersebut ke klien.

Iterator

Iterator adalah inti dari mesin query. Iterator menyediakan antarmuka sederhana yang dapat digunakan untuk mengulang melalui serangkaian titik data. Dalam contoh berikut, iterator digunakan untuk mengulang melalui angka floating-point:

type FloatIterator interface {
    Next() *FloatPoint
}

Dalam contoh berikut, antarmuka IteratorCreator digunakan untuk membuat iterator:

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

Anda dapat menggunakan IteratorOptions untuk menentukan bidang valid, rentang waktu, dan dimensi saat membuat iterator. Antarmuka IteratorCreator dapat digunakan di beberapa level seperti Shards, Shard, dan Engine. Dengan cara ini, query dapat dioptimalkan. Misalnya, data dapat diproses sebelum fungsi COUNT() mengembalikan hasil.

Anda dapat menggunakan iterator untuk membaca data mentah dari node data. Anda juga dapat menggabungkan iterator untuk menyediakan data untuk iterator input. Misalnya, Anda dapat menggunakan DistinctIterator untuk menghitung nilai dalam setiap jendela waktu untuk iterator input. Anda juga dapat menggunakan FillIterator untuk menghasilkan data untuk menggantikan titik data yang hilang dalam iterator input.

Anda dapat menggabungkan iterator untuk mengumpulkan data. Pernyataan berikut memberikan contoh:

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

Dalam pernyataan sebelumnya, MEAN(value) menentukan mean iterator yang dihasilkan berdasarkan shard. Dalam pernyataan berikut, iterator yang digunakan untuk menghitung turunan dari nilai rata-rata ditambahkan:

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

Bidang tambahan

InfluxQL mendukung fungsi pemilih seperti FIRST(), LAST(), MIN(), dan MAX(). Oleh karena itu, mesin query harus mengembalikan titik data yang diminta dan data relevan pada saat yang sama.

Pernyataan berikut memberikan contoh:

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

Anda dapat menggunakan pernyataan tersebut untuk menanyakan value dari titik data pertama yang dihasilkan setiap jam dan host yang terkait dengan setiap titik data. Untuk membuat bidang tambahan lebih efisien, hanya satu jenis value yang ditentukan untuk data points. Dengan cara ini, parameter host digunakan sebagai bidang tambahan untuk titik data. Bidang tambahan ditambahkan ke titik data sampai titik data tersebut diteruskan ke emitter. Emitter memisahkan bidang tambahan dan mengalokasikannya ke iterator yang sesuai.

Iterator bawaan

Anda dapat menggunakan iterator pembantu berikut untuk melakukan query:

  • Iterator gabungan: menggabungkan satu atau lebih iterator dengan tipe yang sama untuk menghasilkan iterator baru. Iterator gabungan memastikan bahwa semua titik data yang dikumpulkan dalam jendela waktu saat ini dikembalikan sebelum mesin query memindai data untuk jendela waktu berikutnya. Iterator gabungan tidak mengurutkan titik data berdasarkan waktu. Iterator gabungan mengumpulkan query yang memerlukan akses cepat dan memiliki persyaratan rendah untuk pengurutan.

  • Iterator gabungan terurut: menggabungkan satu atau lebih iterator dengan tipe yang sama untuk menghasilkan iterator baru dan mengurutkan titik data berdasarkan waktu. Iterator gabungan terurut memerlukan waktu yang lebih lama untuk memproses data daripada iterator gabungan. Query non-agregat yang menanyakan titik data mentah mengurutkan titik data berdasarkan waktu dan kemudian mengembalikan titik data. Dengan cara ini, iterator gabungan terurut dapat digunakan untuk query non-agregat.

  • Iterator batas: membatasi jumlah titik data untuk setiap grup nama atau grup tag. Iterator batas dibuat berdasarkan sintaksis LIMIT dan OFFSET.

  • Iterator isi: menghasilkan nilai untuk menggantikan titik data yang hilang dalam iterator input. Nilai yang dihasilkan dapat berupa nilai null, nilai dari titik data sebelumnya, atau nilai yang ditentukan.

  • Iterator buffer: memastikan bahwa titik data berada dalam status Unread dan mengembalikan titik data ke buffer. Dalam hal ini, titik data dapat dibaca kembali. Iterator buffer biasanya digunakan untuk meramalkan data dalam jendela waktu.

  • Iterator reduksi: memanggil fungsi reduksi untuk memproses setiap titik data dalam jendela waktu. Setelah semua operasi dalam jendela waktu dilakukan, semua titik data dalam jendela dikembalikan. Iterator reduksi dapat digunakan untuk fungsi agregat sederhana seperti COUNT().

  • Iterator reduksi slice: mengumpulkan semua titik data dalam jendela waktu dan kemudian mentransmisikan titik data ke fungsi reduksi. Hasil yang diminta dikembalikan dari iterator reduksi slice. Iterator reduksi slice dapat digunakan untuk fungsi agregat seperti DERIVATIVE().

  • Iterator transformasi: memanggil fungsi transformasi untuk mengonversi setiap titik data yang diperoleh dari iterator input menjadi ekspresi biner.

  • Iterator deduplikasi: menghapus duplikat titik data dan mengembalikan titik data unik. Iterator deduplikasi mengonsumsi sejumlah besar sumber daya dan hanya dapat digunakan untuk query yang dijalankan pada ukuran data kecil, seperti query metadata.

Iterator panggilan

Fungsi InfluxQL dapat dieksekusi di dua tingkat: tingkat shard dan tingkat engine.

Untuk membuat iterator lebih efisien, panggilan fungsi tertentu dapat dieksekusi di beberapa lapisan. Misalnya, COUNT() dapat dieksekusi di tingkat shard. Sebuah count iterator dapat mencakup beberapa count iterator untuk menghitung jumlah total shard. Anda dapat menggunakan fungsi NewCallIterator() untuk membuat iterator hitungan.

Iterator tertentu lebih kompleks dan harus digunakan untuk menjalankan panggilan fungsi di tingkat engine. Misalnya, DERIVATIVE() mendapatkan semua titik data dalam jendela waktu dan kemudian menghitung titik data. Iterator jenis ini dibuat oleh mesin query dan tidak dapat dibuat di tingkat shard.

InfluxDB® adalah merek dagang terdaftar oleh InfluxData, yang tidak berafiliasi dengan, dan tidak mendukung, TSDB untuk InfluxDB®.