Protokol baris adalah format berbasis teks yang digunakan untuk menulis titik data ke Time Series Database (TSDB) untuk InfluxDB®.
Protokol baris
Sintaks
<measurement>[,<tag_key>=<tag_value>[,<tag_key>=<tag_value>]] <field_key>=<field_value>[,<field_key>=<field_value>] [<timestamp>]
Protokol baris menggunakan karakter baris baru \n untuk memisahkan baris. Setiap baris mewakili sebuah titik data di TSDB untuk InfluxDB®. Protokol ini sensitif terhadap spasi.
Deskripsi Sintaks
Protokol baris digunakan untuk menentukan pengukuran, set tag, set field, dan timestamp dari setiap titik data di TSDB untuk InfluxDB®.
Elemen |
Diperlukan |
Deskripsi |
Tipe (Informasi lebih lanjut di bagian "Tipe Data") |
|---|---|---|---|
Pengukuran |
Ya. |
Nama pengukuran. Di TSDB untuk InfluxDB®, hanya satu pengukuran yang dapat ditentukan untuk sebuah titik data. |
Nama pengukuran harus berupa string. |
Set Tag |
Tidak. |
Semua pasangan kunci-nilai tag untuk sebuah titik data. |
Kunci tag dan nilai tag harus berupa string. |
Set Field |
Ya. Setidaknya satu field harus ditentukan untuk sebuah titik data. |
Semua pasangan kunci-nilai field untuk sebuah titik data. |
Kunci field harus berupa string. Nilai field bisa berupa angka floating-point, integer, atau nilai Boolean. |
Timestamp |
Tidak. Jika tidak ada timestamp yang ditentukan untuk sebuah titik data, TSDB untuk InfluxDB® menggunakan timestamp lokal server sebagai timestamp dari titik data tersebut. Timestamp lokal dalam UTC dan diukur dalam nanodetik. |
Timestamp dari sebuah titik data. Di TSDB untuk InfluxDB®, sebuah titik data hanya dapat dikaitkan dengan satu timestamp. |
Sebuah timestamp adalah waktu UNIX dalam nanodetik. Anda dapat menggunakan API HTTP untuk menentukan timestamp dengan presisi alternatif. |
Sebelum mengirimkan titik data ke database TSDB untuk InfluxDB®, urutkan tag berdasarkan kunci tag. Hasil pengurutan harus sesuai dengan hasil dari fungsi Go bytes.Compare. Kami merekomendasikan Anda menggunakan timestamp granular kasar untuk titik data guna meningkatkan kinerja kompresi data. Gunakan Network Time Protocol (NTP) untuk menyinkronkan waktu antar host. TSDB untuk InfluxDB® menggunakan waktu lokal host untuk memberikan timestamp pada data. Waktu lokal dalam UTC. Jika jam host tidak disinkronkan dengan NTP server, data yang ditulis oleh host ke TSDB untuk InfluxDB® mungkin mengandung timestamp yang tidak akurat.
Tipe data
Tipe data | Elemen | Deskripsi |
|---|---|---|
FLOAT | nilai field | Menyimpan angka floating-point 64-bit IEEE-754. FLOAT adalah tipe data numerik default. Contoh: |
INTEGER | nilai field | Menyimpan integer bertanda 64-bit yang berkisar dari -9223372036854775808 hingga 9223372036854775807. Anda dapat menambahkan Contoh: |
STRING | Pengukuran, kunci tag, nilai tag, kunci field, dan nilai field | Menyimpan string. Sebuah string tidak boleh melebihi 64 KB panjangnya. |
BOOLEAN | nilai field | Menyimpan nilai TRUE atau FALSE.
|
TIMESTAMP | Timestamp | Menyimpan timestamp UNIX dalam nanodetik. Anda dapat menggunakan API HTTP untuk menentukan timestamp dengan presisi alternatif.
|
Sintaks untuk Menulis dan Meminta Nilai Boolean
Sintaks untuk menulis nilai Boolean berbeda dari sintaks untuk meminta nilai Boolean. Untuk informasi lebih lanjut, lihat FAQ.
Perbedaan Tipe Data Nilai Field
Tipe data dari nilai untuk setiap field dalam pengukuran harus sama dalam shard, tetapi bisa berbeda di antara shard. Untuk informasi lebih lanjut tentang bagaimana perbedaan tipe data nilai field memengaruhi permintaan SELECT *, lihat FAQ.
Contoh
Contoh 1: Menulis Nilai Field 1.0 sebagai Angka Floating-Point ke TSDB untuk InfluxDB®
> INSERT mymeas value=1.0
Contoh 2: Menulis Nilai Field 1 sebagai Angka Floating-Point ke TSDB untuk InfluxDB®
> INSERT mymeas value=1
Contoh 3: Menulis Nilai Field -1.234456e+78 sebagai Angka Floating-Point ke TSDB untuk InfluxDB®
> INSERT mymeas value=-1.234456e+78
Di TSDB untuk InfluxDB®, Anda dapat menggunakan notasi ilmiah untuk menentukan nilai field.
Contoh 4: Menulis Nilai Field 1 sebagai Integer ke TSDB untuk InfluxDB®
> INSERT mymeas value=1i
Contoh 5: Menulis Nilai Field "stringing along" sebagai String ke TSDB untuk InfluxDB®
> INSERT mymeas value="stringing along"
Anda harus menggunakan tanda kutip ganda (") untuk mengapit nilai field string. Untuk informasi lebih lanjut tentang tanda kutip, lihat bagian "Tanda Kutip".
Contoh 6: Menulis Nilai Field true sebagai Nilai Boolean ke TSDB untuk InfluxDB®
> INSERT mymeas value=true
Jangan mengapit nilai field tipe BOOLEAN dalam tanda kutip ("). Pernyataan berikut menulis nilai true sebagai string ke TSDB untuk InfluxDB®:
> INSERT mymeas value="true"
Contoh 7: Mencoba Menulis String ke Field Tempat Angka Floating-Point Disimpan
Jika timestamp dari angka floating-point dan string disimpan dalam shard yang sama, hasil berikut akan dikembalikan:
> 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"}
Jika timestamp dari angka floating-point dan string disimpan dalam shard yang berbeda, hasil berikut akan dikembalikan:
> INSERT mymeas value=3 1465934559000000000
> INSERT mymeas value="stringing along" 1466625759000000000
>
Tanda kutip, karakter khusus, dan panduan penamaan tambahan
Tanda Kutip
Elemen | Tanda kutip ganda | Tanda kutip tunggal |
|---|---|---|
Timestamp | Tidak digunakan. | Tidak digunakan |
pengukuran, kunci tag, nilai tag, kunci field | Tidak digunakan. | Tidak digunakan |
nilai field | Anda harus menggunakan tanda kutip ganda (") untuk mengapit nilai field tipe STRING. Jangan mengapit angka floating-point, integer, atau nilai Boolean dalam tanda kutip ganda ("). | Tidak digunakan |
Protokol baris memungkinkan Anda menggunakan tanda kutip ganda (") atau tanda kutip tunggal (') untuk mengapit nama pengukuran, kunci tag, nilai tag, dan kunci field. Namun, protokol baris menganggap tanda kutip ganda (") dan tanda kutip tunggal (') sebagai bagian dari nama, kunci, atau nilai. Hal ini dapat membuat sintaks permintaan menjadi kompleks. Contoh berikut menunjukkan bagaimana tanda kutip ganda (") dan tanda kutip tunggal (') memengaruhi sintaks permintaan.
Contoh
Contoh 1: Protokol Baris Tidak Valid - Mengapit Timestamp dalam Tanda Kutip Ganda
> INSERT mymeas value=9 "1466625759000000000"
ERR: {"error":"unable to parse 'mymeas value=9 \"1466625759000000000\"': bad timestamp"}
Jika timestamp diapit dalam tanda kutip ganda (") atau tanda kutip tunggal ('), kesalahan bad timestamp akan terjadi.
Contoh 2: Kesalahan Semantik - Mengapit Nilai Field Boolean dalam Tanda Kutip Ganda
> INSERT mymeas value="true"
> SHOW FIELD KEYS FROM "mymeas"
name: mymeas
------------
fieldKey fieldType
value string
TSDB untuk InfluxDB® menganggap bahwa semua nilai field yang diapit dalam tanda kutip ganda (") adalah string.
Contoh 3: Kesalahan Semantik - Mengapit Nama Pengukuran dalam Tanda Kutip Ganda
> 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
Jika Anda menggunakan tanda kutip ganda (") untuk mengapit nama pengukuran dalam data protokol baris Anda, kesalahan semantik mungkin terjadi. Untuk menghindari kesalahan semantik ini ketika Anda menggunakan tanda kutip ganda (") untuk mengapit nama pengukuran dalam klausa FROM, Anda harus menggunakan backslash (\) untuk meloloskan setiap tanda kutip ganda (").
Karakter khusus
Gunakan backslash (\) untuk meloloskan setiap karakter khusus berikut dalam kunci tag, nilai tag, dan kunci field:
Koma (
,)Tanda sama dengan (
=)Spasi (
)
Gunakan backslash (\) untuk meloloskan setiap karakter khusus berikut dalam nama pengukuran:
Koma (
,)Spasi (
)
Gunakan backslash (\) untuk meloloskan setiap karakter khusus berikut dalam nilai field tipe STRING:
Tanda kutip ganda (
")
Protokol baris tidak memerlukan agar Anda meloloskan backslash (\). Anda tidak perlu meloloskan karakter khusus lain yang tidak terdaftar dalam topik ini.
Contoh
Contoh 1: Menulis Titik Data yang Mengandung Karakter Khusus
> 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"
Sistem menulis sebuah titik data. Dalam titik data tersebut, pengukuran adalah "measurement with quo⚡️es and emoji", kunci tag adalah tag key with sp⚡️ces, nilai tag adalah tag,value,with"commas", kunci field adalah field_k\ey, dan nilai field adalah string field value, only " need be esc⚡️ped.
Panduan penamaan tambahan
Karakter pagar (#) di awal baris adalah karakter valid yang menunjukkan awal dari komentar dalam protokol baris. TSDB untuk InfluxDB® mengabaikan semua karakter yang terletak antara karakter pagar (#) dan line feed berikutnya (\n).
Nama pengukuran, kunci tag, nilai tag, kunci field, dan nilai field bersifat peka huruf besar-kecil.
Protokol baris menggunakan kata kunci InfluxQL sebagai nama pengenal. Dalam sebagian besar kasus, kami merekomendasikan agar Anda tidak menggunakan kata kunci InfluxQL dalam skema Anda. Jika Anda menggunakan kata kunci InfluxQL dalam skema Anda, kata kunci InfluxQL tersebut mungkin dianggap sebagai kata kunci dari pernyataan permintaan. Hal ini dapat menyebabkan kesalahan untuk permintaan data.
Aturan sebelumnya tidak berlaku untuk kata kunci time. Anda dapat menggunakan kata kunci time sebagai nama kueri kontinu, nama database, nama pengukuran, nama kebijakan retensi, nama langganan, atau nama pengguna. Dalam kasus-kasus ini, Anda tidak perlu menggunakan tanda kutip ganda (") untuk mengapit kata kunci time. Namun, Anda tidak dapat menggunakan kata kunci time sebagai kunci field atau kunci tag. TSDB untuk InfluxDB® menolak permintaan tulis di mana kata kunci time digunakan sebagai kunci field atau kunci tag, dan melaporkan kesalahan. Untuk informasi lebih lanjut, lihat FAQ.
Menggunakan protokol baris untuk menulis data
Untuk informasi tentang cara menulis data protokol baris ke database, lihat bab "Alat".
Titik data duplikat
Sebuah titik data secara unik diidentifikasi oleh nama pengukuran, set tag, dan timestamp. Jika nama pengukuran, set tag, dan timestamp dari titik data baru sama dengan titik data yang sudah ada, titik data baru adalah titik data duplikat. Jika Anda mengirimkan titik data duplikat yang berisi set field berbeda dari titik data yang sudah ada, set field dari titik data baru menjadi gabungan dari set field sebelumnya dan set field baru. Jika terjadi konflik, set field baru akan diutamakan.
Untuk informasi lebih lanjut tentang contoh titik data duplikat dan cara menghindari masalah ini, lihat FAQ.
InfluxDB® adalah merek dagang terdaftar oleh InfluxData, yang tidak berafiliasi dengan, dan tidak mendukung, TSDB untuk InfluxDB®.