

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

# OpenSearch Bahasa Kueri Terstruktur (SQL)
<a name="CWL_AnalyzeLogData_SQL"></a>

Bagian ini berisi pengantar dasar untuk query CloudWatch Log menggunakan OpenSearch SQL. Ini memberikan opsi yang akrab jika Anda terbiasa bekerja dengan database relasional. OpenSearch SQL menawarkan subset fungsionalitas SQL, menjadikannya pilihan yang baik untuk melakukan kueri ad-hoc dan tugas analisis data. Dengan OpenSearch SQL, Anda dapat menggunakan perintah seperti SELECT, FROM, WHERE, GROUP BY, HAVING, dan berbagai perintah dan fungsi SQL lainnya. Anda dapat mengeksekusi JOINs di seluruh grup log, mengkorelasikan data di seluruh grup log menggunakan sub-kueri, dan menggunakan kumpulan kaya fungsi JSON, matematika, string, kondisional, dan SQL lainnya untuk melakukan analisis yang kuat pada data log dan keamanan.

Gunakan `filterIndex` untuk mengembalikan data yang diindeks saja, dengan memaksa kueri untuk memindai hanya grup log yang diindeks pada bidang yang Anda tentukan dalam kueri. Kurangi volume yang dipindai dengan melewatkan grup log yang tidak memiliki peristiwa log yang berisi bidang yang ditentukan dalam kueri, dan hanya memindai grup log yang cocok dengan nilai yang ditentukan dalam kueri untuk indeks bidang ini. Gunakan `filterIndex` untuk menentukan nama bidang, bersama dengan nama bidang dan nilai untuk kueri hanya data yang diindeks yang berisi bidang dan nilai yang ditentukan.

Anda dapat menggunakan OpenSearch SQL untuk kueri grup log di Kelas Log Standar. SQL juga mendukung query menggunakan nama sumber data dan tipe sumber data. 

**catatan**  
Tabel berikut mencantumkan perintah dan fungsi SQL yang didukung di CloudWatch Log Untuk informasi tentang semua perintah OpenSearch SQL termasuk sintaks, lihat perintah [SQL yang didukung dalam Panduan Pengembang](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/supported-directquery-sql.html) OpenSearch Layanan.  
Untuk informasi tentang bahasa kueri lain yang dapat Anda gunakan, lihat [Wawasan CloudWatch Log](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html), [PPL OpenSearch Layanan](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_AnalyzeLogData_PPL.html), dan. [CloudWatch Metrics Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/query_with_cloudwatch-metrics-insights.html)

## Perintah SQL yang didukung
<a name="CWL_AnalyzeLogData_SQL-table"></a>

**catatan**  
Di kolom query contoh, ganti sesuai `<logGroup>` kebutuhan tergantung pada sumber data yang Anda kueri. 


