Pengoptimalan kueri - AWS IoT SiteWise

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.