

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

# Data kueri dari AWS IoT SiteWise
<a name="query-industrial-data"></a>

Anda dapat menggunakan operasi AWS IoT SiteWise API untuk menanyakan nilai saat ini, nilai historis, dan agregat properti aset Anda selama interval waktu tertentu. AWS IoT SiteWise menyediakan beberapa antarmuka kueri untuk memenuhi kebutuhan integrasi yang berbeda:
+ **Operasi API langsung** - Panggilan API yang sederhana dan ditargetkan untuk kebutuhan pengambilan data tertentu
+ **Bahasa kueri seperti SQL** - Kueri yang kuat dan fleksibel untuk analisis data yang kompleks
+ **Driver ODBC** - Integrasi dengan alat dan aplikasi intelijen bisnis

Gunakan kemampuan kueri ini untuk:
+ Dapatkan wawasan waktu nyata tentang data operasional
+ Menganalisis tren dan pola historis
+ Hitung metrik kinerja di seluruh aset industri Anda
+ Integrasikan data IoT dengan sistem dan dasbor perusahaan
+ Membangun aplikasi kustom yang memanfaatkan data industri

Misalnya, Anda dapat menemukan semua aset dengan nilai properti tertentu, membuat representasi kustom data Anda, atau mengembangkan solusi perangkat lunak yang terintegrasi dengan data industri yang disimpan dalam AWS IoT SiteWise aset Anda. Anda juga dapat menjelajahi data aset Anda secara langsung AWS IoT SiteWise Monitor. Untuk mempelajari cara mengkonfigurasi SiteWise Monitor, lihat[Memantau data dengan AWS IoT SiteWise Monitor](monitor-data.md).

Operasi yang dijelaskan dalam bagian ini mengembalikan objek nilai properti yang berisi struktur stempel waktu, kualitas, nilai (TQV):
+ `timestamp`Ini berisi waktu epoch Unix saat ini dalam hitungan detik dengan offset nanodetik.
+ `quality`Berisi salah satu string berikut yang menunjukkan kualitas titik data:
  + `GOOD`— Data tidak terpengaruh oleh masalah apa pun.
  + `BAD`— Data dipengaruhi oleh masalah seperti kegagalan sensor.
  + `UNCERTAIN`— Data dipengaruhi oleh masalah seperti ketidakakuratan sensor.
+ `value`Berisi salah satu bidang berikut, tergantung pada jenis properti:
  + `booleanValue`
  + `doubleValue`
  + `integerValue`
  + `stringValue`
  + `nullValue`

**Topics**
+ [Kueri nilai properti aset saat ini di AWS IoT SiteWise](current-values.md)
+ [Kueri nilai properti aset historis di AWS IoT SiteWise](historical-values.md)
+ [Agregat properti aset kueri di AWS IoT SiteWise](aggregates.md)
+ [AWS IoT SiteWise bahasa query](sql.md)
+ [Pengoptimalan kueri](query-optimize.md)
+ [ODBC](query-ODBC.md)

# Kueri nilai properti aset saat ini di AWS IoT SiteWise
<a name="current-values"></a>

Tutorial ini menunjukkan dua cara untuk mendapatkan nilai saat ini dari properti aset. Anda dapat menggunakan AWS IoT SiteWise konsol atau menggunakan API di AWS Command Line Interface (AWS CLI).

