

Untuk kemampuan serupa dengan Amazon Timestream LiveAnalytics, pertimbangkan Amazon Timestream untuk InfluxDB. Ini menawarkan konsumsi data yang disederhanakan dan waktu respons kueri milidetik satu digit untuk analitik waktu nyata. Pelajari lebih lanjut [di sini](https://docs.aws.amazon.com//timestream/latest/developerguide/timestream-for-influxdb.html).

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Meminta data dari Timestream untuk InfluxDB 3
<a name="querying-data-from-influxdb-3"></a>

 Amazon TimeStream untuk InfluxDB 3 menyediakan beberapa kueri APIs dan protokol untuk mengambil data deret waktu Anda. Platform ini mendukung bahasa kueri SQL dan InfluxQL melalui protokol HTTP dan Flight (gRPC), menawarkan fleksibilitas untuk berbagai kasus penggunaan dan preferensi klien. 

## Ikhtisar metode kueri
<a name="query-methods-overview"></a>

 InfluxDB 3 mendukung metode query berikut: 
+  API HTTP v3 asli - kueri SQL dan InfluxQL melalui titik akhir REST. 
+  influxdb3 CLI - Antarmuka baris perintah untuk kueri interaktif. 
+  Flight\+GRPC Protocol — Protokol biner berkinerja tinggi untuk pustaka klien. 
+  API Kompatibilitas v1 - Kueri InfluxQL lama untuk kompatibilitas mundur. 

### Menggunakan API kueri HTTP v3
<a name="using-the-v3-http-query-api"></a>

 API v3 menyediakan titik akhir khusus untuk kueri SQL dan InfluxQL dengan dukungan untuk metode GET dan POST. 

#### Kueri SQL () `/api/v3/query_sql`
<a name="sql-queries-apiv3query_sql"></a>

 DAPATKAN contoh permintaan: 

```
curl --get "https://your-cluster-endpoint:8086/api/v3/query_sql" \
  --header "Authorization: Bearer YOUR_TOKEN" \
  --data-urlencode "db=DATABASE_NAME" \
  --data-urlencode "q=SELECT * FROM home WHERE time >= now() - INTERVAL '1 day'"
```

 Contoh permintaan POST (untuk kueri kompleks): 

```
curl "https://your-cluster-endpoint:8086/api/v3/query_sql" \
  --header "Authorization: Bearer YOUR_TOKEN" \
  --json '{
    "db": "DATABASE_NAME",
    "q": "SELECT * FROM home WHERE room = '\''Kitchen'\'' AND temp > 20",
    "format": "jsonl"
  }'
```

#### kueri InfluxQL () `/api/v3/query_influxql`
<a name="influxql-queries-apiv3query_influxql"></a>

Untuk kueri InfluxQL lakukan hal berikut:

```
curl --get "https://your-cluster-endpoint:8086/api/v3/query_influxql" \
  --header "Authorization: Bearer YOUR_TOKEN" \
  --data-urlencode "db=DATABASE_NAME" \
  --data-urlencode "q=SELECT mean(temp) FROM home WHERE time >= now() - 1d GROUP BY room"
```

#### Parameter kueri
<a name="query-parameters"></a>

Anda dapat menggunakan parameter kueri berikut:


|  **Parameter**  |  **Deskripsi**  |  **Diperlukan**  | 
| --- | --- | --- | 
|  db  |  Nama basis data  |  Ya  | 
|  q  |  String kueri (SQL atau InfluxQL)  |  Ya  | 
|  format  |  Format respons (json, jsonl, csv, cantik, parket)  |  Tidak (default: json)  | 
|  params  |  Parameter untuk kueri berparameter  |  Tidak  | 

#### Menggunakan CLI Influxdb3
<a name="using-the-influxdb3-cli"></a>

 Antarmuka baris perintah InfluxDB 3 (CLI) dipanggil dengan perintah. `influxdb3` Ini menyediakan cara interaktif untuk menanyakan data Anda dengan dukungan untuk beberapa format output. 

 Berikut ini menunjukkan query dasar:

```
influxdb3 query \
  --host "your-cluster-endpoint:8086" \
  --token "YOUR_TOKEN" \
  --database "DATABASE_NAME" \
  "SELECT * FROM home WHERE time >= now() - INTERVAL '1 day'"
```

 Berikut ini menunjukkan query dengan format output yang berbeda:

```
# JSON output
influxdb3 query \
  --database "DATABASE_NAME" \
  --format json \
  "SELECT * FROM home LIMIT 10"

# CSV output
influxdb3 query \
  --database "DATABASE_NAME" \
  --format csv \
  "SELECT * FROM home LIMIT 10"

# Parquet file output
influxdb3 query \
  --database "DATABASE_NAME" \
  --format parquet \
  --output results.parquet \
  "SELECT * FROM home"
```

Format output berikut didukung:
+  cantik (default) - Format tabel yang dapat dibaca manusia. 
+  json - Array JSON standar. 
+  jsonl - JSON Lines (ramah streaming). 
+  csv - Nilai yang dipisahkan koma. 
+  parket — Format kolom biner (membutuhkan output file). 

### Menggunakan API kompatibilitas v1
<a name="using-the-v1-compatibility-api"></a>

 Untuk kueri InfluxQL lama, gunakan titik akhir: `/query` 

```
curl --get "https://your-cluster-endpoint:8086/query" \
  --header "Authorization: Bearer YOUR_TOKEN" \
  --data-urlencode "db=DATABASE_NAME" \
  --data-urlencode "q=SELECT * FROM home" \
  --data-urlencode "epoch=ms"
```

## Opsi otentikasi untuk v3 HTTP Query API
<a name="authentication-options"></a>
+  Token pembawa: `Authorization: Bearer TOKEN` 
+  Autentikasi dasar: `--user "any:TOKEN"` 
+  Parameter kueri: `?p=TOKEN` 

## Format respons untuk API Kueri HTTP v3
<a name="response-formats"></a>
+  JSON (default) 
+  CSV (dengan `Accept: application/csv` header) 

## Contoh Query SQL
<a name="sql-query-examples"></a>

Berikut ini menunjukkan query dasar:

```
-- Select specific fields with time filter
SELECT temp, humidity, room 
FROM home 
WHERE time >= now() - INTERVAL '7 days'
  AND room = 'Kitchen'
ORDER BY time DESC

-- Show all tables in database
SHOW TABLES

-- Show columns in a table
SHOW COLUMNS FROM home
```

Berikut ini menunjukkan kueri agregasi:

```
-- Aggregate by tags
SELECT 
  room,
  AVG(temp) as avg_temp,
  MAX(humidity) as max_humidity
FROM home
WHERE time >= now() - INTERVAL '24 hours'
GROUP BY room

-- Time-based aggregation using DATE_BIN
SELECT
  DATE_BIN(INTERVAL '1 hour', time) as time,
  AVG(temp) as avg_temp,
  COUNT(*) as reading_count
FROM home
GROUP BY 1
ORDER BY time DESC
```

Berikut ini menunjukkan fitur SQL tingkat lanjut:

```
-- Parameterized queries (via API)
SELECT * FROM home 
WHERE room = $room 
  AND temp > $min_temp
  AND time >= $start_time

-- Gap filling with interpolation
SELECT
  date_bin_gapfill(INTERVAL '5 minutes', time) as time,
  room,
  interpolate(avg(temp)) as temp
FROM home
WHERE time >= '2025-01-01T00:00:00Z' 
  AND time <= '2025-01-01T12:00:00Z'
GROUP BY 1, room

-- Type casting
SELECT 
  temp::INTEGER as temp_int,
  CAST(humidity AS VARCHAR) as humidity_str
FROM home
```

Berikut ini menunjukkan contoh query InfluxQL:

```
-- Basic query with time filter
SELECT * FROM home WHERE time >= now() - 1d

-- Aggregation with GROUP BY time
SELECT MEAN(temp), MAX(humidity) 
FROM home 
WHERE time >= now() - 7d 
GROUP BY time(1h), room

-- Using selector functions
SELECT FIRST(temp), LAST(temp) 
FROM home 
WHERE time >= now() - 1h 
GROUP BY room
```

Berikut ini menunjukkan bagaimana untuk query tabel sistem untuk memahami struktur database Anda dan memantau kinerja: 

```
-- View all tables with schema information
SELECT * FROM information_schema.tables

-- View column details for a specific table
SELECT * FROM information_schema.columns 
WHERE table_name = 'home'

-- Monitor recent queries
SELECT * FROM system.queries 
ORDER BY issue_time DESC 
LIMIT 10

-- Check cache configurations
SELECT * FROM system.last_caches
SELECT * FROM system.distinct_caches
```

## Praktik terbaik kinerja kueri
<a name="query-performance-best-practices"></a>
+  **Gunakan Filter Waktu**: Selalu sertakan filter rentang waktu untuk membatasi data yang dipindai. 
+  **Indeks Leverage**: Desain kueri untuk menggunakan filter tag secara efektif. 
+  **Pilih Format Output yang Sesuai**: 
  +  Gunakan jsonl untuk streaming hasil besar. 
  +  Gunakan parket untuk ekspor data dan analitik. 
  +  Gunakan csv untuk kompatibilitas spreadsheet. 
+  **Optimalkan Agregasi**: Gunakan DATE\_BIN untuk pengelompokan berbasis waktu. 
+  **Gunakan Parameterized Query**: Mencegah serangan injeksi dan meningkatkan penggunaan kembali. 
+  **Monitor Kinerja Kueri**: Periksa tabel system.queries untuk kueri lambat. 

## Dukungan kueri pustaka klien
<a name="client-library-query-support"></a>

 Pustaka klien InfluxDB 3 menggunakan protokol Flight\+GRPC untuk kinerja optimal. Kode Python berikut menunjukkan contoh ini. 

```
from influxdb3 import InfluxDBClient3

client = InfluxDBClient3(
    host="your-cluster-endpoint:8086",
    token="YOUR_TOKEN",
    database="DATABASE_NAME"
)

# SQL query
sql_result = client.query("SELECT * FROM home WHERE room = 'Kitchen'")

# InfluxQL query  
influxql_result = client.query(
    "SELECT MEAN(temp) FROM home WHERE time >= now() - 1h GROUP BY room",
    language="influxql"
)
```

## Bandingkan kemampuan kueri SQL dan InfluxQL
<a name="query-language-comparison"></a>

Tabel berikut membandingkan kemampuan query SQL dan InfluxQL:


|  **Fitur**  |  **SQL**  |  **InfluxQL**  | 
| --- | --- | --- | 
|  Bergabung  |  Didukung  |  Tidak Support  | 
|  Fungsi Jendela  |  Dukungan penuh  |  Terbatas  | 
|  Subkueri  |  Didukung  |  Tidak Support  | 
|  Fungsi Waktu  |  DATE\_BIN, INTERVAL  |  time()pengelompokan  | 
|  Kueri Parameterisasi  |  Dukungan asli  |  Tidak didukung  | 
|  Pengisian Celah  |  date\_bin\_gapfill()  |  Fungsi fill()  | 

 Dengan memahami kemampuan kueri ini dan memilih metode yang sesuai untuk kasus penggunaan Anda, Anda dapat secara efisien mengambil dan menganalisis data deret waktu Anda dari Timestream untuk InfluxDB 3. 

 Keuntungan SQL: 
+  Implementasi SQL berfitur lengkap dengan dukungan untuk kueri kompleks. 
+  Support untuk fungsi gabungan, serikat pekerja, dan jendela. 
+  Sintaks familiar untuk pengguna dengan latar belakang SQL. 
+  Kemampuan analitis yang lebih luas. 

 Keuntungan InfluxQL: 
+  Dirancang khusus untuk data deret waktu. 
+  Sintaks yang lebih sederhana untuk operasi deret waktu umum. 
+  Kompatibilitas mundur untuk pengguna yang bermigrasi dari InfluxDB v1. 
+  Fungsi deret waktu khusus. 

## Fitur pengoptimalan kueri
<a name="query-optimization-features"></a>

 InfluxDB 3 menawarkan beberapa fitur pengoptimalan untuk meningkatkan kinerja kueri untuk kasus penggunaan tertentu. Fitur-fitur ini memanfaatkan caching dalam memori dan strategi pengindeksan khusus untuk memberikan waktu respons sub-milidetik untuk pola data yang sering diakses. 

### Cache Nilai Terakhir (LVC)
<a name="last-value-cache-lvc"></a>

 Last Value Cache (LVC) menyimpan nilai N terbaru untuk bidang tertentu dalam memori, memungkinkan waktu respons sub-10ms untuk kueri yang memerlukan titik data terbaru. Fitur ini tersedia dalam edisi Core dan Enterprise. 

#### Bagaimana LVC bekerja
<a name="how-lvc-works"></a>

 LVC mempertahankan tabel dalam memori dari nilai terbaru untuk setiap kombinasi unik kolom kunci (biasanya tag). Misalnya, dengan data sensor: 

```
Table: home
├── Tags: room, wall
└── Fields: temp, humidity, co

LVC Configuration:
- Key columns: room, wall
- Value columns: temp, humidity, co
- Count: 4 (last 4 values)
```

 Cache menyimpan: 


|  **kamar**  |  **dinding**  |  **suhu**  |  **kelembaban**  |  **co**  |  **waktu**  | 
| --- | --- | --- | --- | --- | --- | 
|  Dapur  |  timur  |  22.7  |  36,5  |  26  |  2025-01-26T 20:00:00 Z  | 
|  Dapur  |  timur  |  22.7  |  36.0  |  9  |  2025-01-26T 17:00:00 Z  | 
|  Dapur  |  timur  |  22.7  |  36.2  |  3  |  2025-01-26T 15:00:00 Z  | 
|  Dapur  |  timur  |  22.7  |  36.1  |  0  |  2025-01-26T 10:00:00 Z  | 
|  Ruang Tamu  |  utara  |  22.2  |  36,4  |  17  |  2025-01-26T 20:00:00 Z  | 
|  ...  |  ...  |  ...  |  ...  |  ...  |  ...  | 

#### Buat LVC
<a name="creating-an-lvc"></a>

Gunakan perintah berikut untuk membuat LVC:

```
influxdb3 create last_cache \
  --database DATABASE_NAME \
  --token YOUR_TOKEN \
  --table home \
  --key-columns room,wall \
  --value-columns temp,hum,co \
  --count 5 \
  --ttl 30mins \
  homeLastCache
```

#### Kueri LVC
<a name="querying-the-lvc"></a>

Gunakan perintah berikut untuk query LVC:

```
-- Query the last cached values
SELECT * FROM last_cache('home', 'homeLastCache')

-- Filter specific series
SELECT * FROM last_cache('home', 'homeLastCache') 
WHERE room = 'Kitchen'
```

#### Praktik terbaik LVC
<a name="lvc-best-practices"></a>
+  Kelola Kardinalitas: Hanya sertakan tag penting sebagai kolom kunci untuk meminimalkan penggunaan memori. 
+  Optimalkan Jumlah Nilai: Keseimbangan antara kebutuhan kueri dan konsumsi memori. 
+  Pertimbangkan TTL: Set sesuai time-to-live untuk entri cache. 
+  Memori Monitor: Ukuran cache = (key\_column\_cardinality × hitungan × value\_columns). 

### Cache Nilai Berbeda (DVC)
<a name="distinct-value-cache-dvc"></a>

 Distinct Value Cache (DVC) mempertahankan nilai unik untuk kolom tertentu dalam memori, mempercepat kueri metadata hingga kurang dari 30 ms waktu respons. Tersedia dalam edisi Core dan Enterprise. 

#### Cara kerja DVC
<a name="how-dvc-works"></a>

 DVC menyimpan semua kombinasi nilai unik untuk kolom tertentu, cocok untuk kueri yang perlu mencantumkan nilai tag atau metadata yang tersedia. 

 Contoh cache untuk data lokasi: 


|  **negara**  |  **kabupaten**  |  **kota**  | 
| --- | --- | --- | 
|  Austria  |  Salzburg  |  Salzburg  | 
|  Austria  |  Wina  |  Wina  | 
|  Belgium  |  Antwerp  |  Antwerp  | 
|  Belgium  |  Flanders Barat  |  Bruges  | 
|  Czech Republic  |  Praha  |  Praha  | 

#### Buat DVC
<a name="creating-a-dvc"></a>

Gunakan perintah berikut untuk membuat DVC:

```
influxdb3 create distinct_cache \
  --database DATABASE_NAME \
  --token YOUR_TOKEN \
  --table wind_data \
  --columns country,county,city \
  --max-cardinality 10000 \
  --max-age 24h \
  windDistinctCache
```

#### Kueri DVC
<a name="querying-the-dvc"></a>

Gunakan perintah berikut untuk menanyakan DVC:

```
-- Get all distinct values
SELECT * FROM distinct_cache('wind_data', 'windDistinctCache')

-- Get distinct countries
SELECT DISTINCT country 
FROM distinct_cache('wind_data', 'windDistinctCache')
```

#### Praktik terbaik DVC
<a name="dvc-best-practices"></a>
+  Tetapkan Batas Kardinalitas: Tentukan kombinasi nilai unik maksimum untuk mengontrol memori. 
+  Konfigurasikan Usia Maks: Hapus nilai basi secara otomatis. 
+  Kolom Strategis Cache: Fokus pada kolom yang sering digunakan dalam kueri metadata. 
+  Ukuran Cache Monitor: Kardinalitas yang lebih tinggi berarti lebih banyak memori diperlukan. 

### Indeks file hanya tersedia di Enterprise
<a name="file-indexes-enterprise-only"></a>

 **Hanya tersedia dalam Enterprise Edition.** Indeks file memungkinkan penyesuaian bagaimana data diindeks dalam penyimpanan, secara signifikan meningkatkan kinerja kueri seri tunggal. 

#### Default vs. pengindeksan khusus
<a name="default-vs.-custom-indexing"></a>

 Pengindeksan Default: InfluxDB mengindeks pada semua tag plus waktu. 

Pengindeksan Kustom: Indeks hanya pada kolom yang relevan dengan kueri Anda. 

 Contoh optimasi: 

```
Schema columns: country, state_province, county, city, postal_code
Query patterns: Always filter by country, state_province, city
Custom index: time, country, state_province, city (skip county, postal_code)
```

Berikut ini menunjukkan cara membuat indeks file kustom

```
influxdb3 create file_index \
  --database DATABASE_NAME \
  --token YOUR_TOKEN \
  --table wind_data \
  country,state_province,city
```

Berikut ini menunjukkan cara menghapus indeks file:

```
influxdb3 delete file_index \
  --database DATABASE_NAME \
  --token YOUR_TOKEN \
  --table wind_data
```

#### Pertimbangan indeks file
<a name="file-index-considerations"></a>
+  Diperlukan Pemadatan: Indeks dibangun selama pemadatan data (gen2 \+). 
+  Hanya Kolom String: Dapat mengindeks tag dan bidang string. 
+  Analisis Pola Kueri: Analisis beban kerja Anda sebelum membuat indeks khusus. 
+  Optimasi Seri Tunggal: Paling bermanfaat untuk kueri yang menargetkan seri tertentu. 

### Mengelola informasi cache
<a name="managing-cache-information"></a>

 Lihat konfigurasi cache dan statistik menggunakan tabel sistem: 

```
-- View Last Value Caches
SELECT * FROM system.last_caches

-- View Distinct Value Caches  
SELECT * FROM system.distinct_caches

-- Check cache memory usage
SELECT 
  cache_name,
  table_name,
  key_columns,
  value_count,
  memory_size_bytes
FROM system.last_caches
```

### Strategi pengoptimalan kinerja
<a name="performance-optimization-strategy"></a>

 Pilih fitur pengoptimalan yang tepat berdasarkan pola kueri Anda: 


|  **Pola Kueri**  |  **Fitur yang Direkomendasikan**  |  **Kinerja yang Diharapkan**  | 
| --- | --- | --- | 
|  Nilai terbaru per seri  |  Cache Nilai Terakhir  |  <10ms  | 
|  Nilai tag yang tersedia  |  Cache Nilai Berbeda  |  <30ms  | 
|  Kueri seri tunggal  |  Indeks File (Perusahaan)  |  Peningkatan yang signifikan  | 
|  Agregasi rentang waktu  |  Indeks standar  |  Kinerja dasar  | 

### Pertimbangan memori dan sumber daya
<a name="memory-and-resource-considerations"></a>

 **Rumus memori cache:** 
+  LVC: memori = key\_cardinality × value\_count × value\_columns × data\_size 
+  DVC: memori = distinct\_combination × column\_count × data\_size 

 **Praktik terbaik:** 
+  Mulailah dengan cache kecil dan pantau penggunaan memori 
+  Gunakan pengaturan TTL untuk membatasi pertumbuhan cache 
+  Hanya cache data yang sering ditanyakan 
+  Pantau tingkat hit cache melalui tabel sistem 
+  Untuk Perusahaan: Gabungkan cache dengan indeks file khusus untuk kinerja optimal 

 Dengan memanfaatkan fitur pengoptimalan ini secara tepat, Anda dapat mencapai peningkatan kinerja yang signifikan untuk pola kueri tertentu sambil mengelola konsumsi sumber daya secara efektif. 