

Setelah mempertimbangkan dengan cermat, kami memutuskan untuk menghentikan Amazon Kinesis Data Analytics untuk aplikasi SQL:

1. Mulai **1 September 2025,** kami tidak akan memberikan perbaikan bug untuk Amazon Kinesis Data Analytics untuk aplikasi SQL karena kami akan memiliki dukungan terbatas untuk itu, mengingat penghentian yang akan datang.

2. Mulai **15 Oktober 2025,** Anda tidak akan dapat membuat Kinesis Data Analytics baru untuk aplikasi SQL.

3. Kami akan menghapus aplikasi Anda mulai **27 Januari 2026**. Anda tidak akan dapat memulai atau mengoperasikan Amazon Kinesis Data Analytics untuk aplikasi SQL. Support tidak akan lagi tersedia untuk Amazon Kinesis Data Analytics untuk SQL sejak saat itu. Untuk informasi selengkapnya, lihat [Amazon Kinesis Data Analytics untuk penghentian Aplikasi SQL](discontinuation.md).

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

# Contoh: Mendeteksi Anomali Data dan Mendapatkan Penjelasan (Fungsi RANDOM\$1CUT\$1FOREST\$1WITH\$1EXPLANATION)
<a name="app-anomaly-detection-with-explanation"></a>