**Topics**
+ [Kueri nilai saat ini properti aset (konsol)](#query-current-value-console)
+ [Kueri nilai saat ini properti aset (AWS CLI)](#query-current-value-cli)

## Kueri nilai saat ini properti aset (konsol)
<a name="query-current-value-console"></a>

Anda dapat menggunakan AWS IoT SiteWise konsol untuk melihat nilai saat ini dari properti aset.

**Untuk mendapatkan nilai saat ini dari properti aset (konsol)**

1. <a name="sitewise-open-console"></a>Navigasikan ke [konsol AWS IoT SiteWise](https://console.aws.amazon.com/iotsitewise/) tersebut.

1. <a name="sitewise-choose-assets"></a>Di panel navigasi, pilih **Aset**.

1. Pilih aset dengan properti untuk kueri.

1. Pilih ikon panah untuk memperluas hierarki aset untuk menemukan aset Anda.

1. Pilih tab untuk jenis properti. Misalnya, pilih **Pengukuran** untuk melihat nilai saat ini dari properti pengukuran.

1. Temukan properti untuk dilihat. Nilai saat ini muncul di kolom **Nilai terbaru**.

## Kueri nilai saat ini properti aset (AWS CLI)
<a name="query-current-value-cli"></a>

Anda dapat menggunakan AWS Command Line Interface (AWS CLI) untuk menanyakan nilai saat ini dari properti aset.

Gunakan [GetAssetPropertyValue](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_GetAssetPropertyValue.html)operasi untuk menanyakan nilai saat ini properti aset.

Untuk mengidentifikasi properti aset, tentukan salah satu dari berikut ini:
+ Properti `propertyId` aset yang dikirimkan ke data. `assetId`
+ The`propertyAlias`, yang merupakan alias aliran data (misalnya,`/company/windfarm/3/turbine/7/temperature`). Untuk menggunakan opsi ini, Anda harus terlebih dahulu menetapkan alias properti aset Anda. Untuk mengatur alias properti, lihat[Mengelola aliran data untuk AWS IoT SiteWise](manage-data-streams.md).

**Untuk mendapatkan nilai saat ini dari properti aset (AWS CLI)**
+ Jalankan perintah berikut untuk mendapatkan nilai properti aset saat ini. Ganti *asset-id* dengan ID aset dan *property-id* dengan ID properti.

  ```
  aws iotsitewise get-asset-property-value \
    --asset-id asset-id \
    --property-id property-id
  ```

  Operasi mengembalikan respons yang berisi TQV saat ini dari properti dalam format berikut.

  ```
  {
    "propertyValue": {
      "value": {
        "booleanValue": Boolean,
        "doubleValue": Number,
        "integerValue": Number,
        "stringValue": "String",
        "nullValue": {
            "valueType": "String"
        }
      },
      "timestamp": {
        "timeInSeconds": Number,
        "offsetInNanos": Number
      },
      "quality": "String"
    }
  }
  ```

# Kueri nilai properti aset historis di AWS IoT SiteWise
<a name="historical-values"></a>

Anda dapat menggunakan [GetAssetPropertyValueHistory](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_GetAssetPropertyValueHistory.html)operasi AWS IoT SiteWise API untuk menanyakan nilai historis properti aset.

Untuk mengidentifikasi properti aset, tentukan salah satu dari berikut ini:
+ Properti `propertyId` aset yang dikirimkan ke data. `assetId`
+ The`propertyAlias`, yang merupakan alias aliran data (misalnya,`/company/windfarm/3/turbine/7/temperature`). Untuk menggunakan opsi ini, Anda harus terlebih dahulu menetapkan alias properti aset Anda. Untuk mengatur alias properti, lihat[Mengelola aliran data untuk AWS IoT SiteWise](manage-data-streams.md).

Lulus parameter berikut untuk menyempurnakan hasil Anda:
+ `startDate`— Awal eksklusif dari rentang dari mana untuk menanyakan data historis, dinyatakan dalam detik dalam waktu zaman Unix.
+ `endDate`— Akhir inklusif dari rentang dari mana untuk menanyakan data historis, dinyatakan dalam detik dalam waktu zaman Unix.
+ `maxResults`— Jumlah maksimum hasil untuk dikembalikan dalam satu permintaan. Default untuk hasil. `20`
+ `nextToken`— Token pagination dikembalikan dari panggilan sebelumnya dari operasi ini.
+ `timeOrdering`— Urutan untuk diterapkan pada nilai yang dikembalikan: `ASCENDING` atau`DESCENDING`.
+ `qualities`— Kualitas untuk memfilter hasil dengan:`GOOD`,`BAD`, atau`UNCERTAIN`.

**Untuk menanyakan riwayat nilai untuk properti aset (AWS CLI)**

1. Jalankan perintah berikut untuk mendapatkan riwayat nilai untuk properti aset. Perintah ini menanyakan riwayat properti selama interval 10 menit tertentu. Ganti *asset-id* dengan ID aset dan *property-id* dengan ID properti. Ganti parameter tanggal dengan interval untuk kueri.

   ```
   aws iotsitewise get-asset-property-value-history \
     --asset-id asset-id \
     --property-id property-id \
     --start-date 1575216000 \
     --end-date 1575216600
   ```

   Operasi mengembalikan respons yang berisi TQVs historis properti dalam format berikut:

   ```
   {
     "assetPropertyValueHistory": [
       {
         "value": {
           "booleanValue": Boolean,
           "doubleValue": Number,
           "integerValue": Number,
           "stringValue": "String",
           "nullValue": {
               "valueType": "String"
           }
         },
         "timestamp": {
           "timeInSeconds": Number,
           "offsetInNanos": Number
         },
         "quality": "String"
       }
     ],
     "nextToken": "String"
   }
   ```

1. Jika ada lebih banyak entri nilai, Anda dapat meneruskan token pagination dari `nextToken` bidang ke panggilan berikutnya ke operasi. [GetAssetPropertyValueHistory](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_GetAssetPropertyValueHistory.html)

# Agregat properti aset kueri di AWS IoT SiteWise
<a name="aggregates"></a>

AWS IoT SiteWise secara otomatis menghitung nilai properti aset agregat, yang merupakan sekumpulan metrik dasar yang dihitung selama beberapa interval waktu. AWS IoT SiteWise menghitung agregat berikut setiap menit, jam, dan hari untuk properti aset Anda:
+ **rata-rata** — Rata-rata (mean) dari nilai properti selama interval waktu.
+ **count** — Jumlah titik data untuk properti selama interval waktu.
+ **maksimum** — Maksimum nilai properti selama interval waktu.
+ **minimum** — Minimal nilai properti selama interval waktu.
+ **standar deviasi** — Standar deviasi nilai properti selama interval waktu.
+ **jumlah** — Jumlah nilai properti selama interval waktu.

Untuk properti non-numerik, seperti string dan Boolean, hanya menghitung agregat AWS IoT SiteWise hitungan.

Anda juga dapat menghitung metrik kustom untuk data aset Anda. Dengan properti metrik, Anda menentukan agregasi yang spesifik untuk operasi Anda. Properti metrik menawarkan fungsi agregasi tambahan dan interval waktu yang tidak dihitung sebelumnya untuk API. AWS IoT SiteWise Untuk informasi selengkapnya, lihat [Data agregat dari properti dan aset lainnya (metrik)](metrics.md).

**Topics**
+ [Agregat untuk properti aset (API)](#aggregates-api)
+ [Agregat untuk properti aset ()AWS CLI](#aggregates-cli)

## Agregat untuk properti aset (API)
<a name="aggregates-api"></a>

Gunakan AWS IoT SiteWise API untuk mendapatkan agregat untuk properti aset.

Gunakan [GetAssetPropertyAggregates](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_GetAssetPropertyAggregates.html)operasi untuk menanyakan agregat properti aset.

Untuk mengidentifikasi properti aset, tentukan salah satu dari berikut ini:
+ Properti `propertyId` aset yang dikirimkan ke data. `assetId`
+ The`propertyAlias`, yang merupakan alias aliran data (misalnya,`/company/windfarm/3/turbine/7/temperature`). Untuk menggunakan opsi ini, Anda harus terlebih dahulu menetapkan alias properti aset Anda. Untuk mengatur alias properti, lihat[Mengelola aliran data untuk AWS IoT SiteWise](manage-data-streams.md).

Anda harus melewati parameter yang diperlukan berikut:
+ `aggregateTypes`— Daftar agregat untuk diambil. Anda dapat menentukan salah satu dari`AVERAGE`,`COUNT`,`MAXIMUM`,`MINIMUM`,`STANDARD_DEVIATION`, dan`SUM`.
+ `resolution`— Interval waktu untuk mengambil metrik: `1m` (1 menit), `15m` (15 menit), `1h` (1 jam), atau `1d` (1 hari).
+ `startDate`— Awal eksklusif dari rentang dari mana untuk menanyakan data historis, dinyatakan dalam detik dalam waktu zaman Unix.
+ `endDate`— Akhir inklusif dari rentang dari mana untuk menanyakan data historis, dinyatakan dalam detik dalam waktu zaman Unix.

Anda juga dapat meneruskan salah satu parameter berikut untuk menyempurnakan hasil Anda:
+ `maxResults`— Jumlah maksimum hasil untuk dikembalikan dalam satu permintaan. Default untuk hasil. `20`
+ `nextToken`— Token pagination dikembalikan dari panggilan sebelumnya dari operasi ini.
+ `timeOrdering`— Urutan untuk diterapkan pada nilai yang dikembalikan: `ASCENDING` atau`DESCENDING`.
+ `qualities`— Kualitas untuk memfilter hasil dengan:`GOOD`,`BAD`, atau`UNCERTAIN`.

**catatan**  
[GetAssetPropertyAggregates](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_GetAssetPropertyAggregates.html)Operasi mengembalikan TQV dengan format yang berbeda dari operasi lain yang dijelaskan dalam bagian ini. `value`Struktur berisi bidang untuk masing-masing permintaan. `aggregateTypes` `timestamp`Berisi waktu agregasi terjadi, dalam detik dalam waktu epoch Unix.

## Agregat untuk properti aset ()AWS CLI
<a name="aggregates-cli"></a>

**Untuk menanyakan agregat untuk properti aset ()AWS CLI**

1. Jalankan perintah berikut untuk mendapatkan agregat untuk properti aset. Perintah ini menanyakan rata-rata dan jumlah dengan resolusi 1 jam untuk interval 1 jam tertentu. Ganti *asset-id* dengan ID aset dan *property-id* dengan ID properti. Ganti parameter dengan agregat dan interval untuk kueri.

   ```
   aws iotsitewise get-asset-property-aggregates \
     --asset-id asset-id \
     --property-id property-id \
     --start-date 1575216000 \
     --end-date 1575219600 \
     --aggregate-types AVERAGE SUM \
     --resolution 1h
   ```

   Operasi mengembalikan respons yang berisi TQVs historis properti dalam format berikut. Respons hanya mencakup agregat yang diminta.

   ```
   {
     "aggregatedValues": [
       {
         "timestamp": Number,
         "quality": "String",
         "value": {
           "average": Number,
           "count": Number,
           "maximum": Number,
           "minimum": Number,
           "standardDeviation": Number,
           "sum": Number
         }
       }
     ],
     "nextToken": "String"
   }
   ```

1. Jika ada lebih banyak entri nilai, Anda dapat meneruskan token pagination dari `nextToken` bidang ke panggilan berikutnya ke operasi. [GetAssetPropertyAggregates](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_GetAssetPropertyAggregates.html)

**catatan**  
 Jika rentang kueri berisi `null` nilai TQVs, lihat [AssetPropertyValue](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_AssetPropertyValue.html)API. Semua statistik kecuali hitungan, menghasilkan `null` respons, mirip dengan statistik untuk String TQVs. Jika rentang kueri Anda berisi `Double.NaN` tipe ganda TQVs, semua perhitungan kecuali hitungan akan menghasilkan a`Double.NaN`. 

# AWS IoT SiteWise bahasa query
<a name="sql"></a>

Dengan operasi [ExecuteQuery](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_ExecuteQuery.html)API pengambilan AWS IoT SiteWise data, Anda dapat mengambil informasi tentang definisi struktural deklaratif, dan data timeseries yang terkait dengannya, dari berikut ini:
+ model
+ aset
+ ukuran
+ metrik
+ berubah
+ agregat

Hal ini dapat dilakukan dengan SQL seperti pernyataan query, dalam satu permintaan API.

**catatan**  
Fitur ini tersedia di semua Wilayah jika AWS IoT SiteWise tersedia, kecuali AWS GovCloud (AS-Barat), Kanada (Tengah), Tiongkok (Beijing) dan AS Timur (Ohio). 

**Topics**
+ [Referensi bahasa kueri untuk AWS IoT SiteWise](query-reference.md)

# Referensi bahasa kueri untuk AWS IoT SiteWise
<a name="query-reference"></a>

 AWS IoT SiteWise mendukung bahasa kueri yang kaya untuk bekerja dengan data Anda. Tipe data, operator, fungsi, dan konstruksi yang tersedia dijelaskan dalam topik berikut.

Lihat [Kueri contoh](sql-examples.md) untuk menulis kueri dengan bahasa AWS IoT SiteWise kueri.

**Topics**
+ [Tampilan referensi kueri](query-reference-views.md)
+ [Jenis data yang didukung](supported-data-types.md)
+ [Klausul yang didukung](supported-clauses.md)
+ [Operator logis](sql-supported-logical.md)
+ [Operator perbandingan](sql-supported-comparision.md)
+ [Fungsi SQL](sql-functions.md)
+ [Kueri contoh](sql-examples.md)

# Tampilan referensi kueri
<a name="query-reference-views"></a>

Bagian ini memberikan informasi untuk membantu Anda memahami tampilan AWS IoT SiteWise, seperti metadata proses dan data telemetri.

Tabel berikut memberikan nama tampilan dan deskripsi tampilan:


**Model Data**  

|  **Lihat nama**  |  **Lihat deskripsi**  | 
| --- | --- | 
|  aset  |  Berisi informasi tentang aset dan model derivasi.  | 
|  aset\$1property  |  Berisi informasi tentang struktur properti aset.  | 
|  raw\$1time\$1seri  |  Berisi data historis deret waktu.  | 
|  terbaru\$1value\$1time\$1series  |  Berisi nilai terbaru dari deret waktu.  | 
|  precomputed\$1aggregates  |  Berisi nilai properti aset agregat yang dihitung secara otomatis. Mereka adalah satu set metrik dasar yang dihitung selama beberapa interval waktu.  | 

Tampilan berikut mencantumkan nama kolom dan tipe data dari setiap tampilan.


**Lihat:aset**  

|  **nama kolom**  |  **tipe data**  | 
| --- | --- | 
|  aset\$1id  |  string  | 
|  asset\$1name  |  string  | 
|  asset\$1description  |  string  | 
|  asset\$1model\$1id  |  string  | 
|  parent\$1asset\$1id  |  string  | 
| asset\$1external\$1id | string | 
| asset\$1model\$1external\$1id | string | 
| hirarki\$1id | string | 


**Lihat:aset\$1properti**  

|  **nama kolom**  |  **tipe data**  | 
| --- | --- | 
|  aset\$1id  |  string  | 
|  property\$1id  |  string  | 
|  property\$1name  |  string  | 
|  property\$1alias  |  string  | 
|  property\$1external\$1id  |  string  | 
|  asset\$1composite\$1model\$1id  |  string  | 
|  property\$1type  |  string  | 
|  property\$1data\$1type  |  string  | 
|  int\$1attribute\$1value  |  integer  | 
|  double\$1attribute\$1value  |  double  | 
|  boolean\$1attribute\$1value  |  boolean  | 
|  string\$1attribute\$1value  |  string  | 


**Lihat:RAW\$1TIME\$1SERIES**  

|  **nama kolom**  |  **tipe data**  | 
| --- | --- | 
|  aset\$1id  |  string  | 
|  property\$1id  |  string  | 
|  property\$1alias  |  string  | 
|  event\$1timestamp  |  timestamp  | 
|  kualitas  |  string  | 
|  boolean\$1nilai  |  boolean  | 
|  int\$1nilai  |  integer  | 
|  nilai ganda  |  double  | 
|  string\$1nilai  |  string  | 


**Lihat:terbaru\$1Value\$1Time\$1Series**  

|  **nama kolom**  |  **tipe data**  | 
| --- | --- | 
|  aset\$1id  |  string  | 
|  property\$1id  |  string  | 
|  property\$1alias  |  string  | 
|  event\$1timestamp  |  timestamp  | 
|  kualitas  |  string  | 
|  boolean\$1nilai  |  boolean  | 
|  int\$1nilai  |  integer  | 
|  nilai ganda  |  double  | 
|  string\$1nilai  |  string  | 


**Lihat:precomputed\$1aggregates**  

|  **nama kolom**  |  **tipe data**  | 
| --- | --- | 
|  aset\$1id  |  string  | 
|  property\$1id  |  string  | 
|  property\$1alias  |  string  | 
|  event\$1timestamp  |  timestamp  | 
|  kualitas  |  string  | 
|  resolusi  |  string  | 
|  nilai sum\$1  |  double  | 
|  count\$1value  |  integer  | 
|  nilai rata-rata\$1  |  double  | 
|  maksimum\$1nilai  |  double  | 
|  minimum\$1nilai  |  double  | 
|  stdev\$1nilai  |  double  | 

# Jenis data yang didukung
<a name="supported-data-types"></a>

AWS IoT SiteWise bahasa query mendukung tipe data berikut.


**Nilai skalar**  

|  **Tipe data**  |  **Deskripsi**  | 
| --- | --- | 
|  `STRING`  |  Sebuah string panjang maksimum 1024 byte.  | 
|  `INTEGER`  |  Integer 32-bit yang ditandatangani dengan rentang dari. `-2,147,483,648 to 2,147,483,647`  | 
|  `DOUBLE`  |  Nomor floating point dengan rentang dari`–10^100 to 10^100`, atau `Nan` dengan presisi `IEEE 754` ganda.  | 
|  `BOOLEAN`  |  `true` atau `false`.  | 
|  `TIMESTAMP`  |  Stempel waktu yang sesuai dengan ISO-8601: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/supported-data-types.html)  | 

**catatan**  
`Null`: Boolean `true` yang menunjukkan kurangnya data yang ditentukan.

**Example**  
`TIMESTAMP`contoh nilai:  

```
TIMESTAMP '2025-12-21 23:59:59.999Z'
TIMESTAMP '2025-12-21 23:59:59+23:59'
'2025-12-21 23:59:59'
'2025-12-21T23:59:59.123+11:11'
```

**catatan**  
 Data presisi ganda tidak tepat. Beberapa nilai tidak dikonversi dengan tepat, dan tidak akan mewakili semua bilangan real karena presisi terbatas. Data floating-point dalam kueri mungkin bukan nilai yang sama yang diwakili secara internal. Nilai dibulatkan jika presisi nomor input terlalu tinggi. 

# Klausul yang didukung
<a name="supported-clauses"></a>

`SELECT`Pernyataan ini digunakan untuk mengambil data dari satu atau lebih tampilan. AWS IoT SiteWise mendukung `JOIN` dan `INNER JOIN` operasi.

Tampilan digabungkan dengan `JOIN` sintaks eksplisit, atau dengan notasi yang dipisahkan koma dalam klausa. `FROM`

**Example**  
`SELECT`Pernyataan umum:  

```
SELECT expression [, ...]
  [ FROM table_name AS alias [, ...] ]
  [ WHERE condition ]
  [ GROUP BY expression [, ...] ]
  [ HAVING condition ]
  [ ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ] [, ...] ]
  [ LIMIT expression ]
```

**Example**  
Pernyataan SELECT dengan klausa yang berbeda:  

```
SELECT
  a.asset_name,
  a.asset_id,
  p.property_type,
  p.property_data_type,
  p.string_attribute_value,
  p.property_name
FROM asset a, asset_property p
WHERE a.asset_description LIKE '%description%'
AND p.property_type IN ('attribute', 'metric')
OR p.property_id IN (
  SELECT property_id
  FROM raw_time_series
  WHERE event_timestamp BETWEEN TIMESTAMP '2025-01-01 00:00:00' AND TIMESTAMP '2025-01-02 00:00:00'
  GROUP BY asset_id, property_id
  HAVING COUNT(*) > 100
 )
GROUP BY p.property_type
HAVING COUNT(*) > 5
ORDER BY a.asset_name ASC
LIMIT 20;
```

**catatan**  
 Sebuah implisit `JOIN` menggabungkan dua atau lebih tabel yang berbeda tanpa menggunakan `JOIN` kata kunci berdasarkan AWS IoT SiteWise skema internal. Ini setara dengan melakukan `JOIN` on the `asset_id` and `property_id` field antara metadata dan tabel data mentah. Pola ini memungkinkan SiteWise untuk memanfaatkan filter metadata yang diberikan dalam kueri, saat mengambil dari tabel data mentah dengan cara yang menghasilkan lebih sedikit keseluruhan data yang dipindai.   

**Example dari sebuah kueri:**  

```
SELECT a.asset_name, p.property_name, r.event_timestamp
FROM asset a, asset_property p, raw_time_series r
WHERE a.asset_name='my_asset' AND p.property_name='my_property'
```
Contoh di atas hanya memindai data dari properti aset milik nama metadata yang ditentukan.  

**Example dari ekuivalen yang kurang dioptimalkan dari kueri di atas:**  

```
SELECT a.asset_name, p.property_name, r.event_timestamp
FROM asset a
JOIN asset_property p ON a.asset_id=p.asset_id
JOIN raw_time_series r ON p.asset_id=r.asset_id AND p.property_id=r.property_id
WHERE a.asset_name='my_asset' AND p.property_name='my_property'
```

Penjelasan dari setiap klausa dan deskripsinya tercantum di bawah ini:


|  **Klausul**  |  **Tanda tangan**  |  **Deskripsi**  | 
| --- | --- | --- | 
|  `LIMIT`  |  <pre>LIMIT { count }</pre>  |  Klausa ini membatasi hasil yang disetel ke jumlah baris yang ditentukan. Anda dapat menggunakan `LIMIT` dengan atau tanpa `ORDER BY` dan `OFFSET` klausa. `LIMIT`hanya bekerja dengan bilangan bulat non-negatif dari [0,2147483647].  | 
|  `ORDER BY`  |  <pre>ORDER BY expression<br />[ ASC | DESC ]<br />[ NULLS FIRST | NULLS LAST ] <br /></pre>  |  `ORDER BY`Klausa mengurutkan kumpulan hasil kueri.   Saat merujuk ke kolom yang dipilih dalam agregasi dalam `ORDER BY` klausa, gunakan indeks ordinal kolom daripada nama atau alias.  <pre>SELECT AVG(t.double_value)<br />FROM latest_value_time_series t<br />GROUP BY t.asset_id<br />ORDER BY 1</pre>   | 
|  `GROUP BY`  |  <pre>GROUP BY expression [, ...]</pre>  |  `GROUP BY`Klausa mengidentifikasi kolom pengelompokan untuk kueri. Ini digunakan bersama dengan ekspresi agregat.  | 
|  `HAVING`  |  <pre>HAVING boolean-expression</pre>  |  `HAVING`Klausa memfilter baris grup yang dibuat oleh klausa GROUP BY.  | 
|  `SUB SELECT`  |  <pre>SELECT column1, column2<br />FROM table1<br />WHERE column3 IN (SELECT column4 FROM table2);<br /></pre>  |  `SELECT`Pernyataan yang disematkan dalam `SELECT` pernyataan lain.  | 
|  `JOIN`  |  <pre>SELECT column1, column2<br />FROM table1 JOIN table2<br />ON table1.column1 = table2.column1;<br /></pre>  | 
|  `INNER JOIN`  |  <pre>SELECT columns<br />FROM table1<br />INNER JOIN table2 ON table1.column = table2.column;<br /></pre>  |  Sebuah `INNER JOIN` mengembalikan semua baris dari kedua tabel, yang cocok dengan kondisi gabungan.  | 
|  `UNION`  |  <pre>query<br />   { UNION [ ALL ] }<br />another_query<br /></pre>  |  `UNION`Operator menghitung gabungan set dari dua argumennya, secara otomatis menghapus catatan duplikat dari kumpulan hasil.  | 

# Operator logis
<a name="sql-supported-logical"></a>

AWS IoT SiteWise mendukung operator logis berikut.


|  **Operator**  |  **Tanda tangan**  |  **Deskripsi**  | 
| --- | --- | --- | 
|  `AND`  |  a `AND` b  |  `TRUE`jika kedua nilai itu benar  | 
|  `OR`  |  a `OR` b  |  `TRUE`jika satu nilai benar  | 
|  `NOT`  |  `NOT`ekspresi  |  `TRUE`jika ekspresi salah, dan `FALSE` jika ekspresi benar  | 
|  `IN`  |  `IN`ekspresi x  |  `TRUE`jika nilai dalam ekspresi  | 
|  `BETWEEN`  |  `BETWEEN`a `AND` b  |  `TRUE`jika nilai antara batas atas dan bawah, dan mencakup kedua batas  | 
|  `LIKE`  |  `LIKE`pola  |  `TRUE`jika nilainya dalam pola `LIKE`mendukung wildcard. Lihat di bawah untuk contoh: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/sql-supported-logical.html)  | 

Contoh dari semua operator logika:


|  **Fungsi**  |  **Contoh**  | 
| --- | --- | 
|  AND  |  <pre>SELECT a.asset_name <br />   FROM asset AS a, latest_value_time_series AS t <br />   WHERE t.int_value > 30 AND t.event_timestamp > TIMESTAMP '2025-05-15 00:00:01'<br /></pre>  | 
|  OR  |  <pre>SELECT a.asset_name <br />   FROM asset AS a<br />   WHERE a.asset_name like 'abc' OR a.asset_name like 'pqr'<br /></pre>  | 
|  NOT  |  <pre>SELECT ma.asset_id AS a_id<br />   FROM asset AS ma<br />   WHERE (ma.asset_id NOT LIKE 'some%patterna%' escape 'a') AND ma.asset_id='abc'<br /></pre>  | 
|  DI DALAM  |  <pre>SELECT a.asset_name <br />   FROM asset AS a<br />   WHERE a.asset_name IN ('abc', 'pqr')<br /></pre>  | 
|  DI ANTARA  |  <pre>SELECT asset_id, int_value, event_timestamp AS i_v <br />   FROM raw_time_series<br />   WHERE event_timestamp BETWEEN TIMESTAMP '2025-04-15 00:00:01' and TIMESTAMP '2025-05-15 00:00:01'  <br /></pre>  | 
|  SUKA  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/sql-supported-logical.html)  | 

# Operator perbandingan
<a name="sql-supported-comparision"></a>

AWS IoT SiteWise mendukung operator perbandingan berikut. Semua operasi perbandingan tersedia untuk tipe data bawaan dan dievaluasi ke boolean.


**Operator logis**  

|  **Operator**  |  **Deskripsi**  | 
| --- | --- | 
|  `<`  |  Kurang dari  | 
|  `>`  |  Lebih besar dari  | 
|  `<=`  |  Kurang dari atau sama dengan  | 
|  `>=`  |  Lebih besar dari atau sama dengan  | 
|  `=`  |  Sama dengan  | 
|  `!=`  |  Tidak sama  | 


**Tabel kebenaran operasi perbandingan untuk nilai non numerik**  

|  **Jenis**  |  **Ketik >= x**  |  **Jenis <= x**  |  **Ketik > x**  |  **Ketik < x**  |  **Jenis = x**  |  **Ketik\$1 = x**  | 
| --- | --- | --- | --- | --- | --- | --- | 
|  `NULL`  |  `FALSE`  |  `FALSE`  |  `FALSE`  |  `FALSE`  |  `FALSE`  |  `TRUE`  | 

Beberapa predikat berperilaku seperti operator tetapi memiliki sintaks khusus. Lihat di bawah ini:


**Predikat perbandingan**  

|  **Operator**  |  **Deskripsi**  | 
| --- | --- | 
|  `IS NULL`  |  Menguji apakah suatu nilai adalah`NULL`.  | 
|  `IS NOT NULL`  |  Menguji jika suatu nilai tidak`NULL`.  | 

## Operator NaN
<a name="sql-supported-comparision-nan"></a>

 `NaN`, atau 'Not a Number', adalah nilai khusus dalam aritmatika floating-point. Berikut adalah daftar `NaN` perbandingan dan cara kerjanya. 
+ `NaN`nilai harus diapit dalam tanda kutip tunggal. Misalnya, '`NaN`'.
+ `NaN`nilai dianggap sama satu sama lain.
+ `NaN`lebih besar dari nilai numerik lainnya.
+ Dalam fungsi agregat seperti`AVG()`,`STDDEV()`, dan`SUM()`, jika ada nilai`NaN`, hasilnya adalah`NaN`. 
+ Dalam fungsi agregat seperti `MAX()` dan`MIN()`, `NaN` nilai termasuk dalam perhitungan.


**NaN perbandingan nilai**  

|  **Perbandingan**  |  **Hasil**  | 
| --- | --- | 
|  `'NaN' ≥ x`  |  True  | 
|  `'NaN' ≤ x`  |  Benar jika x sama dengan NaN, False sebaliknya  | 
|  `'NaN' > x`  |  Salah jika x sama dengan NaN, Benar sebaliknya  | 
|  `'NaN' < x`  |  False  | 
|  `'NaN' = x`  |  Benar jika x sama dengan NaN, False sebaliknya  | 
|  `'NaN' != x`  |  Salah jika x sama dengan NaN, Benar sebaliknya  | 

# Fungsi SQL
<a name="sql-functions"></a>

 Grup fungsi yang didukung adalah: 

**Topics**
+ [Fungsi skalar](sql-functions-scalar.md)
+ [Fungsi agregat](sql-functions-aggregated.md)

# Fungsi skalar
<a name="sql-functions-scalar"></a>

 Fungsi skalar mengambil satu atau lebih nilai input dan mengembalikan nilai output tunggal. Mereka banyak digunakan dalam SQL (Structured Query Language) untuk manipulasi dan pengambilan data, meningkatkan efisiensi tugas pemrosesan data. 

**Topics**
+ [Fungsi data nol](sql-functions-null.md)
+ [Fungsi string](sql-functions-string.md)
+ [Fungsi matematika](sql-functions-math.md)
+ [Fungsi waktu tanggal](sql-functions-date.md)
+ [Jenis fungsi konversi](sql-functions-type-conv.md)

# Fungsi data nol
<a name="sql-functions-null"></a>

 Fungsi data nol menangani atau memanipulasi nilai NULL, yang mewakili tidak adanya nilai. Fungsi memungkinkan Anda untuk mengganti NULLs dengan nilai lain, memeriksa apakah nilai adalah NULL, atau melakukan operasi yang menangani dengan NULLs cara tertentu. 


|  **Fungsi**  |  **Tanda tangan**  |  **Deskripsi**  | 
| --- | --- | --- | 
|  `COALESCE`  |   COALESCE (ekspresi1, ekspresi2,..., ExpressionN)   |  Jika semua ekspresi mengevaluasi ke null, COALESCE mengembalikan null. Ekspresi harus dari jenis yang sama.  | 

**Example dari fungsi COALESCE**  

```
SELECT COALESCE (l.double_value, 100) AS non_double_value FROM latest_value_time_series AS l LIMIT 1
```

# Fungsi string
<a name="sql-functions-string"></a>

 Fungsi string adalah alat bawaan yang digunakan untuk memanipulasi dan memproses data teks. Mereka memungkinkan tugas-tugas seperti penggabungan, ekstraksi, pemformatan, dan pencarian dalam string. Fungsi-fungsi ini sangat penting untuk membersihkan, mengubah, dan menganalisis data berbasis teks dalam database. 


**Fungsi string**  

|  **Fungsi**  |  **Tanda tangan**  |  **Deskripsi**  | 
| --- | --- | --- | 
|  `LENGTH`  |   PANJANG (string)   |  Mengembalikan panjang string.  | 
|  `CONCAT`  |   CONCAT (string, string)   |  Menggabungkan argumen dalam string.  | 
|  `SUBSTR`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/sql-functions-string.html)  |  Mengembalikan salah satu dari berikut ini: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/sql-functions-string.html) Menggunakan pengindeksan berbasis 1 untuk parameter awal.  | 
|  `UPPER`  |   ATAS (string)   |  Mengkonversi karakter dalam string input ke huruf besar.  | 
|  `LOWER`  |   LEBIH RENDAH (string)   |  Mengkonversi karakter dalam string input ke huruf kecil.  | 
|  `TRIM`  |   TRIM (string)   |  Menghapus karakter spasi dari awal, akhir, atau kedua sisi string.  | 
|  `LTRIM`  |   LTRIM (string)   |  Menghapus karakter spasi apa pun dari awal string.  | 
|  `RTRIM`  |   RTRIM (string)   |  Menghapus karakter spasi apa pun dari akhir string.  | 
|  `STR_REPLACE`  |   STR\$1REPLACE (string, dari, ke)   |  Mengganti semua kemunculan substring yang ditentukan dengan substring lain yang ditentukan.  | 

