

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.

# Mengonversi dasbor agregat menjadi kueri terjadwal
<a name="scheduledqueries-example1"></a>

Asumsikan Anda menghitung statistik armada seperti jumlah host dalam armada oleh lima layanan mikro dan oleh enam wilayah tempat layanan Anda digunakan. Dari snapshot di bawah ini, Anda dapat melihat ada 500K server yang memancarkan metrik, dan beberapa wilayah yang lebih besar (misalnya, us-east-1) memiliki> 200K server.

Menghitung agregat ini, di mana Anda menghitung nama instance yang berbeda lebih dari ratusan gigabyte data dapat menghasilkan latensi kueri puluhan detik, selain biaya pemindaian data.

![\[Instance counts for microservices: apollo and zeus 150k, hercules 100k, athena and demeter 50k each.\]](http://docs.aws.amazon.com/id_id/timestream/latest/developerguide/images/sched_query_ex1_img1.png)


**Kueri dasbor asli**

Agregat yang ditampilkan di panel dasboard dihitung, dari data mentah, menggunakan kueri di bawah ini. Kueri menggunakan beberapa konstruksi SQL, seperti jumlah yang berbeda dan beberapa fungsi agregasi.

```
SELECT CASE WHEN microservice_name = 'apollo' THEN num_instances ELSE NULL END AS apollo,
    CASE WHEN microservice_name = 'athena' THEN num_instances ELSE NULL END AS athena,
    CASE WHEN microservice_name = 'demeter' THEN num_instances ELSE NULL END AS demeter,
    CASE WHEN microservice_name = 'hercules' THEN num_instances ELSE NULL END AS hercules,
    CASE WHEN microservice_name = 'zeus' THEN num_instances ELSE NULL END AS zeus
FROM (
    SELECT microservice_name, SUM(num_instances) AS num_instances
    FROM (
        SELECT microservice_name, COUNT(DISTINCT instance_name) as num_instances
        FROM "raw_data"."devops"
        WHERE time BETWEEN from_milliseconds(1636526171043) AND from_milliseconds(1636612571043)
            AND measure_name = 'metrics'
        GROUP BY region, cell, silo, availability_zone, microservice_name
    )
    GROUP BY microservice_name
)
```

**Mengonversi ke kueri terjadwal**

Query sebelumnya dapat dikonversi menjadi query terjadwal sebagai berikut. Pertama-tama Anda menghitung nama host yang berbeda dalam penerapan tertentu di wilayah, sel, silo, zona ketersediaan, dan layanan mikro. Kemudian Anda menambahkan host untuk menghitung per jam per jumlah host microservice. Dengan menggunakan `@scheduled_runtime` parameter yang didukung oleh kueri terjadwal, Anda dapat menghitung ulang selama satu jam terakhir saat kueri dipanggil. `WHERE`Klausa `bin(@scheduled_runtime, 1h)` dalam kueri dalam memastikan bahwa meskipun kueri dijadwalkan pada suatu waktu di tengah jam, Anda masih mendapatkan data selama satu jam penuh.

Meskipun kueri menghitung agregat per jam, seperti yang akan Anda lihat dalam konfigurasi komputasi terjadwal, kueri diatur untuk menyegarkan setiap setengah jam sehingga Anda mendapatkan pembaruan di tabel turunan lebih cepat. Anda dapat menyetelnya berdasarkan persyaratan kesegaran Anda, misalnya, menghitung ulang agregat setiap 15 menit atau menghitung ulang pada batas jam.

```
SELECT microservice_name, hour, SUM(num_instances) AS num_instances    
FROM (
        SELECT microservice_name, bin(time, 1h) AS hour, 
            COUNT(DISTINCT instance_name) as num_instances
       FROM raw_data.devops        
       WHERE time BETWEEN bin(@scheduled_runtime, 1h) - 1h AND @scheduled_runtime        
           AND measure_name = 'metrics'        
       GROUP BY region, cell, silo, availability_zone, microservice_name, bin(time, 1h)    
     )    
GROUP BY microservice_name, hour
```

```
{
    "Name": "MultiPT30mHostCountMicroservicePerHr",
    "QueryString": "SELECT microservice_name, hour, SUM(num_instances) AS num_instances    FROM (        SELECT microservice_name, bin(time, 1h) AS hour, COUNT(DISTINCT instance_name) as num_instances        FROM raw_data.devops        WHERE time BETWEEN bin(@scheduled_runtime, 1h) - 1h AND @scheduled_runtime            AND measure_name = 'metrics'        GROUP BY region, cell, silo, availability_zone, microservice_name, bin(time, 1h)    )    GROUP BY microservice_name, hour",
    "ScheduleConfiguration": {
        "ScheduleExpression": "cron(0/30 * * * ? *)"
    },
    "NotificationConfiguration": {
        "SnsConfiguration": {
            "TopicArn": "******"
        }
    },
    "TargetConfiguration": {
        "TimestreamConfiguration": {
            "DatabaseName": "derived",
            "TableName": "host_count_pt1h",
            "TimeColumn": "hour",
            "DimensionMappings": [
                {
                    "Name": "microservice_name",
                    "DimensionValueType": "VARCHAR"
                }
            ],
            "MultiMeasureMappings": {
                "TargetMultiMeasureName": "num_instances",
                "MultiMeasureAttributeMappings": [
                    {
                        "SourceColumn": "num_instances",
                        "MeasureValueType": "BIGINT"
                    }
                ]
            }
        }
    },
    "ErrorReportConfiguration": {
        "S3Configuration" : {
            "BucketName" : "******",
            "ObjectKeyPrefix": "errors",
            "EncryptionOption": "SSE_S3"
        }
    },
    "ScheduledQueryExecutionRoleArn": "******"
}
```

**Menggunakan hasil yang telah dihitung sebelumnya di dasbor baru**

Anda sekarang akan melihat cara membuat dasbor tampilan agregat Anda menggunakan tabel turunan dari kueri terjadwal yang Anda buat. Dari snapshot dasbor, Anda juga akan dapat memvalidasi bahwa agregat yang dihitung dari tabel turunan dan tabel dasar juga cocok. Setelah Anda membuat dasbor menggunakan tabel turunan, Anda akan melihat waktu muat yang jauh lebih cepat dan biaya yang lebih rendah untuk menggunakan tabel turunan dibandingkan dengan menghitung agregat ini dari data mentah. Di bawah ini adalah snapshot dasbor menggunakan data yang telah dihitung sebelumnya, dan kueri yang digunakan untuk merender panel ini menggunakan data yang telah dihitung sebelumnya yang disimpan dalam tabel “turunan”. host\$1count\$1pt1h”. Perhatikan bahwa struktur kueri sangat mirip dengan kueri yang digunakan di dasbor pada data mentah, kecuali itu menggunakan tabel turunan yang sudah menghitung jumlah berbeda yang digabungkan oleh kueri ini. 

![\[Instance count by microservice showing values for apollo, athena, demeter, hercules, and zeus.\]](http://docs.aws.amazon.com/id_id/timestream/latest/developerguide/images/sched_query_ex1_img2.png)


```
SELECT CASE WHEN microservice_name = 'apollo' THEN num_instances ELSE NULL END AS apollo,
    CASE WHEN microservice_name = 'athena' THEN num_instances ELSE NULL END AS athena,
    CASE WHEN microservice_name = 'demeter' THEN num_instances ELSE NULL END AS demeter,
    CASE WHEN microservice_name = 'hercules' THEN num_instances ELSE NULL END AS hercules,
    CASE WHEN microservice_name = 'zeus' THEN num_instances ELSE NULL END AS zeus
FROM (
    SELECT microservice_name, AVG(num_instances) AS num_instances
    FROM (
        SELECT microservice_name, bin(time, 1h), SUM(num_instances) as num_instances
        FROM "derived"."host_count_pt1h"
        WHERE time BETWEEN from_milliseconds(1636567785421) AND from_milliseconds(1636654185421)
            AND measure_name = 'num_instances'
        GROUP BY microservice_name, bin(time, 1h)
    )
    GROUP BY microservice_name
)
```