Amazon Kinesis Data Analytics menyediakan fungsi `RANDOM_CUT_FOREST_WITH_EXPLANATION`, yang menetapkan skor anomali ke setiap catatan berdasarkan nilai-nilai dalam kolom numerik. Fungsi ini juga memberikan penjelasan tentang anomali. Untuk informasi selengkapnya, lihat [RANDOM\$1CUT\$1FOREST\$1WITH\$1EXPLANATION di *Amazon* Managed Service](https://docs.aws.amazon.com/kinesisanalytics/latest/sqlref/sqlrf-random-cut-forest-with-explanation.html) for Apache Flink SQL Reference. 

Dalam latihan ini, Anda menulis kode aplikasi untuk mendapatkan skor anomali untuk catatan di sumber streaming aplikasi Anda. Anda juga mendapatkan penjelasan untuk setiap anomali.

**Topics**
+ [Langkah 1: Siapkan Data](app-anomaly-with-ex-prepare.md)
+ [Langkah 2: Buat Aplikasi Analitik](app-anom-with-exp-create-app.md)
+ [Langkah 3: Periksa Hasilnya](examine-results-with-exp.md)

**Langkah Pertama**  
[Langkah 1: Siapkan Data](app-anomaly-with-ex-prepare.md)

# Langkah 1: Siapkan Data
<a name="app-anomaly-with-ex-prepare"></a>

Sebelum Anda membuat aplikasi Amazon Kinesis Data Analytics untuk [contoh](app-anomaly-detection-with-explanation.md), Anda membuat Kinesis data stream untuk digunakan sebagai sumber streaming untuk aplikasi Anda. Anda juga menjalankan kode Python untuk menulis simulasi data tekanan darah ke aliran. 

**Topics**
+ [Langkah 1.1: Buat Kinesis Data Stream](#app-anomaly-create-two-streams)
+ [Langkah 1.2: Tulis Catatan Sampel ke Aliran Input](#app-anomaly-write-sample-records-inputstream)

## Langkah 1.1: Buat Kinesis Data Stream
<a name="app-anomaly-create-two-streams"></a>

Dalam bagian ini, Anda membuat Kinesis data stream bernama `ExampleInputStream`. Anda dapat membuat aliran data ini menggunakan Konsol Manajemen AWS atau AWS CLI.
+ Untuk menggunakan konsol:

  1. [Masuk ke Konsol Manajemen AWS dan buka konsol Kinesis di /kinesis. https://console.aws.amazon.com](https://console.aws.amazon.com/kinesis)

  1. Pilih **Data Streams** (Aliran Data) di panel navigasi. Selanjutnya pilih **Create Kinesis stream** (Buat Kinesis stream).

  1. Untuk nama, masukkan **ExampleInputStream**. Untuk jumlah serpihan, masukkan **1**.
+ Atau, untuk menggunakan AWS CLI untuk membuat aliran data, jalankan perintah berikut:

  ```
  $ aws kinesis create-stream --stream-name ExampleInputStream --shard-count 1
  ```

## Langkah 1.2: Tulis Catatan Sampel ke Aliran Input
<a name="app-anomaly-write-sample-records-inputstream"></a>

Dalam langkah ini, Anda menjalankan kode Python untuk terus membuat catatan sampel dan menulisnya ke aliran data yang Anda buat. 

1. Instal Python dan pip.

   Untuk informasi tentang menginstal Python, lihat [Python](https://www.python.org/). 

   Anda dapat menginstal dependensi menggunakan pip. Untuk informasi tentang menginstal pip, lihat [Penginstalan](https://pip.pypa.io/en/stable/installing/) di dokumentasi pip.

1. Jalankan kode Phyton berikut. Anda dapat mengubah Wilayah ke salah satu yang ingin Anda gunakan untuk contoh ini. Perintah `put-record` dalam kode menulis catatan JSON ke aliran.

   ```
    
   from enum import Enum
   import json
   import random
   import boto3
   
   STREAM_NAME = "ExampleInputStream"
   
   
   class PressureType(Enum):
       low = "LOW"
       normal = "NORMAL"
       high = "HIGH"
   
   
   def get_blood_pressure(pressure_type):
       pressure = {"BloodPressureLevel": pressure_type.value}
       if pressure_type == PressureType.low:
           pressure["Systolic"] = random.randint(50, 80)
           pressure["Diastolic"] = random.randint(30, 50)
       elif pressure_type == PressureType.normal:
           pressure["Systolic"] = random.randint(90, 120)
           pressure["Diastolic"] = random.randint(60, 80)
       elif pressure_type == PressureType.high:
           pressure["Systolic"] = random.randint(130, 200)
           pressure["Diastolic"] = random.randint(90, 150)
       else:
           raise TypeError
       return pressure
   
   
   def generate(stream_name, kinesis_client):
       while True:
           rnd = random.random()
           pressure_type = (
               PressureType.low
               if rnd < 0.005
               else PressureType.high
               if rnd > 0.995
               else PressureType.normal
           )
           blood_pressure = get_blood_pressure(pressure_type)
           print(blood_pressure)
           kinesis_client.put_record(
               StreamName=stream_name,
               Data=json.dumps(blood_pressure),
               PartitionKey="partitionkey",
           )
   
   
   if __name__ == "__main__":
       generate(STREAM_NAME, boto3.client("kinesis"))
   ```

**Langkah Selanjutnya**  
[Langkah 2: Buat Aplikasi Analitik](app-anom-with-exp-create-app.md)

# Langkah 2: Buat Aplikasi Analitik
<a name="app-anom-with-exp-create-app"></a>

Dalam bagian ini, Anda membuat aplikasi Amazon Kinesis Data Analytics dan mengonfigurasinya untuk menggunakan Kinesis data stream yang Anda buat sebagai sumber streaming di [Langkah 1: Siapkan Data](app-anomaly-with-ex-prepare.md). Anda kemudian menjalankan kode aplikasi yang menggunakan fungsi `RANDOM_CUT_FOREST_WITH_EXPLANATION`.

**Untuk membuat aplikasi**

1. [Buka konsol Kinesis di /kinesis. https://console.aws.amazon.com](https://console.aws.amazon.com/kinesis)

1. Pilih **Data Analytics** (Analitik Data) di panel navigasi, lalu pilih **Create application** (Buat aplikasi).

1. Beri nama dan deskripsi aplikasi (opsional), dan pilih **Create application** (Buat aplikasi).

1. Pilih **Connect streaming data**, lalu pilih **ExampleInputStream**dari daftar. 

1. Pilih **Discover schema** (Temukan skema), dan pastikan `Systolic` dan `Diastolic` muncul sebagai kolom `INTEGER`. Jika memiliki tipe lain, pilih **Edit schema** (Edit skema), dan tetapkan tipe `INTEGER` ke keduanya. 

1. Di bawah **Real time analytics** (Analitik waktu nyata), pilih **Go to SQL editor** (Buka editor SQL). Saat diminta, pilih untuk menjalankan aplikasi Anda. 

1. Tempel mode berikut ke editor SQL, lalu pilih **Save and run SQL** (Simpan dan jalankan SQL).

   ```
   --Creates a temporary stream.
   CREATE OR REPLACE STREAM "TEMP_STREAM" (
   	        "Systolic"                  INTEGER,
   	        "Diastolic"                 INTEGER,
   	        "BloodPressureLevel"        varchar(20),
   	        "ANOMALY_SCORE"             DOUBLE,
   	        "ANOMALY_EXPLANATION"       varchar(512));
   
   --Creates another stream for application output.	        
   CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" (
   	        "Systolic"                  INTEGER,
   	        "Diastolic"                 INTEGER,
   	        "BloodPressureLevel"        varchar(20),
   	        "ANOMALY_SCORE"             DOUBLE,
   	        "ANOMALY_EXPLANATION"       varchar(512));
   
   -- Compute an anomaly score with explanation for each record in the input stream
   -- using RANDOM_CUT_FOREST_WITH_EXPLANATION
   CREATE OR REPLACE PUMP "STREAM_PUMP" AS 
      INSERT INTO "TEMP_STREAM"
         SELECT STREAM "Systolic", "Diastolic", "BloodPressureLevel", ANOMALY_SCORE, ANOMALY_EXPLANATION 
         FROM TABLE(RANDOM_CUT_FOREST_WITH_EXPLANATION(
                 CURSOR(SELECT STREAM * FROM "SOURCE_SQL_STREAM_001"), 100, 256, 100000, 1, true));
   
   -- Sort records by descending anomaly score, insert into output stream
   CREATE OR REPLACE PUMP "OUTPUT_PUMP" AS 
      INSERT INTO "DESTINATION_SQL_STREAM"
         SELECT STREAM * FROM "TEMP_STREAM"
         ORDER BY FLOOR("TEMP_STREAM".ROWTIME TO SECOND), ANOMALY_SCORE DESC;
   ```

**Langkah Selanjutnya**  
[Langkah 3: Periksa Hasilnya](examine-results-with-exp.md)

# Langkah 3: Periksa Hasilnya
<a name="examine-results-with-exp"></a>

Ketika Anda menjalankan kode SQL untuk [contoh](app-anomaly-detection-with-explanation.md) ini, Anda pertama-tama melihat baris dengan skor anomali sama dengan nol. Hal ini terjadi selama tahap pembelajaran awal. Anda akan melihat hasil yang serupa dengan yang berikut:

```
ROWTIME SYSTOLIC DIASTOLIC BLOODPRESSURELEVEL ANOMALY_SCORE ANOMALY_EXPLANATION
27:49.0	101      66        NORMAL             0.711460417   {"Systolic":{"DIRECTION":"LOW","STRENGTH":"0.0922","ATTRIBUTION_SCORE":"0.3792"},"Diastolic":{"DIRECTION":"HIGH","STRENGTH":"0.0210","ATTRIBUTION_SCORE":"0.3323"}}
27:50.0	144      123       HIGH               3.855851061   {"Systolic":{"DIRECTION":"HIGH","STRENGTH":"0.8567","ATTRIBUTION_SCORE":"1.7447"},"Diastolic":{"DIRECTION":"HIGH","STRENGTH":"7.0982","ATTRIBUTION_SCORE":"2.1111"}}
27:50.0	113      69        NORMAL             0.740069409   {"Systolic":{"DIRECTION":"LOW","STRENGTH":"0.0549","ATTRIBUTION_SCORE":"0.3750"},"Diastolic":{"DIRECTION":"LOW","STRENGTH":"0.0394","ATTRIBUTION_SCORE":"0.3650"}}
27:50.0	105      64        NORMAL             0.739644157   {"Systolic":{"DIRECTION":"HIGH","STRENGTH":"0.0245","ATTRIBUTION_SCORE":"0.3667"},"Diastolic":{"DIRECTION":"LOW","STRENGTH":"0.0524","ATTRIBUTION_SCORE":"0.3729"}}
27:50.0	100      65        NORMAL             0.736993425   {"Systolic":{"DIRECTION":"HIGH","STRENGTH":"0.0203","ATTRIBUTION_SCORE":"0.3516"},"Diastolic":{"DIRECTION":"LOW","STRENGTH":"0.0454","ATTRIBUTION_SCORE":"0.3854"}}
27:50.0	108      69        NORMAL             0.733767202   {"Systolic":{"DIRECTION":"LOW","STRENGTH":"0.0974","ATTRIBUTION_SCORE":"0.3961"},"Diastolic":{"DIRECTION":"LOW","STRENGTH":"0.0189","ATTRIBUTION_SCORE":"0.3377"}}
```
+ Algoritme dalam fungsi `RANDOM_CUT_FOREST_WITH_EXPLANATION` melihat kolom `Systolic` dan `Diastolic` adalah numerik, dan menggunakannya sebagai input.
+ Kolom `BloodPressureLevel` memiliki data teks, dan oleh karena itu tidak diperhitungkan oleh algoritme. Kolom ini hanya bantuan visual untuk membantu Anda melihat tingkat tekanan darah normal, tinggi, dan rendah dalam contoh ini dengan cepat.
+ Di kolom `ANOMALY_SCORE`, catatan dengan skor yang lebih tinggi lebih anomali. Catatan kedua dalam kumpulan sampel hasil ini adalah yang paling anomali, dengan skor anomali 3,855851061.
+ Untuk memahami sejauh mana masing-masing kolom numerik yang diperhitungkan oleh algoritme berkontribusi pada skor anomali, lihat bidang JSON bernama `ATTRIBUTION_SCORE` di kolom `ANOMALY_SCORE`. Dalam kasus baris kedua dalam kumpulan hasil sampel ini, kolom `Systolic` dan `Diastolic` berkontribusi terhadap anomali dalam rasio 1,7447:2,1111. Dengan kata lain, 45 persen penjelasan untuk skor anomali disebabkan oleh nilai sistolik, dan atribusi yang tersisa disebabkan oleh nilai diastolik.
+ Untuk menentukan arah tempat titik yang diwakili oleh baris kedua dalam sampel ini adalah anomali, lihat bidang JSON bernama `DIRECTION`. Kedua nilai diastolik dan sistolik ditandai sebagai `HIGH` dalam kasus ini. Untuk menentukan keyakinan arah mana yang benar, lihat bidang JSON bernama `STRENGTH`. Dalam contoh ini, algoritme lebih yakin bahwa nilai diastolik tinggi. Memang, nilai normal untuk pembacaan diastolik biasanya 60-80, dan 123 jauh lebih tinggi dari yang diharapkan. 