Contoh dari semua fungsi:


|  **Fungsi**  |  **Contoh**  | 
| --- | --- | 
|  PANJANGNYA  |  `SELECT LENGTH(a.asset_id) AS asset_id_length FROM asset AS a`  | 
|  CONCAT  |   `SELECT CONCAT(p.property_id, p.property_name) FROM asset_property AS p`   | 
|  SUBSTR  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/sql-functions-string.html)  | 
|  ATAS  |   `SELECT UPPER(d.string_value) AS up_string FROM raw_time_series AS d`   | 
|  LEBIH RENDAH  |   `SELECT LOWER(d.string_value) AS low_string FROM raw_time_series AS d`   | 
|  MEMANGKAS  |   `SELECT TRIM(d.string_value) AS tm_string FROM raw_time_series AS d`   | 
|  LTRIM  |   `SELECT LTRIM(d.string_value) AS ltrim_string FROM raw_time_series AS d`   | 
|  RTRIM  |   `SELECT RTRIM(d.string_value) AS rtrim_string FROM raw_time_series AS d`   | 
|  STR\$1GANTI  |   `SELECT STR_REPLACE(d.string_value, 'abc', 'def') AS replaced_string FROM raw_time_series AS d`   | 

## Operator penggabungan
<a name="sql-operators-concatenation"></a>

 Operator penggabungan`||`, atau operator pipa, menggabungkan dua string bersama-sama. Ini memberikan alternatif untuk `CONCAT` fungsi, dan lebih mudah dibaca ketika menggabungkan beberapa string.

