Tema ini memberikan jawaban atas beberapa pertanyaan yang sering diajukan (FAQ) mengenai perbedaan antara konsep-konsep serupa terkait TSDB untuk InfluxDB® dan perbedaan antara TSDB untuk InfluxDB® dengan layanan basis data lainnya dalam hal operasi.
Panduan FAQ
Seri dan kardinalitas seri
Administrasi
Bagaimana cara melihat penggunaan disk dari suatu pengukuran?
Mengapa kebijakan retensi yang telah dimodifikasi gagal berlaku?
Mengapa penggunaan memori tinggi? Apakah perlu meningkatkan spesifikasi instans?
Apakah Grafana yang dikonfigurasi sebelumnya di InfluxDB didukung?
Mengapa terjadi kesalahan blokir IP saat menghubungkan ke instans?
Apa hubungan antara durasi grup shard dan kebijakan retensi?
Mengapa tidak ada data yang hilang setelah saya memodifikasi kebijakan retensi?
Mengapa TSDB untuk InfluxDB® tidak dapat mem-parsing unit waktu mikrodetik?
Kueri data
Cara menentukan interval waktu yang dikembalikan oleh kueri GROUP BY time()
Mengapa respons kueri tidak mencakup data atau hanya mencakup sebagian data?
Apakah saya bisa melakukan operasi matematika pada timestamp?
Kapan saya harus menggunakan tanda kutip tunggal (') dan tanda kutip ganda (") dalam kueri?
Mengapa data saya hilang setelah membuat kebijakan retensi default (DEFAULT)?
Bagaimana cara saya meminta data ketika kunci tag dan kunci bidang memiliki nama yang sama?
Apakah urutan filter timestamp dalam pernyataan kueri berpengaruh signifikan terhadap waktu respons?
Bagaimana cara menentukan pernyataan SELECT untuk meminta tag yang tidak memiliki nilai?
Penulisan data
Tindakan pencegahan apa yang perlu diambil saat menulis data menggunakan protokol baris InfluxDB?
Mengapa data belum ditulis ke disk meskipun penggunaan ruang disk telah dikurangi?
Bagaimana cara menulis nilai bidang dengan tipe data INTEGER?
Bagaimana TSDB untuk InfluxDB® memproses titik-titik duplikat?
Apa itu line feed yang diperlukan dalam permintaan API HTTP?
Karakter dan kata apa yang tidak disarankan saat menulis data ke TSDB untuk InfluxDB®?
Kapan harus menggunakan tanda kutip tunggal (') dan tanda kutip ganda (") saat menulis data?
Apakah granularitas timestamp berpengaruh signifikan terhadap kinerja sistem?
CLI untuk TSDB for InfluxDB®
Tipe data
Mengapa saya tidak dapat meminta nilai bidang dari tipe data BOOLEAN?
Bagaimana TSDB for InfluxDB® menangani perbedaan dalam tipe data bidang di seluruh shard?
Apa bilangan bulat terkecil dan terbesar yang dapat disimpan oleh TSDB for InfluxDB®?
Apa cap waktu terkecil dan terbesar yang dapat disimpan oleh TSDB for InfluxDB®?
Fungsi InfluxQL
Migrasi data InfluxDB
Seri dan kardinalitas seri
Mengapa kardinalitas seri penting?
TSDB untuk InfluxDB® mempertahankan indeks dalam memori untuk setiap seri dalam sistem. Penggunaan RAM meningkat jika jumlah seri bertambah. Jika kardinalitas seri terlalu tinggi, sistem operasi akan menghentikan proses TSDB untuk InfluxDB® dan melempar pengecualian kehabisan memori (OOM). Referensi InfluxQL
Bagaimana cara melakukan pemodelan? Apa saja tindakan pencegahan yang harus diambil?
Kami merekomendasikan Anda menyimpan tidak lebih dari satu juta deret waktu. Untuk informasi lebih lanjut tentang skenario yang melibatkan sejumlah besar deret waktu, lihat Pendahuluan. Sebelum Anda mulai memodelkan, lihat Desain Skema InfluxDB dan Tata Letak Data. InfluxDB membuat indeks berdasarkan tag untuk mempercepat kueri. Tag yang berlebihan memperlambat kecepatan baca/tulis karena sejumlah besar data deret waktu. Oleh karena itu, Anda perlu mengontrol jumlah deret waktu dan memperhatikan item-item berikut:
Jangan gunakan nilai yang rentan terhadap ekspansi tak terbatas sebagai tag, seperti ID, nilai hash, dan waktu.
Jangan simpan informasi dalam nama pengukuran dan tag. Simpan informasi terkait ke tag atau bidang.
Jangan simpan beberapa informasi dalam satu tag. Pisahkan menjadi beberapa tag.
Jika suatu bidang sering digunakan dalam operasi Group By, bidang ini dapat dimodelkan sebagai tag.
Administrasi
Bagaimana cara mempertahankan stabilitas sistem?
Jaga penggunaan memori di bawah 80%.
Kontrol jumlah deret waktu dan jaga di bawah satu juta. Kami merekomendasikan Anda merujuk pada tindakan pencegahan pemodelan untuk perencanaan yang tepat.
Kontrol jumlah pengukuran. Kami merekomendasikan Anda merujuk pada tindakan pencegahan pemodelan untuk perencanaan yang tepat.
Kontrol jumlah total data yang sesuai. Kami merekomendasikan Anda konfigurasikan kebijakan retensi data untuk secara teratur menghapus data historis.
Kontrol jumlah shard dan jumlah shard penulisan bersamaan. Kami merekomendasikan Anda mengonfigurasi durasi grup shard yang sesuai dan konfigurasikan kebijakan retensi data untuk menghapus shard historis.
Bagaimana cara melihat penggunaan disk dari suatu pengukuran?
Anda tidak dapat melihat penggunaan disk pada level pengukuran. Pengukuran adalah konsep logis, dan semua pengukuran di bawah basis data yang sama dicampur dalam file data dasar.
Bagaimana cara menghapus data secara efisien dan aman?
Operasi drop measurement, drop series, dan delete melakukan penghapusan logis di basis data InfluxDB. Metode penghapusan ini memiliki kekurangan berikut:
Dalam InfluxDB 1.X, deadlock mungkin terjadi pada tingkat implementasi kode.
Kueri perlu menyaring garis waktu yang dihapus, yang sangat mempengaruhi efisiensi kueri.
Ruang disk tidak dapat segera dilepaskan. Ruang tersebut hanya dilepaskan setelah data digabungkan dan dijadwalkan di latar belakang.
Kami merekomendasikan Anda menghapus data dengan memodifikasi kebijakan retensi atau melakukan operasi drop shard atau drop database.
Mengapa kebijakan retensi yang telah dimodifikasi gagal berlaku?
Dalam TSDB untuk InfluxDB® 1.8.13 dan versi lebih baru, kebijakan retensi yang telah dimodifikasi langsung berlaku. Jika tidak, lakukan operasi berikut:
Periksa apakah versi TSDB untuk InfluxDB® adalah 1.8.12 atau lebih lama. Jika ya, tunggu selama 30 hingga 60 menit.
Lakukan operasi
show shardsuntuk memeriksa rentang waktu yang dicakup oleh shard. Anda hanya dapat menghapus shard ketika waktu saat ini lebih dari akhir rentang waktu.
Mengapa layanan sering terganggu?
Periksa apakah penggunaan memori tinggi. Jika penggunaan memori melebihi 80%, OOM mungkin terjadi. Kami merekomendasikan Anda meningkatkan spesifikasi instans. Untuk informasi lebih lanjut, lihat Mengapa penggunaan memori tinggi? Apakah saya perlu meningkatkan spesifikasi instans?
Mengapa penggunaan memori tinggi? Apakah saya perlu meningkatkan spesifikasi instans?
Penggunaan memori tinggi mungkin disebabkan oleh salah satu dari alasan berikut:
Sejumlah besar deret waktu. Penggabungan indeks mengonsumsi sejumlah besar memori. Periksa apakah desain skema masuk akal. Kami merekomendasikan Anda tidak menyimpan lebih dari 1 juta deret waktu. Untuk informasi lebih lanjut tentang skenario yang melibatkan sejumlah besar deret waktu, lihat Pendahuluan.
Volume data besar atau sejumlah besar shard. Volume data besar berarti lebih banyak ruang yang ditempati. Penggabungan file data juga mengonsumsi sejumlah besar memori, dan restart membutuhkan waktu lama. Kami merekomendasikan Anda menghapus beberapa data dengan merujuk pada Bagaimana cara menghapus data secara efisien dan aman? Untuk informasi lebih lanjut tentang skenario di mana sejumlah besar data disimpan, lihat Pendahuluan.
Kueri besar. Kami merekomendasikan Anda menyertakan filter tag dan rentang waktu untuk menghindari kueri besar dan mengurangi jumlah data yang dipindai.
Jika Anda menggunakan Grafana untuk mengkueri data, Grafana mungkin melakukan operasi
show tag keyssaat mengonfigurasi grafik. Kueri ini mengonsumsi sejumlah besar memori dalam waktu singkat dan dapat menyebabkan OOM. Kami merekomendasikan Anda memperbarui versi TSDB untuk InfluxDB® ke 1.8.13 atau lebih baru. Setelah pembaruan, Anda dapat menonaktifkan operasishow tag keys.
Jika masalah di atas tidak dapat diselesaikan dan penggunaan memori melebihi 80%, kami merekomendasikan Anda meningkatkan spesifikasi instans. Untuk informasi lebih lanjut, lihat Tingkatkan dan turunkan instans TSDB untuk InfluxDB®.
Apakah saya bisa menurunkan kapasitas penyimpanan?
InfluxDB menggunakan cloud disk untuk menyimpan file dasar. Anda tidak dapat menurunkan kapasitas penyimpanan cloud disk.
Apakah layanan restart saat saya mengubah ukuran disk?
Proses restart saat disk InfluxDB diubah ukurannya. Untuk instans Edisi Standar, layanan mungkin tidak tersedia selama restart. Untuk instans Edisi Ketersediaan Tinggi, ketiga node direstart satu per satu, sehingga layanan tidak terpengaruh dalam kebanyakan kasus.
Berapa lama waktu yang dibutuhkan untuk merestart layanan?
Waktu restart terkait dengan jumlah data yang disimpan. Semakin banyak data yang disimpan, semakin lama waktu restart.
Apakah Grafana yang dikonfigurasi sebelumnya di InfluxDB didukung?
Kami merekomendasikan Anda menggunakan yang disediakan oleh Alibaba Cloud. Kami merekomendasikan Anda tidak menggunakan Grafana yang dikonfigurasi sebelumnya di InfluxDB karena Grafana yang dikonfigurasi sebelumnya tidak lagi dipelihara.
Mengapa terjadi kesalahan IP block saat menghubungkan ke instans?
Dalam TSDB untuk InfluxDB® 1.8.12 atau lebih lama, alamat IP diblokir sementara karena beberapa upaya login dengan kata sandi yang salah. Kami merekomendasikan Anda memperbarui versi ke 1.8.13 atau lebih baru.
Bagaimana cara mengidentifikasi versi TSDB untuk InfluxDB®?
Anda dapat menggunakan metode berikut untuk mengidentifikasi versi TSDB untuk InfluxDB® Anda:
Jalankan perintah curl path/ping.
$ curl -i 'https://<Endpoint>:3242/ping?u=<Nama Akun>&p=<Kata Sandi>' HTTP/1.1204NoContent Content-Type: application/json X-Influxdb-Build: OSS X-Influxdb-Version:1.7.xGunakan CLI TSDB untuk InfluxDB®.
$ influx -ssl -username <Username> -password <Kata Sandi> -host <Endpoint> -port 3242 Connected to https://<Endpoint>:3242 version 1.7.x
Apa hubungan antara durasi grup shard dan kebijakan retensi?
TSDB untuk InfluxDB® menyimpan data dalam grup shard. Setiap grup shard mencakup interval waktu tertentu. Untuk melihat interval waktu yang ditentukan dalam TSDB untuk InfluxDB®, Anda dapat memeriksa nilai elemen DURATION dalam kebijakan retensi. Tabel berikut mencantumkan hubungan default antara interval waktu grup shard dan nilai elemen DURATION dalam kebijakan retensi.
Durasi yang ditentukan oleh kebijakan retensi | Interval waktu yang dicakup oleh grup shard |
< 2 hari | 1 jam |
>= 2 hari dan <= 6 bulan | 1 hari |
> 6 bulan | 7 hari |
Untuk melihat durasi grup shard dari kebijakan retensi, jalankan pernyataan SHOW RETENTION POLICIES.
Mengapa tidak ada data yang hilang setelah saya memodifikasi kebijakan retensi?
Ini mungkin disebabkan oleh alasan berikut:
Secara default, TSDB untuk InfluxDB® memeriksa dan menegakkan kebijakan retensi setiap 30 menit. TSDB untuk InfluxDB® mungkin menghapus data pada pemeriksaan berikutnya. Ini berlaku jika data diperoleh dalam rentang waktu yang dikecualikan dari
duration. Dalam hal ini, durasi ditentukan oleh kebijakan retensi baru.Perubahan nilai
DURATIONdanSHARD DURATIONdalam kebijakan retensi dapat menyebabkan retensi data yang tidak terduga. TSDB untuk InfluxDB® menyimpan data dalam grup shard. Setiap grup shard mencakup kebijakan retensi tertentu dan interval waktu. Jika TSDB untuk InfluxDB® menegakkan kebijakan retensi, TSDB untuk InfluxDB® menghapus semua titik dalam grup shard. Dalam hal ini, titik-titik individu tidak dihapus. TSDB untuk InfluxDB® tidak dapat membagi grup shard. Sistem dipaksa menyimpan semua data ke grup shard sebelumnya jika kedua kondisi berikut terpenuhi: (1) nilaiDURATIONdari kebijakan retensi baru kurang dari nilaiSHARD DURATIONdari kebijakan retensi sebelumnya, dan (2) TSDB untuk InfluxDB® sedang menulis data ke grup shard sebelumnya yang mencakup interval waktu lebih panjang daripada yang ditentukan oleh elemenDURATION. Dalam hal ini, sistem menyimpan semua data ke grup shard sebelumnya meskipun beberapa titik dalam grup shard tersebut jatuh di luar interval waktu yang ditentukan oleh nilaiDURATIONbaru. Jika semua titik data dalam grup shard sebelumnya jatuh di luar interval waktu yang ditentukan oleh nilaiDURATIONbaru, TSDB untuk InfluxDB® menghapus seluruh grup shard. Kemudian, sistem mulai menulis data ke grup shard yang memiliki interval waktu baru dan lebih pendek yang ditentukan oleh elemenSHARD DURATION. Hal ini memungkinkan Anda mencegah retensi data yang tidak terduga.
Mengapa TSDB untuk InfluxDB® tidak dapat mem-parsing unit waktu mikrodetik?
Sintaks yang digunakan untuk menentukan unit waktu mikrodetik bervariasi berdasarkan skenario tertentu. Skenario-skenario ini termasuk penulisan data, pengaturan granularitas waktu dalam CLI TSDB untuk InfluxDB®, dan kueri data. Tabel berikut mencantumkan sintaks yang didukung untuk setiap skenario.
Panggil API HTTP untuk menulis data | Semua kueri | Atur granularitas waktu dalam CLI TSDB untuk InfluxDB® | |
u | ✓ | ✓ | ✓ |
us | ❌ | ❌ | ❌ |
µ | ❌ | ✓ | ❌ |
µs | ❌ | ❌ | ❌ |
Kueri data
Bagaimana cara mendiagnosis kueri lambat?
Kueri lambat umumnya disebabkan oleh pemindaian sejumlah besar deret waktu atau data mentah. Oleh karena itu, kami merekomendasikan Anda menambahkan kondisi filter tag dan rentang waktu dalam setiap kueri. Anda juga dapat menjalankan pernyataan EXPLAIN ANALYZE untuk memeriksa dan mengoptimalkan kueri. Bidang execution_time menentukan waktu untuk membaca data mentah dan melakukan operasi komputasi. Bidang planning_time menentukan waktu untuk memindai deret waktu. Anda dapat mengoptimalkan kueri berdasarkan dua kondisi filter ini.
Bagaimana cara menentukan interval waktu yang dikembalikan oleh GROUP BY time() kueri?
Anda dapat menggunakan dua metode untuk menentukan interval waktu yang dikembalikan oleh kueri GROUP BY time(): Gunakan bucket waktu preset dalam TSDB untuk InfluxDB® atau tentukan interval offset. Contoh:
Bucket Waktu Preset
Jalankan pernyataan berikut untuk menghitung nilai rata-rata bidang
sunflowersantara 18:15 dan 19:45, dan kelompokkan nilai rata-rata berdasarkan jam:SELECT mean("sunflowers") FROM "flower_orders" WHERE time >='2016-08-29T18:15:00Z' AND time <='2016-08-29T19:45:00Z' GROUP BY time(1h)Hasil kueri berikut menunjukkan cara TSDB untuk InfluxDB® mempertahankan bucket waktu preset-nya:
Dalam contoh ini, jam 18:00 dan 19:00 adalah bucket waktu preset. Dalam klausa
WHERE, rentang waktu untuk kueri ditentukan. Berdasarkan rentang waktu yang ditentukan, data yang dihasilkan sebelum 18:15 tidak digunakan untuk menghitung nilai rata-rata dalam bucket waktu preset 18:00. Data yang digunakan untuk menghitung nilai rata-rata dalam bucket waktu 18:00 harus jatuh dalam jam yang dimulai dari 18:00. Aturan yang sama berlaku untuk bucket waktu preset 19:00. Data yang digunakan untuk menghitung nilai rata-rata dalam bucket waktu preset 19:00 harus jatuh dalam jam yang dimulai dari 19:00. Garis putus-putus menunjukkan titik-titik yang digunakan untuk menghitung setiap nilai rata-rata.Timestamp pertama dalam hasil adalah
2016-08-29T18:00:00Z. Namun, hasil kueri untuk bucket waktu preset 18:00 mengecualikan data yang dihasilkan sebelum waktu yang ditentukan oleh timestamp2016-08-29T18:15:00Z. Timestamp ini menentukan waktu mulai rentang waktu kueri dan diatur dalam klausaWHERE.Hasil Data Mentah:
name: flower_orders name: flower_orders ------------------------------------ time sunflowers time mean 2016-08-29T18:00:00Z342016-08-29T18:00:00Z22.332 |--|2016-08-29T19:00:00Z62.75 2016-08-29T18:15:00Z|28| 2016-08-29T18:30:00Z|19| 2016-08-29T18:45:00Z|20| |--| |--| 2016-08-29T19:00:00Z|56| 2016-08-29T19:15:00Z|76| 2016-08-29T19:30:00Z|29| 2016-08-29T19:45:00Z|90| |--| 2016-08-29T20:00:00Z70Interval Offset
Jalankan pernyataan berikut untuk menghitung nilai rata-rata bidang
sunflowersantara 18:15 dan 19:45, dan bagi nilai rata-rata menjadi kelompok berdasarkan jam. Dalam pernyataan ini, offset15menit ditentukan untuk bucket waktu preset TSDB untuk InfluxDB®:SELECT mean("sunflowers") FROM "flower_orders" WHERE time >='2016-08-29T18:15:00Z' AND time <='2016-08-29T19:45:00Z' GROUP BY time(1h,15m) --- | offset intervalKarena offset yang ditentukan, setiap bucket waktu preset TSDB untuk InfluxDB® digeser maju sebesar
15menit. Dalam hal ini, data yang dihasilkan antara 18:15 dan 19:15 digunakan untuk menghitung nilai rata-rata dalam bucket waktu preset 18:00. Data yang dihasilkan antara 19:15 dan 20:15 digunakan untuk menghitung nilai rata-rata dalam bucket waktu preset 19:00. Garis putus-putus menunjukkan titik-titik yang digunakan untuk menghitung setiap nilai rata-rata.Catatan: Timestamp pertama dalam hasil adalah
2016-08-29T18:15:00Zbukan2016-08-29T18:00:00Z.Hasil Data Mentah:
name: flower_orders name: flower_orders ------------------------------------ time sunflowers time mean 2016-08-29T18:00:00Z342016-08-29T18:15:00Z30.75 |--|2016-08-29T19:15:00Z65 2016-08-29T18:15:00Z|28| 2016-08-29T18:30:00Z|19| 2016-08-29T18:45:00Z|20| 2016-08-29T19:00:00Z|56| |--| |--| 2016-08-29T19:15:00Z|76| 2016-08-29T19:30:00Z|29| 2016-08-29T19:45:00Z|90| 2016-08-29T20:00:00Z|70| |--|
Mengapa respons kueri tidak mengandung data atau hanya mengandung sebagian data?
Penyebab potensial bervariasi berdasarkan skenario. Penyebab berikut adalah yang paling umum:
Kebijakan Retensi
Kebijakan retensi adalah penyebab paling umum. TSDB untuk InfluxDB® secara otomatis mengkueri data dari kebijakan retensi default (
DEFAULT) basis data. Jika data Anda tidak disimpan dalam kebijakan retensi default dan kebijakan retensi target tidak ditentukan, TSDB untuk InfluxDB® tidak mengembalikan data.Kunci Tag dalam Pernyataan SELECT
Pernyataan
SELECThanya mengembalikan data jika pernyataan tersebut berisi setidaknya satu kunci bidang. Jika pernyataanSELECThanya berisi kunci tag, pernyataan tersebut mengembalikan hasil kosong. Untuk informasi lebih lanjut, lihat Eksplorasi Data.Rentang Waktu
Rentang waktu adalah penyebab potensial lainnya. Secara default, sebagian besar pernyataan
SELECTmengkueri data yang timestamp-nya berkisar dari1677-09-21 00:12:43.145224194(UTC+0) hingga2262-04-11T23:47:16.854775806Z(UTC+0). Jika pernyataanSELECTAnda mencakup klausaGROUP BY time(), sistem hanya mengembalikan titik-titik yang timestamp-nya jatuh dalam rentang waktu tertentu. Secara default, waktu mulai rentang waktu ditentukan oleh timestamp1677-09-21 00:12:43.145224194. Waktu akhir rentang waktu dikembalikan oleh fungsinow(). Secara default, kueriGROUP BY time()tidak mengembalikan data yang timestamp-nya terjadi setelah waktu yang dikembalikan oleh fungsinow(). Untuk mendapatkan data yang timestamp-nya terjadi setelah waktu yang dikembalikan oleh fungsinow(), Anda harus menentukan waktu akhir rentang waktu dalam kueriGROUP BY time().Nama Pengenal
Skema adalah penyebab umum terakhir. Masalah skema dapat terjadi ketika bidang dan tag memiliki nama yang sama. Saat kunci bidang identik dengan kunci tag, kunci bidang memiliki prioritas filter lebih tinggi daripada kunci tag dalam kueri. Dalam kueri, Anda harus menggunakan sintaks
::taguntuk menentukan kunci tag.
Mengapa respons kueri GROUP BY time() tidak termasuk data yang timestamp-nya terjadi setelah waktu yang dikembalikan oleh fungsi now()?
Secara default, sebagian besar pernyataan SELECT mengambil data yang timestamp-nya berkisar dari 1677-09-21 00:12:43.145224194 UTC hingga 2262-04-11T23:47:16.854775806Z UTC. Jika pernyataan SELECT Anda mencakup klausa GROUP BY time(), sistem hanya mengembalikan titik-titik yang timestamp-nya jatuh dalam rentang waktu tertentu. Secara default, waktu mulai rentang waktu ditentukan oleh timestamp 1677-09-21 00:12:43.145224194. Waktu akhir rentang waktu dikembalikan oleh fungsi now().
Untuk mengambil data yang timestamp-nya lebih dari waktu yang ditentukan oleh fungsi now(), tentukan waktu akhir rentang waktu dalam setiap klausa GROUP BY time() dari pernyataan SELECT. Dalam hal ini, pernyataan SELECT harus mencakup fungsi InfluxQL dan klausa WHERE.
Dalam contoh berikut, kueri pertama mencakup data yang timestamp-nya jatuh dalam rentang waktu yang ditentukan oleh timestamp 2015-09-18T21:30:00Z dan fungsi now(). Kueri kedua mencakup data yang timestamp-nya jatuh dalam rentang waktu yang ditentukan oleh timestamp 2015-09-18T21:30:00Z dan ekspresi now(). Ekspresi ini menunjukkan 180 minggu ke depan setelah waktu yang dikembalikan oleh fungsi now().
> SELECT MEAN("boards") FROM "hillvalley" WHERE time >='2015-09-18T21:30:00Z' GROUP BY time(12m) fill(none)
> SELECT MEAN("boards") FROM "hillvalley" WHERE time >='2015-09-18T21:30:00Z' AND time <= now()+180w GROUP BY time(12m) fill(none)Catatan: Anda harus menentukan waktu akhir rentang waktu yang ditentukan dalam klausa WHERE untuk menimpa waktu akhir default yang ditentukan oleh fungsi now(). Dalam pernyataan kueri berikut, waktu mulai rentang waktu kueri diatur ke waktu yang dikembalikan oleh fungsi now(). Oleh karena itu, Anda dapat menjalankan pernyataan tersebut untuk mengkueri hanya data yang timestamp-nya menunjukkan waktu yang ditentukan oleh fungsi now().
> SELECT MEAN("boards") FROM "hillvalley" WHERE time >= now() GROUP BY time(12m) fill(none)
>Untuk informasi lebih lanjut tentang sintaks waktu, lihat Eksplorasi Data.
Apakah saya bisa melakukan operasi matematika pada timestamp?
Tidak, Anda tidak dapat melakukan operasi matematika pada timestamp dalam TSDB untuk InfluxDB®. Komputasi waktu harus dilakukan oleh klien yang menerima hasil kueri.
TSDB untuk InfluxDB® memberikan dukungan terbatas untuk menggunakan fungsi InfluxQL pada timestamp. Fungsi ELAPSED() mengembalikan perbedaan antara timestamp untuk satu bidang.
Apakah saya bisa mengidentifikasi granularitas waktu penulisan data berdasarkan timestamp yang dikembalikan?
Tidak, Anda tidak bisa mengidentifikasi granularitas waktu penulisan data berdasarkan timestamp yang dikembalikan. Terlepas dari granularitas waktu penulisan data yang ditentukan, TSDB untuk InfluxDB® menyimpan semua timestamp sebagai nilai nanodetik. Catatan: Saat hasil kueri dikembalikan, basis data menghapus nol dari akhir timestamp tanpa memberi notifikasi. Oleh karena itu, granularitas waktu penulisan tidak dapat diidentifikasi berdasarkan timestamp yang dikembalikan.
Dalam contoh berikut, tag precision_supplied menunjukkan granularitas waktu yang diberikan pengguna saat menulis data. Tag timestamp_supplied menunjukkan timestamp yang diberikan pengguna saat menulis data. TSDB untuk InfluxDB® menghapus nol dari akhir timestamp yang dikembalikan. Oleh karena itu, granularitas waktu penulisan tidak dapat diidentifikasi berdasarkan timestamp yang dikembalikan.
name: trails
-------------
time value precision_supplied timestamp_supplied
1970-01-01T01:00:00Z3 n 3600000000000
1970-01-01T01:00:00Z5 h 1
1970-01-01T02:00:00Z4 n 7200000000000
1970-01-01T02:00:00Z6 h 2Kapan saya menggunakan tanda kutip tunggal (') dan tanda kutip ganda (") dalam kueri?
Gunakan tanda kutip tunggal (') untuk mengapit nilai string, seperti nilai tag. Anda tidak dapat menggunakan tanda kutip tunggal (') untuk mengapit pengenal, seperti nama basis data, nama kebijakan retensi, nama pengguna, nama pengukuran, kunci tag, dan kunci bidang.
Gunakan tanda kutip ganda (") untuk mengapit pengenal jika pengenal dimulai dengan digit dan berisi karakter selain huruf, angka, garis bawah (_), atau kata kunci InfluxQL. Dalam kasus lain, Anda tidak perlu menggunakan tanda kutip ganda (") untuk mengapit pengenal. Namun, kami merekomendasikan Anda menggunakan tanda kutip ganda (") untuk mengapit pengenal dalam semua kasus.
Contoh:
Kueri valid: SELECT bikes_available FROM bikes WHERE station_id='9'
Kueri valid: SELECT "bikes_available" FROM "bikes" WHERE "station_id"='9'
Kueri valid: SELECT MIN("avgrq-sz") AS "min_avgrq-sz" FROM telegraf
Kueri valid: SELECT * from "cr@zy" where "p^e"='2'
Kueri tidak valid: SELECT 'bikes_available' FROM 'bikes' WHERE 'station_id'="9"
Kueri tidak valid: SELECT * from cr@zy where p^e='2'
Gunakan tanda kutip tunggal (') untuk mengapit string tanggal dan waktu. Jika Anda menggunakan tanda kutip ganda (") untuk mengapit string tanggal dan waktu, TSDB untuk InfluxDB® mengembalikan kesalahan berikut: ERR: invalid operation: time and *influxql.VarRef are not compatible.
Contoh:
Kueri valid: SELECT "water_level" FROM "h2o_feet" WHERE time >'2015-08-18T23:00:01.232000000Z' AND time <'2015-09-19'
Kueri tidak valid: SELECT "water_level" FROM "h2o_feet" WHERE time >"2015-08-18T23:00:01.232000000Z" AND time <"2015-09-19"
Untuk informasi lebih lanjut tentang sintaks waktu, lihat Eksplorasi Data.
Mengapa data hilang setelah saya membuat kebijakan retensi default (DEFAULT)?
Setelah Anda membuat kebijakan retensi default dalam basis data, data yang ditulis ke kebijakan retensi default sebelumnya tetap ada di kebijakan retensi default sebelumnya. Secara default, jika tidak ada kebijakan retensi yang ditentukan untuk kueri, sistem akan mengkueri data dari kebijakan retensi baru. Dalam hal ini, data yang ditulis ke kebijakan retensi default sebelumnya tidak dapat dikembalikan. Untuk mengkueri data yang ditulis ke kebijakan retensi default sebelumnya, Anda harus memenuhi syarat sepenuhnya data terkait dalam pernyataan kueri. Contoh:
Semua data dalam pengukuran fleeting termasuk dalam kebijakan retensi default one_hour.
> SELECT count(flounders) FROM fleeting
name: fleeting
--------------
time count
1970-01-01T00:00:00Z8Buat kebijakan retensi default bernama two_hour, dan jalankan kueri yang sama.
> SELECT count(flounders) FROM fleeting
>Untuk mengkueri data yang ditulis ke kebijakan retensi default sebelumnya, tentukan kebijakan retensi default sebelumnya dengan memenuhi syarat sepenuhnya pengukuran fleeting.
> SELECT count(flounders) FROM fish.one_hour.fleeting
name: fleeting
--------------
time count
1970-01-01T00:00:00Z8Mengapa respons klausa WHERE OR yang menggunakan operator OR untuk menentukan beberapa rentang waktu tidak mengandung data?
TSDB untuk InfluxDB® tidak mengizinkan Anda menggunakan operator OR dalam klausa WHERE untuk menentukan beberapa rentang waktu. Jika operator OR digunakan dalam klausa WHERE untuk menentukan beberapa rentang waktu, TSDB untuk InfluxDB® tidak mengembalikan hasil apa pun.
Contoh:
> SELECT * FROM "absolutismus" WHERE time ='2016-07-31T20:07:00Z' OR time ='2016-07-31T23:07:17Z'
>Mengapa fungsi fill(previous) gagal mengembalikan nilai?
Nilai sebelumnya mungkin jatuh di luar rentang waktu kueri yang ditentukan. Dalam hal ini, fungsi fill(previous) tidak menggunakan nilai sebelumnya untuk mengisi nilai yang hilang dalam rentang waktu kueri.
Dalam contoh berikut, TSDB untuk InfluxDB® tidak menggunakan nilai dalam rentang waktu antara 2016-07-12T16:50:00Z dan 2016-07-12T16:50:10Z untuk mengisi nilai yang hilang dalam rentang waktu antara 2016-07-12T16:50:20Z dan 2016-07-12T16:50:30Z. Hal ini terjadi karena rentang waktu sebelumnya dikecualikan dari rentang waktu kueri.
Contoh:
> SELECT * FROM "cupcakes"
name: cupcakes
-------------
time chocolate
2016-07-12T16:50:00Z3
2016-07-12T16:50:10Z2
2016-07-12T16:50:40Z12
2016-07-12T16:50:50Z11Kueri GROUP BY time():
> SELECT max("chocolate") FROM "cupcakes" WHERE time >='2016-07-12T16:50:20Z' AND time <='2016-07-12T16:51:10Z' GROUP BY time(20s) fill(previous)
name: cupcakes
--------------
time max
2016-07-12T16:50:20Z
2016-07-12T16:50:40Z12
2016-07-12T16:51:00Z12Mengapa data hilang saat saya menjalankan kueri INTO?
Secara default, kueri SELECT INTO mengonversi tag dalam data mentah menjadi bidang dalam data yang baru ditulis. Akibatnya, TSDB untuk InfluxDB® menimpa titik-titik yang dibedakan dengan menggunakan tag. Anda dapat menambahkan klausa GROUP BY * ke pernyataan SELECT INTO untuk mempertahankan tag dalam data yang baru ditulis.
Metode ini tidak berlaku untuk kueri yang menggunakan fungsi TOP() atau BOTTOM(). Untuk informasi lebih lanjut tentang fungsi TOP() dan BOTTOM(), lihat Sintaks Umum Fungsi.
Contoh
Pengukuran french_bulldogs mencakup tag color dan bidang name.
> SELECT * FROM "french_bulldogs"
name: french_bulldogs
---------------------
time color name
2016-05-25T00:05:00Z peach nugget
2016-05-25T00:05:00Z grey rumple
2016-05-25T00:10:00Z black princePernyataan SELECT INTO yang Mengecualikan Klausa GROUP BY *
Pernyataan
SELECT INTOyangmengecualikan klausaGROUP BY *mengonversi tagcolormenjadi bidang dalam data yang baru ditulis. Dalam data mentah, titiknuggetdanrumplehanya dibedakan oleh tagcolor. Jika tagcolordikonversi menjadi bidang, TSDB untuk InfluxDB® menganggap bahwa titikrumpledannuggetadalah duplikat. Oleh karena itu, TSDB untuk InfluxDB® menimpa titikrumpledengan titiknugget.> SELECT * INTO "all_dogs" FROM "french_bulldogs" name: result ------------ time written 1970-01-01T00:00:00Z3 > SELECT * FROM "all_dogs" name: all_dogs -------------- time color name 2016-05-25T00:05:00Z grey rumple <---- tidak ada lagi nugget 2016-05-25T00:10:00Z black princePernyataan SELECT INTO yang Mencakup Klausa GROUP BY *
Pernyataan
SELECT INTOyang mencakup klausaGROUP BY *mempertahankan tagcolordalam data yang baru ditulis. Dalam hal ini, titiknuggetdanrumpleberbeda satu sama lain dan TSDB untuk InfluxDB® tidak menimpa titik-titik tersebut.> SELECT "name" INTO "all_dogs" FROM "french_bulldogs" GROUP BY * name: result ------------ time written 1970-01-01T00:00:00Z3 > SELECT * FROM "all_dogs" name: all_dogs -------------- time color name 2016-05-25T00:05:00Z peach nugget 2016-05-25T00:05:00Z grey rumple 2016-05-25T00:10:00Z black prince
Bagaimana cara mengkueri data ketika kunci tag dan kunci bidang memiliki nama yang sama?
Gunakan sintaks :: untuk menentukan apakah suatu kunci adalah kunci bidang atau kunci tag. Contoh:
> INSERT candied,almonds=true almonds=50,half_almonds=511465317610000000000
> INSERT candied,almonds=true almonds=55,half_almonds=561465317620000000000
> SELECT * FROM "candied"
name: candied
-------------
time almonds almonds_1 half_almonds
2016-06-07T16:40:10Z50 true 51
2016-06-07T16:40:20Z55 true 56Sebagai Kunci Bidang:
> SELECT * FROM "candied" WHERE "almonds"::field >51 name: candied ------------- time almonds almonds_1 half_almonds 2016-06-07T16:40:20Z55 true 56Sebagai Kunci Tag:
> SELECT * FROM "candied" WHERE "almonds"::tag='true' name: candied ------------- time almonds almonds_1 half_almonds 2016-06-07T16:40:10Z50 true 51 2016-06-07T16:40:20Z55 true 56
Bagaimana cara mengkueri data lintas pengukuran?
Anda tidak dapat melakukan operasi matematika atau mengelompokkan data lintas pengukuran. Anda hanya dapat mengkueri data yang termasuk dalam pengukuran yang sama. TSDB untuk InfluxDB® bukanlah basis data relasional. Oleh karena itu, kami merekomendasikan Anda tidak menggunakan pemetaan data lintas pengukuran untuk skema.
Apakah urutan filter timestamp dalam pernyataan kueri memiliki dampak signifikan pada waktu respons?
Tidak, urutan filter timestamp dalam pernyataan kueri tidak memiliki dampak signifikan pada waktu respons. Hasil pengujian menunjukkan bahwa waktu respons TSDB untuk InfluxDB® untuk kueri pertama serupa dengan waktu respons untuk kueri kedua.
SELECT ... FROM ... WHERE time >'timestamp1' AND time <'timestamp2'
SELECT ... FROM ... WHERE time <'timestamp2' AND time >'timestamp1'Bagaimana cara menentukan pernyataan SELECT jika saya ingin mengkueri tag yang tidak memiliki nilai?
Gunakan '' untuk menentukan nilai tag kosong. Contoh:
> SELECT * FROM "vases" WHERE priceless=''
name: vases
-----------
time origin priceless
2016-07-20T18:42:00Z8Penulisan data
Mengapa jitter tulis terjadi secara berkala?
Jitter tulis terjadi ketika TSDB untuk InfluxDB® beralih partisi. Anda dapat mengamati apakah periode jitter sama dengan durasi grup shard dari kebijakan retensi. Anda dapat mengurangi amplitudo jitter dengan mengurangi jumlah pengukuran dan deret waktu.
Tindakan pencegahan untuk menulis data menggunakan protokol baris InfluxDB
Daftar berikut menjelaskan tindakan pencegahan untuk menulis data menggunakan protokol baris InfluxDB:
Tambahkan
idi akhir angka untuk menentukan bahwa nilainya adalah integer. Misalnya,value=100imenentukan bahwa nilainya adalah integer danvalue=100menentukan bahwa nilainya adalah bilangan floating-point.Tanda kutip ganda (") hanya digunakan dalam nilai bidang tipe data STRING. Tanda kutip ganda (") dalam pengukuran, kunci tag, nilai tag, dan kunci bidang dianggap sebagai bagian dari nama.
Jangan gunakan tanda kutip untuk mengapit karakter khusus. Gunakan karakter escape backslash (\) untuk memformat karakter khusus.
Mengapa saya tidak dapat melihat data yang ditulis ke tabel?
InfluxDB membuang data yang kedaluwarsa berdasarkan kebijakan retensi. Pesan kesalahan partial write: points beyond retention policy mungkin muncul selama operasi penulisan. Kami merekomendasikan Anda memeriksa timestamp penulisan dan TTL yang ditentukan dalam kebijakan retensi.
Mengapa data masih belum ditulis ke disk setelah saya mengurangi penggunaan ruang disk?
Jika disk InfluxDB penuh, operasi penulisan gagal meskipun penggunaan ruang disk telah dikurangi. Mulai ulang proses secara manual di konsol untuk melanjutkan penulisan data setelah meningkatkan instans atau membersihkan data.
Bagaimana cara menulis nilai bidang tipe data INTEGER?
Untuk menulis nilai bidang tipe data integer, tambahkan i di akhir nilai bidang. Jika Anda tidak menambahkan i, TSDB untuk InfluxDB® memproses nilai tersebut sebagai bilangan floating-point.
Tulis integer: value=100i. Tulis bilangan floating-point: value=100.
Bagaimana cara TSDB untuk InfluxDB® memproses titik-titik duplikat?
Titik secara unik diidentifikasi oleh nama pengukuran, set tag, dan timestamp. Jika dua titik memiliki nama pengukuran, set tag, dan timestamp yang sama, mereka dianggap sebagai titik-titik duplikat. Jika Anda mengirimkan titik duplikat yang memiliki set bidang berbeda dari titik yang ada, set bidang titik tersebut menjadi gabungan dari set bidang sebelumnya dan baru. Jika terjadi konflik, set bidang baru yang diutamakan. Ini adalah hasil yang diharapkan.
Contoh:
Titik sebelumnya: cpu_load,hostname=server02,az=us_west val_1=24.5,val_2=7 1234567890000000
Titik baru: cpu_load,hostname=server02,az=us_west val_1=5.24 1234567890000000
Setelah Anda mengirimkan titik baru, TSDB untuk InfluxDB® menggunakan nilai val_1 baru untuk menimpa nilai sebelumnya val_1. Nilai val_2 dipertahankan dalam set bidang titik.
> SELECT * FROM "cpu_load" WHERE time =1234567890000000
name: cpu_load
--------------
time az hostname val_1 val_2
1970-01-15T06:56:07.89Z us_west server02 5.247Untuk menyimpan titik sebelumnya dan baru, Anda dapat menggunakan metode berikut:
Perkenalkan tag baru untuk memastikan keunikan.
Titik sebelumnya:
cpu_load,hostname=server02,az=us_west,uniq=1 val_1=24.5,val_2=7 1234567890000000Titik baru:
cpu_load,hostname=server02,az=us_west,uniq=2 val_1=5.24 1234567890000000Setelah Anda menulis titik baru ke TSDB untuk InfluxDB®, hasil berikut muncul:
> SELECT * FROM "cpu_load" WHERE time =1234567890000000 name: cpu_load -------------- time az hostname uniq val_1 val_2 1970-01-15T06:56:07.89Z us_west server02 124.57 1970-01-15T06:56:07.89Z us_west server02 25.24Tambahkan satu nanodetik ke timestamp titik baru.
Titik sebelumnya:
cpu_load,hostname=server02,az=us_west val_1=24.5,val_2=7 1234567890000000Titik baru:
cpu_load,hostname=server02,az=us_west val_1=5.24 1234567890000001Setelah Anda menulis titik baru ke TSDB untuk InfluxDB®, hasil berikut muncul:
> SELECT * FROM "cpu_load" WHERE time >=1234567890000000 and time <=1234567890000001 name: cpu_load -------------- time az hostname val_1 val_2 1970-01-15T06:56:07.89Z us_west server02 24.57 1970-01-15T06:56:07.890000001Z us_west server02 5.24
Apa line feed yang diperlukan dalam permintaan API HTTP?
Dalam protokol baris TSDB untuk InfluxDB®, line feed \n digunakan untuk menunjukkan akhir baris dan awal baris baru. Kode ASCII untuk line feed adalah 0x0A. Jika line feed lain selain \n digunakan dalam file atau data, kesalahan berikut terjadi: bad timestamp dan unable to parse.
Catatan: Windows menggunakan line feed \r\n atau carriage return untuk menunjukkan akhir baris dan awal baris baru.
Karakter dan kata apa yang tidak disarankan saat saya menulis data ke TSDB untuk InfluxDB®?
Kata Kunci InfluxQL
Jika Anda menggunakan kata kunci InfluxQL sebagai pengenal, Anda harus mengapit kata kunci tersebut dalam tanda kutip ganda (") dalam kueri Anda. Jika tidak, kesalahan mungkin terjadi. Pengenal dapat berupa nama kueri kontinu, nama basis data, kunci bidang, nama pengukuran, nama kebijakan retensi, nama langganan, kunci tag, atau nama pengguna.
Waktu
Anda dapat menggunakan kata kunci
timesebagai pengenal tanpa perlu mengapit pengenal tersebut dalam tanda kutip ganda (") dalam pernyataan kueri. Anda dapat menggunakan kata kuncitimesebagai nama kueri kontinu, nama basis data, nama pengukuran, nama kebijakan retensi, atau nama pengguna. Dalam kasus ini, Anda tidak perlu menggunakan tanda kutip ganda (") untuk mengapittime. Namun, Anda tidak dapat menggunakan kata kuncitimesebagai kunci bidang atau kunci tag. TSDB untuk InfluxDB® menolak penulisan data di mana kata kuncitimeadalah kunci bidang atau kunci tag, dan melaporkan kesalahan. Contoh:Gunakan kata kunci time sebagai nama pengukuran untuk menulis data dan mengkueri pengukuran.
> INSERT time value=1 > SELECT * FROM time name: time time value --------- 2017-02-07T18:28:27.349785384Z1Dalam TSDB untuk InfluxDB®, kata kunci
timeadalah nama pengukuran yang valid.Gunakan kata kunci time sebagai kunci bidang untuk menulis data dan mencoba mengkueri kunci bidang.
> INSERT mymeas time=1 ERR:{"error":"partial write: invalid field name: input field \"time\" on measurement \"mymeas\" is invalid dropped=1"}Dalam TSDB untuk InfluxDB®, kata kunci
timeadalah kunci bidang yang tidak valid. Sistem gagal menulis titik dan mengembalikan kode kesalahan400.Gunakan kata kunci time sebagai kunci tag untuk menulis data dan mencoba mengkueri kunci tag.
> INSERT mymeas,time=1 value=1 ERR:{"error":"partial write: invalid tag key: input tag \"time\" on measurement \"mymeas\" is invalid dropped=1"}Dalam TSDB untuk InfluxDB®, kata kunci
timeadalah kunci tag yang tidak valid. Sistem gagal menulis titik dan mengembalikan kode kesalahan400.
Karakter
Untuk menjaga penggunaan ekspresi reguler sederhana dan tanda kutip, kami merekomendasikan Anda tidak menggunakan karakter berikut dalam pengenal: backslash (
\), caret (^), tanda dolar ($), tanda kutip tunggal ('), tanda kutip ganda ("), tanda sama dengan (=), dan koma (,).
Kapan saya menggunakan tanda kutip tunggal (') dan tanda kutip ganda (") untuk menulis data?
Jika Anda menulis data berdasarkan protokol baris, jangan gunakan tanda kutip tunggal (') atau tanda kutip ganda (") untuk mengapit pengenal. Dalam contoh berikut, kueri menjadi lebih rumit setelah tanda kutip digunakan. Pengenal dapat berupa nama kueri kontinu, nama basis data, kunci bidang, nama pengukuran, nama kebijakan retensi, nama langganan, kunci tag, atau nama pengguna.
Tulis pengukuran yang diapit dengan tanda kutip ganda ("):
INSERT "bikes" bikes_available=3. Kueri yang berlaku:SELECT * FROM "\"bikes\"".Tulis pengukuran yang diapit dengan tanda kutip tunggal ('):
INSERT 'bikes' bikes_available=3. Kueri yang berlaku:SELECT * FROM "\'bikes\'".Tulis pengukuran yang tidak diapit dengan tanda kutip:
INSERT bikes bikes_available=3. Kueri yang berlaku:SELECT * FROM "bikes".
Anda harus menggunakan tanda kutip ganda (") untuk mengapit nilai string bidang.
Tulis data:
INSERT bikes happiness="level 2". Kueri yang berlaku:SELECT * FROM "bikes" WHERE "happiness"='level 2'.Jangan gunakan tanda kutip untuk mengapit karakter khusus. Gunakan karakter escape backslash (\) untuk memformat karakter khusus.
Tulis data:
INSERT wacky va\"ue=4. Kueri yang berlaku:SELECT "va\"ue" FROM "wacky".
Apakah granularitas timestamp memiliki dampak signifikan pada kinerja sistem?
Ya, granularitas timestamp memiliki efek signifikan pada kinerja sistem. Untuk memaksimalkan kinerja sistem, kami merekomendasikan Anda menggunakan granularitas waktu yang lebih kasar untuk menulis data ke TSDB untuk InfluxDB®.
Dalam dua contoh berikut, granularitas waktu default (dalam nanodetik) ditentukan untuk permintaan pertama. Granularitas waktu (dalam detik) ditentukan untuk permintaan kedua:
curl -i -XPOST "https://<Endpoint>:3242/write?db=weather&u=<Nama Akun>&p=<Kata Sandi>"--data-binary 'temperature,location=1 value=90 1472666050000000000'
curl -i -XPOST "https://<Endpoint>:3242/write?db=weather&precision=s&u=<Nama Akun>&p=<Kata Sandi>"--data-binary 'temperature,location=1 value=90 1472666050'Namun, jika Anda menggunakan granularitas waktu yang lebih kasar untuk menulis data, titik-titik duplikat dengan timestamp yang sama rentan terjadi. Dalam hal ini, beberapa titik mungkin ditimpa.
CLI TSDB untuk InfluxDB®
Mengapa saya tidak dapat terhubung ke TSDB untuk InfluxDB® menggunakan Influx CLI?
Periksa apakah Anda memenuhi kondisi berikut:
Anda harus memiliki izin eksekusi. Anda dapat menjalankan perintah
chmod +x ./influxuntuk menambahkan izin.Anda harus menentukan opsi
-ssldalam pernyataan koneksi.Anda hanya perlu menentukan string koneksi untuk opsi
-host, sepertits-bp17j28j2y7pm****.influxdata.rds.aliyuncs.com. Anda tidak perlu menentukan protokol dan nomor port.
Bagaimana cara mengaktifkan CLI TSDB untuk InfluxDB® agar mengembalikan timestamp yang mudah dibaca manusia?
Saat Anda terhubung ke CLI untuk pertama kali, Anda harus menentukan granularitas waktu berdasarkan RFC 3339.
$ influx -ssl -username <Nama Akun>-password <Kata Sandi>-host <Endpoint>-port 3242-precision rfc3339Anda juga dapat menentukan granularitas waktu setelah Anda terhubung ke CLI.
$ influx -ssl -username <Username> -password <Kata Sandi> -host <Endpoint> -port 3242
Connected to https://<Endpoint>:3242 version 1.7.x
> precision rfc3339Untuk informasi lebih lanjut, lihat CLI TSDB untuk InfluxDB®.
Bagaimana cara menjalankan pernyataan USE untuk menentukan basis data jika saya bukan administrator?
Jika Anda bukan administrator, Anda dapat menjalankan pernyataan USE <database_name> untuk menentukan basis data. Namun, dalam hal ini, Anda harus memiliki izin READ dan WRITE, atau hanya izin READ untuk basis data tersebut. Jika tidak, sistem akan mengembalikan kesalahan berikut:
ERR:Database<database_name> doesn't exist. Run SHOW DATABASES for a list of existing databases.Pernyataan SHOW DATABASES mengembalikan hanya basis data yang pengguna non-administrator miliki akses READ atau WRITE.
Bagaimana cara menggunakan CLI TSDB untuk InfluxDB® untuk menulis data ke kebijakan retensi non-default?
Jalankan pernyataan INSERT INTO [<database>.]<retention_policy> <line_protocol> untuk menulis data ke kebijakan retensi non-default. Metode ini hanya dapat digunakan dalam CLI TSDB untuk InfluxDB® untuk menentukan basis data dan kebijakan retensi. Untuk menulis data melalui HTTP, Anda harus menggunakan parameter db dan rp untuk menentukan basis data dan kebijakan retensi, masing-masing. Parameter rp bersifat opsional. Contoh:
> INSERT INTO one_day mortality bool=true
Using retention policy one_day
> SELECT * FROM "mydb"."one_day"."mortality"
name: mortality
---------------
time bool
2016-09-13T22:29:43.229530864Z trueJika Anda ingin mengkueri data dalam kebijakan retensi non-default, Anda harus sepenuhnya memenuhi syarat pengukuran. Anda dapat menggunakan sintaks berikut untuk sepenuhnya memenuhi syarat pengukuran:
"<database>"."<retention_policy>"."<measurement>"Tipe data
Mengapa saya tidak dapat mengkueri nilai bidang tipe BOOLEAN?
Sintaks untuk menulis nilai BOOLEAN berbeda dari sintaks untuk mengkueri nilai BOOLEAN.
Sintaks untuk nilai BOOLEAN | Tulis | Kueri |
| ✓ | ❌ |
| ✓ | ❌ |
| ✓ | ✓ |
| ✓ | ✓ |
| ✓ | ✓ |
Sebagai contoh, pernyataan SELECT * FROM "hamlet" WHERE "bool"=True mengembalikan semua titik di mana nilai bool adalah TRUE. Namun, pernyataan SELECT * FROM "hamlet" WHERE "bool"=T tidak mengembalikan hasil apa pun.
Bagaimana cara TSDB untuk InfluxDB® menangani perbedaan tipe data bidang di seluruh shard?
Tipe data nilai bidang bisa berupa FLOAT, INTEGER, STRING, atau BOOLEAN. Tipe data nilai bidang harus sama dalam setiap shard. Namun, tipe data nilai bidang dapat berbeda di seluruh shard.
Pernyataan SELECT
Pernyataan
SELECTmengembalikan semua nilai bidang jika semua nilai bidang memiliki tipe data yang sama. Jika tipe data nilai bidang berbeda di seluruh shard, TSDB untuk InfluxDB® melakukan operasi yang diperlukan untuk mengonversi tipe data (jika berlaku). Kemudian, TSDB untuk InfluxDB® mengembalikan semua nilai bidang berdasarkan urutan tipe data berikut: FLOAT, INTEGER, STRING, dan BOOLEAN. Jika nilai bidang ditemukan memiliki tipe data berbeda dalam data Anda, gunakan sintaks<field_key>::<type>untuk mengkueri tipe data yang berbeda. Contoh:Dalam pengukuran
just_my_type, bidangmy_fieldmemiliki empat nilai dalam empat shard. Tipe data nilai-nilai bidangmy_fieldberbeda satu sama lain. Tipe datanya adalah FLOAT, INTEGER, STRING, dan BOOLEAN.Pernyataan
SELECT *hanya mengembalikan nilai tipe data FLOAT dan INTEGER. Dalam respons terhadap pernyataan tersebut, TSDB untuk InfluxDB® mengonversi nilai tipe data INTEGER menjadi nilai tipe data FLOAT.> SELECT * FROM just_my_type name: just_my_type ------------------ time my_field 2016-06-03T15:45:00Z9.87034 2016-06-03T16:45:00Z7Pernyataan
SELECT <field_key>::<type> [...]mengembalikan nilai semua tipe data. TSDB untuk InfluxDB® menyimpan data keluaran setiap tipe dalam kolom terpisah, dan nama kolom bertambah, misalnya my_field, my_field_1, dan my_field_2. TSDB untuk InfluxDB® dapat digunakan untuk mengonversi tipe data nilai bidang menjadi tipe data lain. Namun, ini didasarkan pada persyaratan tertentu. Dalam contoh berikut, TSDB untuk InfluxDB® mengonversi integer7menjadi bilangan floating-point yang termasuk dalam kolom pertama. TSDB untuk InfluxDB® mengonversi bilangan floating-point9.879034menjadi integer yang termasuk dalam kolom kedua. TSDB untuk InfluxDB® tidak dapat mengonversi bilangan floating-point atau integer menjadi string atau nilai Boolean.> SELECT "my_field"::float,"my_field"::integer,"my_field"::string,"my_field"::boolean FROM just_my_type name: just_my_type ------------------ time my_field my_field_1 my_field_2 my_field_3 2016-06-03T15:45:00Z9.870349 2016-06-03T16:45:00Z77 2016-06-03T17:45:00Z a string 2016-06-03T18:45:00Z truePernyataan SHOW FIELD KEYS
Pernyataan
SHOW FIELD KEYSmengembalikan semua tipe data dalam setiap shard yang terkait dengan kunci bidang tertentu. Contoh:Dalam pengukuran
just_my_type, bidangmy_fieldmemiliki empat nilai dalam empat shard. Tipe data nilai-nilai bidangmy_fieldberbeda satu sama lain. Tipe datanya adalah FLOAT, INTEGER, STRING, dan BOOLEAN.Pernyataan
SHOW FIELD KEYSmengembalikan semua empat tipe data.> SHOW FIELD KEYS name: just_my_type fieldKey fieldType ----------------- my_field float my_field string my_field integer my_field boolean
Berapa bilangan bulat terkecil dan terbesar yang dapat disimpan oleh TSDB untuk InfluxDB®?
TSDB untuk InfluxDB® menyimpan bilangan bulat sebagai nilai Int64 bertanda. Nilai Int64 valid terkecil adalah -9023372036854775808. Nilai Int64 valid terbesar adalah 9023372036854775807. Untuk informasi lebih lanjut, lihat Go builtins.
Jika nilai yang disimpan mendekati bilangan bulat terkecil atau terbesar, hasil yang tidak terduga mungkin terjadi. Beberapa fungsi dan operator mungkin mengonversi nilai Int64 menjadi nilai Float64 selama komputasi. Namun, ini dapat menyebabkan masalah overflow.
Berapa timestamp terkecil dan terbesar yang dapat disimpan oleh TSDB untuk InfluxDB®?
Timestamp minimum adalah -9223372036854775806 atau 1677-09-21T00:12:43.145224194Z. Timestamp maksimum adalah 9223372036854775806 atau 2262-04-11T23:47:16.854775806Z. Jika timestamp jatuh di luar rentang yang valid, kesalahan parsing terjadi.
Bagaimana cara melihat tipe data bidang?
Anda dapat menjalankan pernyataan SHOW FIELD KEYS untuk melihat tipe data bidang.
> SHOW FIELD KEYS FROM all_the_types
name: all_the_types
-------------------
fieldKey fieldType
---------
blue string
green boolean
orange integer
yellow floatApakah saya bisa mengonversi tipe data bidang?
Ya, Anda dapat mengubah tipe data bidang. Namun, hanya sejumlah terbatas tipe data yang dapat dikonversi ke tipe data lain melalui TSDB untuk InfluxDB®. Gunakan sintaks <field_key>::<type> untuk mengonversi nilai bidang dari integer menjadi bilangan floating-point atau sebaliknya. Untuk detail lebih lanjut tentang konversi tipe data, lihat Eksplorasi Data. Konversi dari bilangan floating-point atau integer menjadi string atau nilai Boolean tidak didukung. Demikian pula, konversi dari string atau nilai Boolean menjadi bilangan floating-point atau integer juga tidak dapat dilakukan.
Anda dapat menggunakan metode alternatif berikut untuk mengubah tipe data:
-
Tulis data ke bidang lain
Metode paling sederhana adalah menulis data dengan tipe data baru ke bidang lain dalam deret yang sama.
-
Gunakan sistem shard
Tipe data nilai bidang harus sama dalam setiap shard. Namun, tipe data nilai bidang dapat berbeda di seluruh shard.
Jika Anda ingin mengubah tipe data nilai bidang, jalankan pernyataan
SHOW SHARDSuntuk memeriksa nilaiend_timedari shard saat ini. TSDB untuk InfluxDB® memungkinkan penulisan data dengan tipe data berbeda ke bidang yang ada, asalkan timestamp titik terjadi setelah waktu yang ditentukan olehend_time. Sebagai contoh, jika timestamp data terjadi sebelum waktu akhir shard saat ini, Anda hanya dapat menulis integer ke bidang tersebut. Namun, jika timestamp data terjadi setelah waktu yang ditentukan olehend_time, Anda dapat menulis bilangan floating-point ke bidang tersebut.Proses ini tidak mengubah tipe data nilai bidang dalam shard asli.
Fungsi InfluxQL
Bagaimana cara melakukan operasi matematika dalam fungsi?
Anda tidak dapat menggunakan TSDB untuk InfluxDB® untuk melakukan operasi matematika dalam fungsi. Kami merekomendasikan Anda menjalankan subkueri untuk mencapai tujuan yang sama. Contoh:
InfluxQL tidak mendukung sintaks berikut:
SELECT MEAN("dogs"-"cats")from"pet_daycare"
Namun, Anda dapat menjalankan subkueri berikut untuk mencapai tujuan yang sama:
> SELECT MEAN("difference") FROM (SELECT "dogs"-"cat" AS "difference" FROM "pet_daycare")
Untuk informasi lebih lanjut tentang subquery, lihat Data Exploration.
Mengapa respons kueri menggunakan epoch 0 sebagai timestamp?
Dalam kebanyakan kasus, epoch 0 (1970-01-01T00:00:00Z) digunakan sebagai timestamp null dalam TSDB untuk InfluxDB®. Jika tidak ada timestamp yang dapat dikembalikan untuk kueri Anda, TSDB untuk InfluxDB® mengembalikan epoch 0 sebagai timestamp. Sebagai contoh, aturan ini berlaku ketika tidak ada rentang waktu yang ditentukan untuk fungsi agregat.
Fungsi InfluxQL mana yang dapat disarangkan?
Fungsi InfluxQL berikut dapat disarangkan:
COUNT()disarangkan dalamDISTINCT()CUMULATIVE_SUM()DERIVATIVE()DIFFERENCE()ELAPSED()MOVING_AVERAGE()NON_NEGATIVE_DERIVATIVE()HOLT_WINTERS()danHOLT_WINTERS_WITH_FIT()
Untuk informasi lebih lanjut tentang cara menggunakan subkueri sebagai pengganti fungsi bersarang, lihat Eksplorasi Data.
Migrasi data InfluxDB
Bagaimana cara memigrasi InfluxDB yang dikelola sendiri ke cloud?
Anda dapat menggunakan alat resmi influx_inspect yang disediakan oleh InfluxDB untuk mengekspor file protokol baris dari server InfluxDB yang dikelola sendiri, dan kemudian menggunakan CLI TSDB untuk InfluxDB® untuk mengimpor file ke TSDB untuk InfluxDB®.
Bagaimana cara memigrasi data antara instans InfluxDB yang berbeda di cloud?
Anda tidak dapat memigrasikan data antar instans InfluxDB secara langsung. Untuk melakukannya, Anda perlu mengkueri dan mengekspor data yang akan dimigrasi, lalu memigrasikan data secara manual. Selama proses kueri, hindari kueri besar yang dapat mempengaruhi stabilitas sistem. Anda dapat memfilter berdasarkan waktu atau deret waktu untuk memigrasikan beberapa data sekaligus.
Bagaimana cara memigrasi data dari InfluxDB ke LindormTSDB?
LindormTSDB menyediakan Layanan Lindorm Tunnel (LTS) untuk mengimpor data historis dari InfluxDB. Anda dapat menggunakan LTS untuk memigrasikan data penuh dari InfluxDB ke LindormTSDB.