| Perintah atau fungsi | Kueri contoh | Deskripsi | 
| --- | --- | --- | 
|  SELECT |  `SELECT `@message`, Operation FROM `LogGroupA``  |  Menampilkan nilai yang diproyeksikan.  | 
|  FROM |  `SELECT `@message`, Operation FROM `LogGroupA``  |  Klausa bawaan yang menentukan tabel sumber atau tampilan untuk mengambil data, mendukung berbagai jenis gabungan dan subkueri.  | 
|  WHERE |  `SELECT * FROM `LogGroupA` WHERE Operation = 'x'`  |  Memfilter peristiwa log berdasarkan kriteria bidang yang disediakan.  | 
|  FilterIndex |  `SELECT * FROM `filterIndex('region' = 'us-east-1')` WHERE status = 200 LIMIT 10;`  |  Mengembalikan data yang diindeks saja, dengan memaksa kueri untuk memindai hanya grup log yang diindeks pada bidang yang Anda tentukan dalam kueri.  | 
|  GROUP BY |  `SELECT `@logStream`, COUNT(*) as log_count FROM `LogGroupA` GROUP BY `@logStream``  | Grup mencatat peristiwa berdasarkan kategori dan menemukan rata-rata berdasarkan statistik.  | 
|  MEMILIKI |  `SELECT `@logStream`, COUNT(*) as log_count FROM `LogGroupA` GROUP BY `@logStream` HAVING log_count > 100`  |  Memfilter hasil berdasarkan kondisi pengelompokan.  | 
|  ORDER BY |  `SELECT * FROM `LogGroupA` ORDER BY `@timestamp` DESC`  |  Memesan hasil berdasarkan bidang dalam klausa ORDER BY. Anda dapat mengurutkan dalam urutan menurun atau naik.  | 
|  BERGABUNG |  `SELECT A.`@message`, B.`@timestamp`FROM `LogGroupA` as A INNER JOIN `LogGroupB` as B ON A.`requestId` = B.`requestId``  |  Bergabung dengan hasil untuk dua tabel berdasarkan bidang umum. Inner JOIN atau Left Outer Join harus ditentukan  | 
|  LIMIT |  `Select * from `LogGroupA` limit 10`  |  Membatasi hasil kueri yang ditampilkan ke baris N pertama.  | 
|  Fungsi string |  `SELECT upper(Operation) , lower(Operation), Operation FROM `LogGroupA``  |  Fungsi bawaan di SQL yang dapat memanipulasi dan mengubah string dan data teks dalam kueri SQL. Misalnya, mengonversi kasus, menggabungkan string, mengekstraksi bagian, dan membersihkan teks.  | 
|  Fungsi tanggal |  `SELECT current_date() as today, date_add(current_date(), 30) as thirty_days_later, last_day(current_date()) as month_end FROM `LogGroupA``  |  Fungsi bawaan untuk menangani dan mengubah data tanggal dan stempel waktu dalam kueri SQL. Misalnya, date\$1add, date\$1format, datediff, dan current\$1date.  | 
|  Fungsi kondisional |  `SELECT Operation, IF(Error > 0, 'High', 'Low') as error_category FROM `LogGroupA`;`  |  Fungsi bawaan yang melakukan tindakan berdasarkan kondisi tertentu, atau yang mengevaluasi ekspresi secara kondisional. Misalnya, CASE dan IF.  | 
|  Fungsi agregat |  `SELECT AVG(bytes) as bytesWritten FROM `LogGroupA``  |  Fungsi bawaan yang melakukan perhitungan pada beberapa baris untuk menghasilkan nilai ringkasan tunggal. Misalnya, SUM, COUNT, AVG, MAX, dan MIN.  | 
|  Fungsi JSON |  `SELECT get_json_object(json_column, '$.name') as name FROM `LogGroupA``  |  Fungsi bawaan untuk mengurai, mengekstrak, memodifikasi, dan menanyakan data berformat JSON dalam kueri SQL (misalnya, from\$1json, to\$1json, get\$1json\$1object, json\$1tuple) yang memungkinkan manipulasi struktur JSON dalam kumpulan data.  | 
|  Fungsi array |  `SELECT scores, size(scores) as length, array_contains(scores, 90) as has_90 FROM `LogGroupA`;`  |  Fungsi bawaan untuk bekerja dengan kolom tipe array dalam kueri SQL, memungkinkan operasi seperti mengakses, memodifikasi, dan menganalisis data array (misalnya, size, explode, array\$1contains).  | 
|  Fungsi jendela |  `SELECT field1, field2, RANK() OVER (ORDER BY field2 DESC) as field2Rank FROM `LogGroupA`;`  |  Fungsi bawaan yang melakukan perhitungan di serangkaian baris tertentu yang terkait dengan baris (jendela) saat ini, memungkinkan operasi seperti peringkat, total berjalan, dan rata-rata bergerak. Misalnya, ROW\$1NUMBER, RANK, LAG, dan LEAD  | 
|  Fungsi konversi |  `SELECT CAST('123' AS INT) as converted_number, CAST(123 AS STRING) as converted_string FROM `LogGroupA``  |  Fungsi bawaan untuk mengonversi data dari satu jenis ke jenis lainnya dalam kueri SQL, memungkinkan transformasi tipe data dan konversi format. Misalnya, CAST, TO\$1DATE, TO\$1TIMESTAMP, dan BINARY.  | 
|  Fungsi predikat |  `SELECT scores, size(scores) as length, array_contains(scores, 90) as has_90 FROM `LogGroupA`;`  |  Fungsi bawaan yang mengevaluasi kondisi dan mengembalikan nilai boolean (benar/salah) berdasarkan kriteria atau pola yang ditentukan. Misalnya, IN, LIKE, BETWEEN, IS NULL, dan EXISTS.  | 
|  Pilih beberapa grup log |  `SELECT lg1.field1, lg1.field2 from `logGroups( logGroupIdentifier: ['LogGroup1', 'LogGroup2'])` as lg1 where lg1.field3= "Success"`  |  Memungkinkan Anda menentukan beberapa grup log dalam pernyataan SELECT  | 
|  Pilih beberapa sumber data |  `SELECT ds1.field1, ds1.field2 from `dataSource(['DataSource1', 'DataSource2'])` as ds1 where ds1.field3= "Success"`  |  Memungkinkan Anda menentukan beberapa sumber data dalam pernyataan SELECT  | 

## SQL yang didukung untuk multi-log-group kueri
<a name="CWL_AnalyzeLogData_SQL-multi"></a>

