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_value
int_attribute_value
boolean_attribute_value
string_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
Saat menanyakan tabel precomputed_aggregates, selalu tentukan filter kualitas dalam klausa. WHERE
Ini mengurangi jumlah data yang dipindai kueri, terutama jika Anda mencari BAD
atau UNCERTAIN
data. 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.
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. Bergabung dengan 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.