**Example dari operator penggabungan**  

```
SELECT a.asset_name || ' - ' || p.property_name 
  AS full_name
  FROM asset a, asset_property p
```

# Fungsi matematika
<a name="sql-functions-math"></a>

 Fungsi matematika adalah operasi matematika yang telah ditentukan sebelumnya yang digunakan dalam kueri SQL untuk melakukan perhitungan pada data numerik. Mereka menyediakan cara untuk memanipulasi dan mengubah data tanpa perlu mengekstraknya dari database dan memprosesnya secara terpisah. 


**Fungsi matematika**  

|  **Fungsi**  |  **Tanda tangan**  |  **Deskripsi**  | 
| --- | --- | --- | 
|  `POWER`  |  POWER (int\$1ganda, int\$1ganda)  |  Mengembalikan nilai argumen pertama diangkat ke kekuatan argumen kedua.  | 
|  `ROUND`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/sql-functions-math.html)  |  Membulatkan ke bilangan bulat terdekat.  | 
|  `FLOOR`  |   LANTAI (int\$1ganda)   |  Mengembalikan bilangan bulat terbesar tidak lebih besar dari nilai yang diberikan.  | 

Contoh dari semua fungsi:


|  **Fungsi**  |  **Contoh**  | 
| --- | --- | 
|  DAYA  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/sql-functions-math.html)  | 
|  BULAT  |   `ROUND (32.12435, 3)`   | 
|  FLOOR  |   `FLOOR (21.2)`   | 