Untuk mendukung kasus penggunaan untuk menanyakan beberapa grup log di SQL, Anda dapat menggunakan perintah. `logGroups` Dengan menggunakan sintaks ini, Anda dapat menanyakan beberapa grup log dengan menentukannya dalam perintah FROM.

Sintaksis:

```
`logGroups(
    logGroupIdentifier: ['LogGroup1','LogGroup2', ...'LogGroupn']
)
```

Dalam sintaks ini, Anda dapat menentukan hingga 50 grup log dalam `logGroupIdentifier` parameter. Untuk mereferensikan grup log di akun pemantauan, gunakan ARNs alih-alih `LogGroup` nama.

Contoh kueri:

```
SELECT LG1.Column1, LG1.Column2 from `logGroups(
    logGroupIdentifier: ['LogGroup1', 'LogGroup2']
)` as LG1 WHERE LG1.Column1 = 'ABC'
```

Sintaks berikut yang melibatkan beberapa grup log setelah `FROM` pernyataan TIDAK didukung saat menanyakan CloudWatch Log.

```
SELECT Column1, Column2 FROM 'LogGroup1', 'LogGroup2', ...'LogGroupn'
WHERE Column1 = 'ABC'
```

## SQL yang didukung untuk kueri sumber data
<a name="CWL_AnalyzeLogData_SQL-data-source"></a>

 Untuk mendukung kasus penggunaan kueri sumber data di SQL, Anda dapat menggunakan perintah DataSource. Dengan menggunakan sintaks ini, Anda dapat meminta sumber data dengan menentukannya dalam perintah. `FROM` Anda dapat menentukan hingga 10 sumber data. 

**Sintaksis**

```
`dataSource(
    ['DataSource1', 'DataSource2', ...'DataSourcen']
)`
```

**Contoh kueri**

```
SELECT DS1.Column1, DS1.Column2 from `dataSource(
    ['DataSource1', 'DataSource2']
)` as DS1 WHERE DS1.Column1 = 'ABC'
```

## Lingkup kueri
<a name="CWL_AnalyzeLogData_SQL-scope"></a>

Di API AWS CLI dan, Anda dapat menentukan log mana yang akan dikueri dengan menggunakan grup log, sumber dan jenis data, serta indeks bidang.

### Grup Log
<a name="CWL_AnalyzeLogData_SQL-scope-loggroup"></a>

Pemilihan sumber Grup Log dapat digunakan ketika pelanggan mengetahui grup log yang tepat yang perlu dicari

```
SELECT * FROM `logGroups(logGroupIdentifier: ['/aws/lambda/my-function'])`;
```

### Sumber dan Jenis Data
<a name="CWL_AnalyzeLogData_SQL-scope-datasource"></a>

Pelanggan dapat menanyakan log mereka menggunakan nama sumber data dan tipe sumber data.

Sumber data dan pemilihan sumber berbasis tipe dapat digunakan ketika pelanggan mengetahui sumber data pasti mana yang perlu ditanyakan. Kueri ini dijalankan melalui satu atau lebih grup log yang berisi sumber dan jenis data yang ditentukan.

Untuk mendukung kasus penggunaan kueri sumber data di SQL, Anda dapat menggunakan perintah DataSource. Dengan menggunakan sintaks ini, Anda dapat meminta sumber data dengan menentukannya dalam perintah FROM. Anda dapat menentukan hingga 10 sumber data.

Sintaksis:

```
`dataSource(
    ['DataSource1.Type1', 'DataSource2.Type2', ...'DataSourcen.Typen']
)`
```

Contoh kueri:

```
SELECT DS1.Column1, DS1.Column2 from `dataSource(
    ['DataSource1.Type1', 'DataSource2.Type2']
)` as DS1 WHERE DS1.Column1 = 'ABC'
```

Untuk informasi selengkapnya tentang kueri berdasarkan sumber data, lihat[Gunakan aspek untuk mengelompokkan dan menjelajahi log](CloudWatchLogs-Facets.md).

### Contoh gabungan
<a name="CWL_AnalyzeLogData_SQL-scope-combined"></a>

Pelanggan dapat menentukan semua operator pemilihan sumber dalam backticks dalam urutan apa pun dan hasilnya akan didasarkan pada persimpangan semua kondisi yang diterapkan.

Misalnya,/aws/lambda/my-function-1 mungkin berisi beberapa sumber & tipe data termasuk berbagai indeks, ketika kueri berikut dijalankan, hasil yang dikembalikan hanya akan memiliki peristiwa sumber dan tipe DataSource 1.Type1 dan cocok dengan kriteria 'status' = 200.

```
SELECT * FROM `
   logGroups(logGroupIdentifier: ['/aws/lambda/my-function'])
   filterIndex('status' = 200)
   dataSource(['DataSource1.Type1'])
`;
```

### Indeks Lapangan
<a name="CWL_AnalyzeLogData_SQL-scope-fieldindex"></a>

Pemilihan sumber berbasis Indeks Bidang secara otomatis mengidentifikasi grup log yang relevan saat filter Anda menargetkan bidang yang diindeks, mengurangi volume pemindaian dan runtime kueri. 

Gunakan `filterIndex` untuk mengembalikan data yang diindeks saja, dengan memaksa kueri untuk memindai hanya grup log yang diindeks pada bidang yang Anda tentukan dalam kueri. Untuk grup log ini yang diindeks di bidang ini, selanjutnya mengoptimalkan kueri dengan melewatkan grup log yang tidak memiliki peristiwa log yang berisi bidang yang ditentukan dalam kueri untuk bidang yang diindeks. Selanjutnya mengurangi volume yang dipindai dengan mencoba memindai hanya peristiwa log dari grup log ini yang cocok dengan nilai yang ditentukan dalam kueri untuk indeks bidang ini. Untuk informasi selengkapnya tentang indeks bidang dan cara membuatnya, lihat [Membuat indeks bidang untuk meningkatkan kinerja kueri dan mengurangi volume pemindaian](CloudWatchLogs-Field-Indexing.md).

Dalam SQL, FilterIndex digunakan untuk menentukan pasangan nilai kunci mana yang harus diperlakukan sebagai indeks. Sintaksnya adalah sebagai berikut

```
SELECT * FROM `filterIndex('region' = 'us-east-1')`;
```

dimana,

1. filterIndex (...) menentukan, memperlakukan nilai-nilai kunci di dalamnya sebagai indeks bidang. Setiap pasangan nilai kunci dipisahkan dengan koma (contoh di bawah)

1. 'region' = 'us-east-1' menentukan kondisi aktual yang akan diterapkan

   1. Catatan: Alih-alih = pelanggan dapat menggunakan IN untuk menentukan beberapa nilai (contoh di bawah)

Menggunakan beberapa filterIndex akan menggabungkan kondisi menggunakan “AND”. Dalam contoh, log yang cocok dengan status=200 dan region di us-east-1 atau us-west-2 akan ditanyakan.

```
SELECT * FROM `filterIndex('status' = 200, 'region' IN ['us-east-1', 'us-west-2'])`;
```

## Pembatasan
<a name="CWL_AnalyzeLogData_SQL-restrictions"></a>

Pembatasan berikut berlaku saat Anda menggunakan OpenSearch SQL untuk melakukan kueri di Wawasan CloudWatch Log.
+ Anda hanya dapat menyertakan satu JOIN dalam pernyataan SELECT.
+ Anda tidak dapat menggunakan JOIN atau subquery dengan kueri sumber data.
+ Hanya satu tingkat subkueri bersarang yang didukung.
+ Beberapa kueri pernyataan yang dipisahkan oleh titik dua (;) tidak didukung.
+ Kueri yang berisi nama bidang yang identik tetapi berbeda hanya dalam kasus (seperti field1 dan FIELD1) tidak didukung.

  Misalnya, kueri berikut tidak didukung:

  ```
  Select AWSAccountId, AwsAccountId from LogGroup
  ```

  Namun, kueri berikut didukung karena nama bidang (`@logStream`) identik di kedua grup log:

  ```
  Select a.`@logStream`, b.`@logStream` from Table A INNER Join Table B on a.id = b.id
  ```
+ Fungsi dan ekspresi harus beroperasi pada nama bidang dan menjadi bagian dari pernyataan SELECT dengan grup log yang ditentukan dalam klausa FROM.

  Misalnya, kueri ini tidak didukung:

  ```
  SELECT cos(10) FROM LogGroup
  ```

  Kueri ini didukung:

  ```
  SELECT cos(field1) FROM LogGroup
  ```
+ Saat menggunakan perintah SQL atau PPL, lampirkan bidang tertentu di backticks agar berhasil menanyakannya. Backticks diperlukan untuk bidang dengan karakter khusus (non-alfabet dan non-numerik). Misalnya, lampirkan, `@message``Operation.Export`, dan `Test::Field` di backticks. Anda tidak perlu melampirkan bidang dengan nama abjad murni di backticks.

  Contoh kueri dengan bidang sederhana:

  ```
  SELECT SessionToken, Operation, StartTime  FROM `LogGroup-A`
  LIMIT 1000;
  ```

  Kueri serupa dengan backticks ditambahkan:

  ```
  SELECT `@SessionToken`, `@Operation`, `@StartTime`  FROM `LogGroup-A` LIMIT 1000;
  ```