Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Pengoptimalan kueri
Filter metadata
Saat Anda menanyakan metadata atau data mentah, gunakan WHERE klausa untuk memfilter menurut bidang metadata untuk mengurangi jumlah data yang dipindai. Gunakan operator berikut untuk membatasi pemindaian metadata:
Sama dengan (=)
Tidak sama (! =)
SUKA
DI DALAM
AND
ATAU
Untuk properti atribut, gunakan bidang berikut untuk memfilter hasil. :
double_attribute_valueint_attribute_valueboolean_attribute_valuestring_attribute_value
Bidang ini memberikan kinerja yang lebih baik daripada tabel latest_value_time_series untuk properti aset tipe atribut.
catatan
Gunakan literal di sisi kanan operator untuk membatasi pemindaian data dengan benar. Misalnya, kueri berikut berkinerja lebih buruk daripada menggunakan literal string ketat:
SELECT property_id FROM asset_property WHERE property_name = CONCAT('my', 'property')
contoh untuk filter metadata:
SELECT p.property_name FROM asset_property p WHERE p.property_type = 'attribute' AND p.string_attribute_value LIKE 'my-property-%'
Filter data mentah
Semua tabel data mentah (raw_time_series, latest_value_time_series, precomputed_aggregates) memiliki cap waktu yang terkait dengan barisnya. Selain filter metadata, gunakan filter WHERE klausa di event_timestamp lapangan untuk mengurangi jumlah data yang dipindai. Gunakan operasi berikut untuk membatasi pemindaian data mentah:
Sama dengan (=)
Lebih besar dari (>)
Kurang dari (<)
Lebih besar dari atau sama (>=)
Kurang dari atau sama (<=)
DI ANTARA
DAN
Contoh filter:
-
Saat menanyakan tabel precomputed_aggregates, selalu tentukan filter kualitas dalam klausa.
WHEREIni mengurangi jumlah data yang dipindai kueri, terutama jika Anda mencariBADatauUNCERTAINdata.Kami juga sangat menyarankan menggunakan filter resolusi (1m, 15m, 1h, atau 1d) saat menanyakan tabel precomputed_aggregates. Jika Anda tidak menentukan filter resolusi, AWS IoT SiteWise akan default ke pemindaian tabel lengkap di semua resolusi, yang tidak efisien.
-
Saat menanyakan data mentah, fungsi stempel waktu juga dapat digunakan dalam
WHEREklausa untuk memfilter jumlah data yang dipindai. Misalnya, kueri berikut hanya memindai 30 menit terakhir data dari tabel raw_time_series:SELECT r.event_timestamp, r.double_value FROM raw_time_series r WHERE r.event_timestamp > TIMESTAMP_SUB(MINUTE, 30, NOW())
catatan
Tidak sama (!=) dan OR operator biasanya tidak menerapkan filter yang berarti untuk pemindaian data mentah. Filter pada nilai data mentah (string_value, double_value, dll.) Juga tidak membatasi pemindaian data mentah.
Gabung optimasi
AWS IoT SiteWise SQL mendukung JOIN kata kunci untuk menggabungkan dua tabel bersama-sama. Hanya JOIN s yang secara aktif memfilter pada bidang (menggunakan ON kata kunci) yang didukung. Gabungan Cartesian penuh dilarang.
AWS IoT SiteWise juga mendukung implisit JOIN s tanpa menggunakan JOIN kata kunci. Ini diperbolehkan antara tabel metadata yang berbeda dan antara tabel metadata dan tabel mentah. Misalnya, kueri ini:
SELECT a.asset_name, p.property_name FROM asset a, asset_property p
Berkinerja lebih baik dari kueri setara ini:
SELECT a.asset_name, p.property_name FROM asset a JOIN asset_property p ON a.asset_id = p.asset_id
Gabungan implisit berikut diperbolehkan (O diperbolehkan, X dilarang):
| aset | aset_property | terbaru_value_time_series | raw_time_seri | precomputed_aggregates | subkueri | |
|---|---|---|---|---|---|---|
| aset | X | O | O | O | O | X |
| aset_property | O | X | O | O | O | X |
| terbaru_value_time_series | O | O | X | X | X | X |
| raw_time_seri | O | O | X | X | X | X |
| precomputed_aggregates | O | O | X | X | X | X |
| subkueri | X | X | X | X | X | X |
Gunakan implisit JOIN s jika memungkinkan. Jika Anda harus menggunakan JOIN kata kunci, terapkan filter pada tabel JOIN ed individu untuk meminimalkan data yang dipindai. Misalnya, alih-alih kueri ini:
SELECT level1.asset_id, level2.asset_id, level3.asset_id FROM asset AS level1 JOIN asset AS level2 ON level2.parent_asset_id = level1.asset_id JOIN asset AS level3 ON level3.parent_asset_id = level2.asset_id WHERE level1.asset_name LIKE 'level1%' AND level2.asset_name LIKE 'level2%' AND level3.asset_name LIKE 'level3%'
Gunakan kueri yang lebih efisien ini:
SELECT level1.asset_id, level2.asset_id, level3.asset_id FROM asset AS level1 JOIN (SELECT asset_id, parent_asset_id FROM asset WHERE asset_name LIKE 'level2%') AS level2 ON level2.parent_asset_id = level1.asset_id JOIN (SELECT asset_id, parent_asset_id FROM asset WHERE asset_name LIKE 'level3%') AS level3 ON level3.parent_asset_id = level2.asset_id WHERE level1.asset_name LIKE 'level1%'
Dengan mendorong filter metadata ke subkueri, Anda memastikan bahwa masing-masing tabel di JOIN s disaring selama proses pemindaian. Anda juga dapat menggunakan LIMIT kata kunci dalam subquery untuk efek yang sama.
Kueri besar
Untuk kueri yang menghasilkan lebih banyak baris daripada default, atur ukuran halaman ExecuteQueryAPI ke nilai maksimum 20000. Ini meningkatkan kinerja kueri secara keseluruhan.
Gunakan LIMIT klausa untuk mengurangi jumlah data yang dipindai untuk beberapa kueri. Perhatikan bahwa fungsi agregat dan klausa lebar tabel tertentu (GROUP BY,ORDER BY,JOIN) memerlukan pemindaian penuh untuk diselesaikan sebelum menerapkan klausa. LIMIT
catatan
AWS IoT SiteWise dapat memindai jumlah minimum data bahkan dengan LIMIT klausa yang diterapkan, terutama untuk kueri data mentah yang memindai beberapa properti.