# Fungsi waktu tanggal
<a name="sql-functions-date"></a>

 Fungsi waktu tanggal bekerja dengan tanggal dan waktu. Fungsi-fungsi ini memungkinkan ekstraksi komponen tertentu dari suatu tanggal, melakukan perhitungan, dan memanipulasi nilai tanggal.

Pengidentifikasi yang diizinkan dalam fungsi-fungsi ini adalah:
+ YEAR
+ MONTH
+ DAY
+ HOUR
+ MINUTE
+ DETIK


|  **Fungsi**  |  **Tanda tangan**  |  **Deskripsi**  | 
| --- | --- | --- | 
|  `NOW`  |   SEKARANG ()   |  Mengembalikan stempel waktu saat ini dengan presisi milidetik. Ini memberikan waktu yang tepat pada saat itu dijalankan dalam kueri.  | 
|  `DATE_ADD`  |  DATE\$1ADD (pengidentifikasi, interval\$1duration, kolom)  |  Mengembalikan jumlah dari a date/time dan sejumlah days/hours, or of a date/time and date/time interval.  | 
|  `DATE_SUB`  |  DATE\$1SUB (pengidentifikasi, interval\$1duration, kolom)  |  Mengembalikan perbedaan antara a date/time dan sejumlah days/hours, or between a date/time and date/time interval.  | 
|  `TIMESTAMP_ADD`  |  TIMESTAMP\$1ADD (pengidentifikasi, interval\$1duration, kolom)  |  Menambahkan interval waktu, dalam satuan waktu yang diberikan, ke ekspresi datetime.  | 
|  `TIMESTAMP_SUB`  |  TIMESTAMP\$1SUB (pengidentifikasi, interval\$1duration, kolom)  |  Mengurangi interval waktu, dalam satuan waktu yang diberikan, dari ekspresi datetime.  | 
|  `CAST`  |  CAST (ekspresi sebagai pola FORMAT TIMESTAMP)  |  Mengkonversi ekspresi string ke stempel waktu menggunakan pola format yang ditentukan. Pola umum termasuk `'yyyy-MM-dd HH:mm:ss'` untuk format datetime standar. Sebagai contoh, `SELECT CAST('2023-12-25 14:30:00' AS TIMESTAMP) AS converted_timestamp`.  | 

**Example dari query SQL menggunakan fungsi yang terdaftar:**  

```
SELECT r.asset_id, r.int_value,
  date_add(DAY, 7, r.event_timestamp) AS date_in_future,
  date_sub(YEAR, 2, r.event_timestamp) AS date_in_past,
  timestamp_add(DAY, 2, r.event_timestamp) AS timestamp_in_future,
  timestamp_sub(DAY, 2, r.event_timestamp) AS timestamp_in_past,
  now() AS time_now
FROM raw_time_series AS r
```

# Jenis fungsi konversi
<a name="sql-functions-type-conv"></a>

 Fungsi konversi tipe digunakan untuk mengubah tipe data dari nilai dari satu ke yang lain. Mereka sangat penting untuk memastikan kompatibilitas data dan melakukan operasi yang memerlukan data dalam format tertentu. 


|  **Fungsi**  |  **Tanda tangan**  |  **Deskripsi**  | 
| --- | --- | --- | 
|  `TO_DATE`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/sql-functions-type-conv.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/sql-functions-type-conv.html)  | 
|  `TO_TIMESTAMP`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/sql-functions-type-conv.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/sql-functions-type-conv.html)  | 
|  `TO_TIME`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/sql-functions-type-conv.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/sql-functions-type-conv.html)  | 
|  `CAST`  |  PEMERAN (<expression>AS<data type>)  |  Mengkonversi entitas, atau ekspresi yang mengevaluasi ke nilai tunggal, dari satu jenis ke jenis lainnya. Tipe data yang didukung adalah: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/sql-functions-type-conv.html)  | 

**Example dari query SQL menggunakan fungsi yang terdaftar:**  

```
SELECT TO_TIMESTAMP (100) AS timestamp_value,
  TO_DATE(r.event_timestamp) AS date_value,
  TO_TIME(r.event_timestamp) AS time_value
FROM raw_time_series AS r
```

# Fungsi agregat
<a name="sql-functions-aggregated"></a>

 Fungsi agregat adalah operasi database yang melakukan perhitungan di beberapa baris data untuk menghasilkan hasil ringkasan tunggal. Fungsi-fungsi ini menganalisis kumpulan data untuk mengembalikan nilai yang dihitung seperti jumlah, rata-rata, hitungan, atau ukuran statistik lainnya. 


|  **Fungsi**  |  **Tanda tangan**  |  **Deskripsi**  | 
| --- | --- | --- | 
|  `AVG`  |  AVG (ekspresi)  |  Mengembalikan rata-rata ekspresi numerik.  | 
|  `COUNT`  |  COUNT (ekspresi)  |  Mengembalikan jumlah baris yang cocok dengan kriteria yang diberikan.  | 
|  `MAX`  |  MAX (ekspresi)  |  Mengembalikan nilai terbesar dari ekspresi yang dipilih.  | 
|  `MIN`  |  MIN (ekspresi)  |  Mengembalikan nilai terkecil dari ekspresi yang dipilih.  | 
|  `SUM`  |  SUM (ekspresi)  |  Mengembalikan jumlah ekspresi numerik.  | 
|  `STDDEV`  |  STDDEV (ekspresi)  |  Mengembalikan standar deviasi sampel.  | 
|  `GROUP BY`  |  KELOMPOK DENGAN ekspresi  |  Mengembalikan baris yang dibuat oleh kolom pengelompokan.  | 
|  `HAVING`  |  MEMILIKI ekspresi boolean  |  Mengembalikan baris grup disaring oleh `GROUP BY` klausa.  | 

Contoh dari semua fungsi:


|  **Fungsi**  |  **Contoh**  | 
| --- | --- | 
|  AVG  |  <pre>SELECT d.asset_id, d.property_id, AVG(d.int_value) FROM raw_time_series AS d</pre>  | 
|  COUNT  |  <pre>SELECT COUNT(d.int_value) FROM raw_time_series AS d</pre>  | 
|  MAX  |  <pre>SELECT MAX(d.int_value) FROM raw_time_series AS d</pre>  | 
|  MIN  |  <pre>SELECT MIN(d.int_value) FROM raw_time_series AS d</pre>  | 
|  JUMLAH  |  <pre>SELECT SUM(d.int_value) FROM raw_time_series AS d</pre>  | 
|  STDDEV  |  <pre>SELECT STDDEV(d.int_value) FROM raw_time_series AS d</pre>  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/sql-functions-aggregated.html)  |  <pre>SELECT MAX(d.int_value) AS max_int_value, d.asset_id <br />FROM raw_time_series AS d <br />GROUP BY d.asset_id <br />HAVING MAX(d.int_value) > 5                      <br /></pre>  | 

# Kueri contoh
<a name="sql-examples"></a>

## Pemfilteran metadata
<a name="sql-examples-meta-filter"></a>

Contoh berikut adalah untuk pemfilteran metadata dengan `SELECT` pernyataan dengan bahasa query: AWS IoT SiteWise 

```
SELECT a.asset_name, p.property_name
FROM asset a, asset_property p
WHERE a.asset_name LIKE 'Windmill%'
```

## Penyaringan nilai
<a name="sql-examples-value-filter"></a>

Berikut ini adalah contoh pemfilteran nilai menggunakan `SELECT` pernyataan dengan bahasa AWS IoT SiteWise query:

```
SELECT a.asset_name, r.int_value
FROM asset a, raw_time_series r
WHERE r.int_value > 30
AND r.event_timestamp > TIMESTAMP '2022-01-05 12:15:00'
AND r.event_timestamp < TIMESTAMP '2022-01-05 12:20:00'
```

# Pengoptimalan kueri
<a name="query-optimize"></a>

## Filter metadata
<a name="metadata-filters"></a>

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 (\$1 =)
+ 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\$1value\$1time\$1series** 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')
```

**Example 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
<a name="raw-data-filters"></a>

**Semua tabel data mentah (**raw\$1time\$1series, latest\$1value\$1time\$1series, precomputed\$1aggregates****) 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\$1aggregates**, 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\$1aggregates.** 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 `WHERE` klausa untuk memfilter jumlah data yang dipindai. Misalnya, kueri berikut hanya memindai 30 menit terakhir data dari tabel **raw\$1time\$1series**: 

  ```
  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\$1value, double\$1value, dll.) Juga tidak membatasi pemindaian data mentah.

## Gabung optimasi
<a name="join-optimization"></a>

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\$1property | terbaru\$1value\$1time\$1series | raw\$1time\$1seri | precomputed\$1aggregates | subkueri | 
| --- | --- | --- | --- | --- | --- | --- | 
| aset | X | O | O | O | O | X | 
| aset\$1property | O | X | O | O | O | X | 
| terbaru\$1value\$1time\$1series | O | O | X | X | X | X | 
| raw\$1time\$1seri | O | O | X | X | X | X | 
| precomputed\$1aggregates | 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
<a name="large-queries"></a>

Untuk kueri yang menghasilkan lebih banyak baris daripada default, atur ukuran halaman [ExecuteQuery](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_ExecuteQuery.html)API 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. 

# ODBC
<a name="query-ODBC"></a>

[Driver ODBC](https://github.com/awslabs/aws-iotsitewise-odbc-driver) open-source untuk AWS IoT SiteWise menyediakan antarmuka relasional SQL AWS IoT SiteWise untuk pengembang dan memungkinkan konektivitas dari alat intelijen bisnis (BI) seperti Power BI Desktop dan Microsoft Excel. Driver AWS IoT SiteWise ODBC saat ini tersedia di [Windows](https://github.com/awslabs/aws-iotsitewise-odbc-driver/releases), dan mendukung SSO dengan Okta dan Microsoft Azure Active Directory (AD).

Untuk informasi selengkapnya, lihat [dokumentasi driver AWS IoT SiteWise ODBC di GitHub](https://github.com/awslabs/aws-iotsitewise-odbc-driver/blob/main/docs/markdown/index.md).

**Topics**
+ [Sintaks string koneksi dan opsi untuk driver ODBC](query-ODBC-connecting.md)
+ [Contoh string koneksi untuk driver AWS IoT SiteWise ODBC](query-ODBC-connecting-examples.md)
+ [Memecahkan masalah koneksi dengan driver ODBC](query-ODBC-connecting-troubleshooting.md)

# Sintaks string koneksi dan opsi untuk driver ODBC
<a name="query-ODBC-connecting"></a>

Sintaks untuk menentukan opsi koneksi-string untuk driver ODBC adalah sebagai berikut:

```
Driver={AWS IoT SiteWise ODBC Driver};(option)=(value);
```

Opsi yang tersedia adalah sebagai berikut:

**Opsi koneksi driver**
+ **`Driver`***(wajib)* — Pengemudi yang digunakan dengan ODBC.

  Defaultnya adalah AWS IoT SiteWise.
+ **`DSN`**— Nama sumber data (DSN) yang digunakan untuk mengkonfigurasi koneksi.

  Nilai default-nya `NONE`.
+ **`Auth`**— Mode otentikasi. Ini harus salah satu dari yang berikut:
  + `AWS_PROFILE`— Gunakan rantai kredensi default.
  + `IAM`— Gunakan kredensi AWS IAM.
  + `AAD`— Gunakan penyedia identitas Azure Active Directory (AD).
  + `OKTA`— Gunakan penyedia identitas Okta.

  Nilai default-nya `AWS_PROFILE`.

**Opsi konfigurasi titik akhir**
+ **`EndpointOverride`**— Pengesampingan titik akhir untuk layanan. AWS IoT SiteWise Ini adalah opsi lanjutan yang mengesampingkan wilayah. Contoh:

  ```
  iotsitewise.us-east-1.amazonaws.com
  ```
+ **`Region`**— Wilayah penandatanganan untuk titik akhir AWS IoT SiteWise layanan.

  Nilai default-nya `us-east-1`.

**Opsi penyedia kredensil**
+ **`ProfileName`**— Nama profil dalam file AWS konfigurasi.

  Nilai default-nya `NONE`.

**AWS Opsi otentikasi IAM**
+ **`UID`**atau **`AccessKeyId`**— Id kunci akses AWS pengguna. Jika keduanya `UID` dan `AccessKeyId` disediakan dalam string koneksi, `UID` nilainya akan digunakan kecuali kosong.

  Nilai default-nya `NONE`.
+ **`PWD`**atau **`SecretKey`**— Kunci akses rahasia pengguna AWS. Jika keduanya `PWD` dan `SecretKey` disediakan dalam string koneksi, `PWD` nilai dengan akan digunakan kecuali kosong.

  Nilai default-nya `NONE`.
+ **`SessionToken`**— Token sesi sementara yang diperlukan untuk mengakses database dengan otentikasi multi-faktor (MFA) diaktifkan. Jangan sertakan trailing ` = ` dalam input.

  Nilai default-nya `NONE`.

**Opsi otentikasi berbasis SAML untuk Okta**
+ **`IdPHost`**— Nama host dari iDP yang ditentukan.

  Nilai default-nya `NONE`.
+ **`UID`**atau **`IdPUserName`**— Nama pengguna untuk akun iDP yang ditentukan. Jika keduanya `UID` dan `IdPUserName` disediakan dalam string koneksi, `UID` nilainya akan digunakan kecuali kosong.

  Nilai default-nya `NONE`.
+ **`PWD`**atau **`IdPPassword`**— Kata sandi untuk akun iDP yang ditentukan. Jika keduanya `PWD` dan `IdPPassword` disediakan dalam string koneksi, `PWD` nilainya akan digunakan kecuali kosong.

  Nilai default-nya `NONE`.
+ **`OktaApplicationID`**— ID unik yang disediakan OKTA yang terkait dengan aplikasi. AWS IoT SiteWise Tempat untuk menemukan ID aplikasi (AppId) ada di `entityID` bidang yang disediakan dalam metadata aplikasi. Contohnya adalah:

  ```
  entityID="http://www.okta.com//(IdPAppID)
  ```

  Nilai default-nya `NONE`.
+ **`RoleARN`**— Nama Sumber Daya Amazon (ARN) dari peran yang diasumsikan oleh penelepon.

  Nilai default-nya `NONE`.
+ **`IdPARN`**— Nama Sumber Daya Amazon (ARN) dari penyedia SAMP di IAM yang menggambarkan IDP.

  Nilai default-nya `NONE`.

**Opsi otentikasi berbasis SAMP untuk Azure Active Directory**
+ **`UID`**atau **`IdPUserName`**— Nama pengguna untuk akun iDP yang ditentukan..

  Nilai default-nya `NONE`.
+ **`PWD`**atau **`IdPPassword`**— Kata sandi untuk akun iDP yang ditentukan.

  Nilai default-nya `NONE`.
+ **`AADApplicationID`**— Id unik dari aplikasi terdaftar di Azure AD.

  Nilai default-nya `NONE`.
+ **`AADClientSecret`**— Rahasia klien yang terkait dengan aplikasi terdaftar di Azure AD digunakan untuk mengotorisasi pengambilan token.

  Nilai default-nya `NONE`.
+ **`AADTenant`**— ID Penyewa Azure AD.

  Nilai default-nya `NONE`.
+ **`RoleARN`**— Nama Sumber Daya Amazon (ARN) dari peran yang diasumsikan oleh penelepon.

  Nilai default-nya `NONE`.
+ **`IdPARN`**— Nama Sumber Daya Amazon (ARN) dari penyedia SAMP di IAM yang menggambarkan IDP.

  Nilai default-nya `NONE`.

**AWS Opsi SDK (lanjutan)**
+ **`RequestTimeout`**— Waktu dalam milidetik AWS SDK menunggu permintaan kueri sebelum waktu habis. Setiap nilai non-positif menonaktifkan batas waktu permintaan.

  Nilai default-nya `3000`.
+ **`ConnectionTimeout`**— Waktu dalam milidetik AWS SDK menunggu data ditransfer melalui koneksi terbuka sebelum waktu habis. Nilai 0 menonaktifkan batas waktu koneksi. Nilai ini tidak boleh negatif.

  Nilai default-nya `1000`.
+ **`MaxRetryCountClient`**— Jumlah maksimum percobaan ulang untuk kesalahan yang dapat dicoba ulang dengan kode kesalahan 5xx di SDK. Nilainya tidak boleh negatif.

  Nilai default-nya `0`.
+ **`MaxConnections`**— Jumlah maksimum koneksi HTTP yang diizinkan secara bersamaan terbuka ke AWS IoT SiteWise layanan. Nilainya harus positif.

  Nilai default-nya `25`.

**Opsi pencatatan driver ODBC**
+ **`LogLevel`**— Tingkat log untuk logging driver. Harus menjadi salah satu dari:
  + **0** (MATI).
  + **1** (KESALAHAN).
  + **2** (PERINGATAN).
  + **3** (INFO).
  + **4** (DEBUG).

  Defaultnya adalah `1` (ERROR).

  **Peringatan:** informasi pribadi dapat dicatat oleh pengemudi saat menggunakan mode logging DEBUG.
+ **`LogOutput`**— Folder tempat menyimpan file log.

  Defaultnya adalah:
  + **Windows:**`%USERPROFILE%`, atau jika tidak tersedia,`%HOMEDRIVE%%HOMEPATH%`.
  + **macOS dan Linux:**`$HOME`, atau jika tidak tersedia, bidang `pw_dir` dari fungsi `getpwuid(getuid())` mengembalikan nilai.

**Opsi pencatatan SDK**

Level log AWS SDK terpisah dari level log driver AWS IoT SiteWise ODBC. Pengaturan yang satu tidak mempengaruhi yang lain.

Tingkat Log SDK diatur menggunakan variabel `SW_AWS_LOG_LEVEL` lingkungan. Nilai yang valid adalah:
+ `OFF`
+ `ERROR`
+ `WARN`
+ `INFO`
+ `DEBUG`
+ `TRACE`
+ `FATAL`

Jika tidak `SW_AWS_LOG_LEVEL` disetel, tingkat log SDK diatur ke default, yaitu`WARN`.

## Menghubungkan melalui proxy
<a name="query-ODBC-connecting-proxy"></a>

Driver ODBC mendukung koneksi ke AWS IoT SiteWise melalui proxy. Untuk menggunakan fitur ini, konfigurasikan variabel lingkungan berikut berdasarkan setelan proxy Anda:
+ **`SW_PROXY_HOST`**— host proxy.
+ **`SW_PROXY_PORT`**— Nomor port proxy.
+ **`SW_PROXY_SCHEME`**— Skema proxy, baik `http` atau`https`.
+ **`SW_PROXY_USER`**— Nama pengguna untuk otentikasi proxy.
+ **`SW_PROXY_PASSWORD`**— Kata sandi pengguna untuk otentikasi proxy.
+ **`SW_PROXY_SSL_CERT_PATH`**— File Sertifikat SSL yang digunakan untuk menghubungkan ke proxy HTTPS.
+ **`SW_PROXY_SSL_CERT_TYPE`**— Jenis sertifikat SSL klien proxy.
+ **`SW_PROXY_SSL_KEY_PATH`**— File kunci pribadi yang digunakan untuk menghubungkan ke proxy HTTPS.
+ **`SW_PROXY_SSL_KEY_TYPE`**— Jenis file kunci pribadi yang digunakan untuk terhubung ke proxy HTTPS.
+ **`SW_PROXY_SSL_KEY_PASSWORD`**— Frasa sandi ke file kunci pribadi yang digunakan untuk terhubung ke proxy HTTPS.

# Contoh string koneksi untuk driver AWS IoT SiteWise ODBC
<a name="query-ODBC-connecting-examples"></a>

## Contoh menghubungkan ke driver ODBC dengan kredensi IAM
<a name="query-ODBC-connecting-examples-iam"></a>

```
Driver={AWS IoT SiteWise ODBC Driver};Auth=IAM;AccessKeyId=(your access key ID);SecretKey=(your secret key);SessionToken=(your session token);Region=us-east-1;
```

## Contoh menghubungkan ke driver ODBC dengan profil
<a name="query-ODBC-connecting-examples-profile"></a>

```
Driver={AWS IoT SiteWise ODBC Driver};ProfileName=(the profile name);region=us-east-1;
```

Pengemudi akan mencoba untuk terhubung menggunakan kredensyal yang disediakan di`~/.aws/credentials`, atau jika file ditentukan dalam variabel lingkungan`AWS_SHARED_CREDENTIALS_FILE`, menggunakan kredensyal dalam file itu.

## Contoh menghubungkan ke driver ODBC dengan Okta
<a name="query-ODBC-connecting-examples-okta"></a>

```
Driver={AWS IoT SiteWise ODBC Driver};Auth=OKTA;region=us-east-1;idPHost=(your host at Okta);idPUsername=(your user name);idPPassword=(your password);OktaApplicationID=(your Okta AppId);roleARN=(your role ARN);idPARN=(your Idp ARN);
```

## Contoh menghubungkan ke driver ODBC dengan Azure Active Directory (AAD)
<a name="query-ODBC-connecting-examples-aad"></a>

```
Driver={AWS IoT SiteWise ODBC Driver};Auth=AAD;region=us-east-1;idPUsername=(your user name);idPPassword=(your password);aadApplicationID=(your AAD AppId);aadClientSecret=(your AAD client secret);aadTenant=(your AAD tenant);roleARN=(your role ARN);idPARN=(your idP ARN);
```

## Contoh menghubungkan ke driver ODBC dengan titik akhir yang ditentukan dan level log 2 (PERINGATAN)
<a name="query-ODBC-connecting-examples-okta"></a>

```
Driver={AWS IoT SiteWise ODBC Driver};Auth=IAM;AccessKeyId=(your access key ID);SecretKey=(your secret key);EndpointOverride=iotsitewise.us-east-1.amazonaws.com;Region=us-east-1;LogLevel=2;
```

# Memecahkan masalah koneksi dengan driver ODBC
<a name="query-ODBC-connecting-troubleshooting"></a>

**catatan**  
Jika nama pengguna dan kata sandi sudah ditentukan dalam DSN, jangan tentukan lagi ketika manajer driver ODBC memintanya.

Kode kesalahan `01S02` dengan pesan, `Re-writing (connection string option) (have you specified it several times?)` terjadi ketika opsi string koneksi dilewatkan lebih dari sekali dalam string koneksi. Menentukan opsi lebih dari sekali menimbulkan kesalahan. Saat membuat koneksi dengan DSN dan string koneksi, jika opsi koneksi sudah ditentukan dalam DSN, jangan tentukan lagi dalam string koneksi.