

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 에서 데이터 쿼리 AWS IoT SiteWise
<a name="query-industrial-data"></a>

 AWS IoT SiteWise API 작업을 사용하여 특정 시간 간격 동안 자산 속성의 현재 값, 기록 값 및 집계를 쿼리할 수 있습니다.는 다양한 통합 요구 사항을 충족하기 위해 여러 쿼리 인터페이스를 AWS IoT SiteWise 제공합니다.
+ **직접 API 작업** - 특정 데이터 검색 요구 사항에 대한 간단한 대상 API 직접 호출
+ **SQL과 유사한 쿼리 언어 -** 복잡한 데이터 분석을 위한 강력하고 유연한 쿼리
+ **ODBC 드라이버** - 비즈니스 인텔리전스 도구 및 애플리케이션과의 통합

다음과 같은 쿼리 기능을 사용합니다.
+ 운영 데이터에 대한 실시간 인사이트 확보
+ 과거 추세 및 패턴 분석
+ 산업 자산 전반의 성능 지표 계산
+ IoT 데이터를 엔터프라이즈 시스템 및 대시보드와 통합
+ 산업 데이터를 활용하는 사용자 지정 애플리케이션 구축

예를 들어 특정 속성 값을 가진 모든 자산을 검색하거나, 데이터의 사용자 지정 표현을 구축하거나, AWS IoT SiteWise 자산에 저장된 산업 데이터와 통합되는 소프트웨어 솔루션을 개발할 수 있습니다. AWS IoT SiteWise Monitor에서 라이브 자산 데이터를 탐색할 수도 있습니다. SiteWise Monitor를 구성하는 방법에 대해 자세히 알아보려면 [를 사용하여 데이터 모니터링 AWS IoT SiteWise Monitor](monitor-data.md) 섹션을 참조하세요.

이 섹션에 설명된 작업은 타임스탬프, 품질, 값(TQV) 구조를 포함하는 속성 값 객체를 반환합니다.
+ `timestamp`는 현재 Unix epoch 시간(초)과 오프셋(나노초)을 포함합니다.
+ `quality`는 데이터 요소의 품질을 나타내는 다음 문자열 중 하나를 포함합니다.
  + `GOOD` – 데이터가 어떤 문제의 영향도 받지 않습니다.
  + `BAD` – 데이터가 센서 고장과 같은 문제의 영향을 받습니다.
  + `UNCERTAIN` – 데이터가 센서 부정확과 같은 문제의 영향을 받습니다.
+ `value`는 속성 유형에 따라 다음 필드 중 하나를 포함합니다.
  + `booleanValue`
  + `doubleValue`
  + `integerValue`
  + `stringValue`
  + `nullValue`

**Topics**
+ [에서 현재 자산 속성 값 쿼리 AWS IoT SiteWise](current-values.md)
+ [에서 과거 자산 속성 값 쿼리 AWS IoT SiteWise](historical-values.md)
+ [에서 자산 속성 집계 쿼리 AWS IoT SiteWise](aggregates.md)
+ [AWS IoT SiteWise 쿼리 언어](sql.md)
+ [쿼리 최적화](query-optimize.md)
+ [ODBC](query-ODBC.md)

# 에서 현재 자산 속성 값 쿼리 AWS IoT SiteWise
<a name="current-values"></a>

이 자습서에서는 자산 속성의 현재 값을 가져오는 두 가지 방법을 보여줍니다. AWS IoT SiteWise 콘솔을 사용하거나 AWS Command Line Interface ()에서 API를 사용할 수 있습니다AWS CLI.

**Topics**
+ [자산 속성의 현재 값 쿼리(콘솔)](#query-current-value-console)
+ [자산 속성의 현재 값 쿼리(AWS CLI)](#query-current-value-cli)

## 자산 속성의 현재 값 쿼리(콘솔)
<a name="query-current-value-console"></a>

 AWS IoT SiteWise 콘솔을 사용하여 자산 속성의 현재 값을 볼 수 있습니다.

**자산 속성의 현재 값을 가져오려면(콘솔)**

1. <a name="sitewise-open-console"></a>[AWS IoT SiteWise 콘솔](https://console.aws.amazon.com/iotsitewise/)로 이동합니다.

1. <a name="sitewise-choose-assets"></a>탐색 창에서 **자산**을 선택합니다.

1. 쿼리할 속성이 있는 자산을 선택합니다.

1. 화살표 아이콘을 선택하여 자산 계층 구조를 확장하고 자산을 찾습니다.

1. 속성 유형에 대한 탭을 선택합니다. 예를 들어 측정 속성의 현재 값을 보려면 **측정**을 선택합니다.

1. 보려는 속성을 찾습니다. 현재 값이 **최신 값** 열에 나타납니다.

## 자산 속성의 현재 값 쿼리(AWS CLI)
<a name="query-current-value-cli"></a>

 AWS Command Line Interface (AWS CLI)를 사용하여 자산 속성의 현재 값을 쿼리할 수 있습니다.

[GetAssetPropertyValue](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_GetAssetPropertyValue.html) 작업을 사용하여 자산 속성의 현재 값을 쿼리합니다.

자산 속성을 식별하려면 다음 중 하나를 지정합니다.
+ 데이터를 보낼 자산 속성의 `assetId` 및 `propertyId`
+ 데이터 스트림 별칭(예: `/company/windfarm/3/turbine/7/temperature`)인 `propertyAlias`. 이 옵션을 사용하려면 먼저 자산 속성의 별칭을 설정해야 합니다. 속성 별칭을 설정하려면 [에 대한 데이터 스트림 관리 AWS IoT SiteWise](manage-data-streams.md) 섹션을 참조하세요.

**자산 속성의 현재 값을 가져오려면(AWS CLI)**
+ 다음 명령을 실행하여 자산 속성의 현재 값을 가져옵니다. *asset-id*를 자산의 ID로 바꾸고 *property-id*를 속성의 ID로 바꿉니다.

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

  이 작업은 다음 형식으로 속성의 현재 TQV를 포함하는 응답을 반환합니다.

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

# 에서 과거 자산 속성 값 쿼리 AWS IoT SiteWise
<a name="historical-values"></a>

 AWS IoT SiteWise API [GetAssetPropertyValueHistory](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_GetAssetPropertyValueHistory.html) 작업을 사용하여 자산 속성의 기록 값을 쿼리할 수 있습니다.

자산 속성을 식별하려면 다음 중 하나를 지정합니다.
+ 데이터를 보낼 자산 속성의 `assetId` 및 `propertyId`
+ 데이터 스트림 별칭(예: `/company/windfarm/3/turbine/7/temperature`)인 `propertyAlias`. 이 옵션을 사용하려면 먼저 자산 속성의 별칭을 설정해야 합니다. 속성 별칭을 설정하려면 [에 대한 데이터 스트림 관리 AWS IoT SiteWise](manage-data-streams.md) 섹션을 참조하세요.

다음 파라미터를 전달하여 결과를 구체화할 수도 있습니다.
+ `startDate` – Unix Epoch 시간(초)으로 표시되며 과거 데이터를 쿼리하기 시작할 범위의 시작(제외)입니다.
+ `endDate` – Unix Epoch 시간(초)으로 표시되며 과거 데이터를 쿼리하기 시작할 범위의 끝(포함)입니다.
+ `maxResults` – 하나의 요청에서 반환할 최대 결과 수입니다. 기본값은 `20`개의 결과입니다.
+ `nextToken` – 이 작업의 이전 호출에서 반환된 페이지 매김 토큰입니다.
+ `timeOrdering` – 반환된 값에 적용할 정렬은 `ASCENDING` 또는 `DESCENDING` 입니다.
+ `qualities` – 결과 필터링 기준이 되는 품질은 `GOOD`, `BAD`, 또는 `UNCERTAIN`입니다.

**자산 속성에 대한 값 기록을 쿼리하려면(AWS CLI) 다음을 수행하세요.**

1. 다음 명령을 실행하여 자산 속성에 대한 값 기록을 가져옵니다. 이 명령은 특정한 10분 간격 동안 속성의 기록을 쿼리합니다. *asset-id*를 자산의 ID로 바꾸고 *property-id*를 속성의 ID로 바꿉니다. 날짜 매개 변수를 쿼리할 간격으로 바꿉니다.

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

   이 작업은 다음 형식으로 속성의 기록 TQV를 포함하는 응답을 반환합니다.

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

1. 값 항목이 더 있는 경우, `nextToken` 필드의 페이지 매김 토큰을 [GetAssetPropertyValueHistory](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_GetAssetPropertyValueHistory.html)에 대한 후속 직접 호출에 전달할 수 있습니다.

# 에서 자산 속성 집계 쿼리 AWS IoT SiteWise
<a name="aggregates"></a>

AWS IoT SiteWise 는 여러 시간 간격으로 계산된 기본 지표 집합인 집계된 자산 속성 값을 자동으로 계산합니다.는 자산 속성에 대해 매분, 시간 및 일마다 다음 집계를 AWS IoT SiteWise 계산합니다.
+ **average(평균)** – 시간 간격 동안 속성 값의 평균입니다.
+ **count(개수)** – 일정 기간에 걸친 속성의 데이터 포인트 수입니다.
+ **maximum(최대)** – 시간 간격 동안 속성 값의 최대값입니다.
+ **minimum(최소)** – 시간 간격 동안 속성 값의 최소값입니다.
+ **standard deviation(표준 편차)** – 시간 간격 동안 속성 값의 표준 편차입니다.
+ **sum(합계)** – 시간 간격 동안 속성 값의 합계입니다.

문자열 및 부울과 같은 숫자가 아닌 속성의 경우는 개수 집계만 AWS IoT SiteWise 계산합니다.

자산 데이터에 대한 사용자 지정 지표를 계산할 수도 있습니다. 지표 속성을 사용하여 그 작업에만 해당되는 집계를 정의할 수 있습니다. 지표 속성은 AWS IoT SiteWise API에 대해 사전 계산되지 않은 추가 집계 함수와 시간 간격을 제공합니다. 자세한 내용은 [속성과 기타 자산에서 데이터 집계(지표)](metrics.md) 단원을 참조하십시오.

**Topics**
+ [자산 속성에 대한 집계(API)](#aggregates-api)
+ [자산 속성에 대한 집계를 쿼리하려면(AWS CLI) 다음을 수행하세요.](#aggregates-cli)

## 자산 속성에 대한 집계(API)
<a name="aggregates-api"></a>

 AWS IoT SiteWise API를 사용하여 자산 속성에 대한 집계를 가져옵니다.

[GetAssetPropertyAggregates](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_GetAssetPropertyAggregates.html) 작업을 사용하여 자산 속성의 집계를 쿼리합니다.

자산 속성을 식별하려면 다음 중 하나를 지정합니다.
+ 데이터를 보낼 자산 속성의 `assetId` 및 `propertyId`
+ 데이터 스트림 별칭(예: `/company/windfarm/3/turbine/7/temperature`)인 `propertyAlias`. 이 옵션을 사용하려면 먼저 자산 속성의 별칭을 설정해야 합니다. 속성 별칭을 설정하려면 [에 대한 데이터 스트림 관리 AWS IoT SiteWise](manage-data-streams.md) 섹션을 참조하세요.

다음 필수 파라미터를 전달해야 합니다.
+ `aggregateTypes` – 검색할 집계 목록입니다. `AVERAGE`, `COUNT`, `MAXIMUM`, `MINIMUM`, `STANDARD_DEVIATION`, `SUM` 중 하나를 지정할 수 있습니다.
+ `resolution` - 지표를 검색할 시간 간격: `1m` (1분), `15m` (15분), `1h` (1시간) 또는 `1d` (1일).
+ `startDate` – Unix Epoch 시간(초)으로 표시되며 과거 데이터를 쿼리하기 시작할 범위의 시작(제외)입니다.
+ `endDate` – Unix Epoch 시간(초)으로 표시되며 과거 데이터를 쿼리하기 시작할 범위의 끝(포함)입니다.

다음 파라미터 중 하나를 전달하여 결과를 구체화할 수도 있습니다.
+ `maxResults` – 하나의 요청에서 반환할 최대 결과 수입니다. 기본값은 `20`개의 결과입니다.
+ `nextToken` – 이 작업의 이전 호출에서 반환된 페이지 매김 토큰입니다.
+ `timeOrdering` – 반환된 값에 적용할 정렬은 `ASCENDING` 또는 `DESCENDING` 입니다.
+ `qualities` – 결과 필터링 기준이 되는 품질은 `GOOD`, `BAD`, 또는 `UNCERTAIN`입니다.

**참고**  
[GetAssetPropertyAggregates](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_GetAssetPropertyAggregates.html) 작업은 이 단원에서 설명하는 다른 작업과 다른 형식의 TQV를 반환합니다. `value` 구조에는 요청의 각 `aggregateTypes`에 대한 필드가 포함되어 있습니다. `timestamp`에는 집계가 발생한 Unix 에포크 시간(초)이 포함됩니다.

## 자산 속성에 대한 집계를 쿼리하려면(AWS CLI) 다음을 수행하세요.
<a name="aggregates-cli"></a>

**자산 속성에 대한 집계를 쿼리하려면(AWS CLI) 다음을 수행하세요.**

1. 다음 명령을 실행하여 자산 속성에 대한 집계를 가져옵니다. 이 명령은 특정한 1시간 간격에 대해 1시간 해상도로 평균과 합계를 쿼리합니다. *asset-id*를 자산의 ID로 바꾸고 *property-id*를 속성의 ID로 바꿉니다. 파라미터를 쿼리할 집계 및 간격으로 바꿉니다.

   ```
   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
   ```

   이 작업은 다음 형식으로 속성의 과거 TQV를 포함하는 응답을 반환합니다. 응답에는 요청된 집계만 포함됩니다.

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

1. 값 항목이 더 있는 경우 `nextToken` 필드의 페이지 매김 토큰을 [GetAssetPropertyAggregates](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_GetAssetPropertyAggregates.html)에 대한 후속 직접 호출에 전달할 수 있습니다.

**참고**  
 쿼리 범위에 `null` 값 TQVs. [AssetPropertyValue](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_AssetPropertyValue.html) 개수를 제외한 모든 통계는 문자열 TQVs 대한 통계와 마찬가지로 `null` 응답을 생성합니다. 쿼리 범위에 이중 유형 TQVs에 `Double.NaN` 대한가 포함된 경우 개수를 제외한 모든 계산에서가 생성됩니다`Double.NaN`.

# AWS IoT SiteWise 쿼리 언어
<a name="sql"></a>

 AWS IoT SiteWise 데이터 검색 [ExecuteQuery](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_ExecuteQuery.html) API 작업을 사용하면 다음에서 선언적 구조 정의 및 이와 관련된 시간 데이터에 대한 정보를 검색할 수 있습니다.
+  모델
+ 자산
+ 측정값
+ 지표
+ 변환
+ 집계

이는 쿼리 문과 같은 SQL을 사용하여 단일 API 요청으로 수행할 수 있습니다.

**참고**  
이 기능은를 사용할 수 있는 모든 리전에서 사용할 수 있습니다. 단, AWS GovCloud(미국 서부), 캐나다(중부), 중국(베이징) 및 미국 동부(오하이오)는 예외 AWS IoT SiteWise 입니다.

**Topics**
+ [에 대한 쿼리 언어 참조 AWS IoT SiteWise](query-reference.md)

# 에 대한 쿼리 언어 참조 AWS IoT SiteWise
<a name="query-reference"></a>

 AWS IoT SiteWise 는 데이터 작업을 위한 풍부한 쿼리 언어를 지원합니다. 사용 가능한 데이터 유형, 연산자, 함수 및 구문은 다음 주제에 설명되어 있습니다.

쿼리 언어로 AWS IoT SiteWise 쿼리를 작성[예제 쿼리](sql-examples.md)하려면 섹션을 참조하세요.

**Topics**
+ [쿼리 참조 보기](query-reference-views.md)
+ [지원되는 데이터 유형](supported-data-types.md)
+ [지원 절](supported-clauses.md)
+ [논리 연산자](sql-supported-logical.md)
+ [비교 연산자](sql-supported-comparision.md)
+ [SQL 함수](sql-functions.md)
+ [예제 쿼리](sql-examples.md)

# 쿼리 참조 보기
<a name="query-reference-views"></a>

이 섹션에서는 프로세스 메타데이터 및 원격 측정 데이터와 AWS IoT SiteWise같은의 뷰를 이해하는 데 도움이 되는 정보를 제공합니다.

다음 표에는 뷰의 뷰 이름과 설명이 나와 있습니다.


**데이터 모델**  

|  **뷰 이름**  |  **보기 설명**  | 
| --- | --- | 
|  asset  |  자산 및 모델 파생에 대한 정보를 포함합니다.  | 
|  asset\$1property  |  자산 속성의 구조에 대한 정보를 포함합니다.  | 
|  raw\$1time\$1series  |  시계열의 기록 데이터를 포함합니다.  | 
|  latest\$1value\$1time\$1series  |  시계열의 최신 값을 포함합니다.  | 
|  precomputed\$1aggregates  |  자동으로 계산된 집계된 자산 속성 값을 포함합니다. 여러 시간 간격으로 계산된 기본 지표 세트입니다.  | 

다음 뷰에는 각 뷰의 열 이름과 데이터 유형이 나열되어 있습니다.


**View:asset**  

|  **열 이름**  |  **DataType**  | 
| --- | --- | 
|  asset\$1id  |  문자열  | 
|  asset\$1name  |  문자열  | 
|  asset\$1description  |  문자열  | 
|  asset\$1model\$1id  |  문자열  | 
|  상위\$1자산\$1id  |  문자열  | 
| asset\$1external\$1id | 문자열 | 
| asset\$1model\$1external\$1id | 문자열 | 
| hierarchy\$1id | 문자열 | 


**View:asset\$1property**  

|  **열 이름**  |  **DataType**  | 
| --- | --- | 
|  asset\$1id  |  문자열  | 
|  property\$1id  |  문자열  | 
|  property\$1name  |  문자열  | 
|  property\$1alias  |  문자열  | 
|  속성\$1외부\$1id  |  문자열  | 
|  asset\$1composite\$1model\$1id  |  문자열  | 
|  속성\$1유형  |  문자열  | 
|  property\$1data\$1type  |  문자열  | 
|  int\$1attribute\$1값  |  정수  | 
|  double\$1attribute\$1값  |  double  | 
|  부울\$1속성\$1값  |  부울  | 
|  string\$1attribute\$1값  |  문자열  | 


**View:raw\$1time\$1series**  

|  **열 이름**  |  **DataType**  | 
| --- | --- | 
|  asset\$1id  |  문자열  | 
|  property\$1id  |  문자열  | 
|  property\$1alias  |  문자열  | 
|  event\$1timestamp  |  timestamp  | 
|  quality  |  문자열  | 
|  boolean\$1value  |  부울  | 
|  int\$1value  |  정수  | 
|  double\$1value  |  double  | 
|  string\$1value  |  문자열  | 


**View:latest\$1value\$1time\$1series**  

|  **열 이름**  |  **DataType**  | 
| --- | --- | 
|  asset\$1id  |  문자열  | 
|  property\$1id  |  문자열  | 
|  property\$1alias  |  문자열  | 
|  event\$1timestamp  |  timestamp  | 
|  quality  |  문자열  | 
|  boolean\$1value  |  부울  | 
|  int\$1value  |  정수  | 
|  double\$1value  |  double  | 
|  string\$1value  |  문자열  | 


**View:precomputed\$1aggregates**  

|  **열 이름**  |  **DataType**  | 
| --- | --- | 
|  asset\$1id  |  문자열  | 
|  property\$1id  |  문자열  | 
|  property\$1alias  |  문자열  | 
|  event\$1timestamp  |  timestamp  | 
|  quality  |  문자열  | 
|  resolution  |  문자열  | 
|  sum\$1value  |  double  | 
|  count\$1value  |  정수  | 
|  average\$1value  |  double  | 
|  maximum\$1value  |  double  | 
|  minimum\$1value  |  double  | 
|  stdev\$1value  |  double  | 

# 지원되는 데이터 유형
<a name="supported-data-types"></a>

AWS IoT SiteWise 쿼리 언어는 다음 데이터 형식을 지원합니다.


**스칼라 값**  

|  **데이터 유형**  |  **설명**  | 
| --- | --- | 
|  `STRING`  |  최대 길이가 1,024바이트인 문자열입니다.  | 
|  `INTEGER`  |  범위가 `-2,147,483,648 to 2,147,483,647`인 서명된 32비트 정수입니다.  | 
|  `DOUBLE`  |  범위가 `–10^100 to 10^100`이거나 `IEEE 754` 배정밀`Nan`도인 부동 소수점 숫자입니다.  | 
|  `BOOLEAN`  |  `true` 또는 `false`  | 
|  `TIMESTAMP`  |  ISO-8601 준수 타임스탬프: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot-sitewise/latest/userguide/supported-data-types.html)  | 

**참고**  
`Null`: 정의된 데이터가 없음을 `true` 나타내는 부울입니다.

**Example**  
`TIMESTAMP` 값 예제:  

```
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'
```

**참고**  
 배정밀도 데이터는 정확하지 않습니다. 일부 값은 정확하게 변환되지 않으며 제한된 정밀도로 인해 모든 실수를 나타내지 않습니다. 쿼리의 부동 소수점 데이터는 내부적으로 표시되는 값과 같지 않을 수 있습니다. 입력 숫자의 정밀도가 너무 높으면 값이 반올림됩니다.

# 지원 절
<a name="supported-clauses"></a>

`SELECT` 문은 하나 이상의 뷰에서 데이터를 검색하는 데 사용됩니다.는 `JOIN` 및 `INNER JOIN` 작업을 AWS IoT SiteWise 지원합니다.

뷰는 명시적 `JOIN` 구문 또는 `FROM` 절의 쉼표로 구분된 표기법으로 조인됩니다.

**Example**  
일반 `SELECT` 문:  

```
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**  
서로 다른 절이 있는 SELECT 문:  

```
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;
```

**참고**  
 암시적는 AWS IoT SiteWise내부 스키마를 기반으로 하는 `JOIN` 키워드를 사용하지 않고 두 개 이상의 서로 다른 테이블을 `JOIN` 결합합니다. 이는 메타데이터와 원시 데이터 테이블 간의 `asset_id` 및 `property_id` 필드에 `JOIN` 대해를 수행하는 것과 동일합니다. 이 패턴을 사용하면 SiteWise가 원시 데이터 테이블에서 가져올 때 쿼리에서 지정된 메타데이터 필터를 활용하여 전체 데이터가 스캔되는 것을 줄일 수 있습니다.  

**Example 쿼리의 :**  

```
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'
```
위 예제에서는 지정된 메타데이터 이름에 속하는 자산 속성의 데이터만 스캔합니다.  

**Example 위의 쿼리와 동일하게 최적화되지 않은의 경우:**  

```
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'
```

각 절과 그 설명에 대한 설명은 다음과 같습니다.


|  **절**  |  **Signature**  |  **설명**  | 
| --- | --- | --- | 
|  `LIMIT`  |  <pre>LIMIT { count }</pre>  |  이 절은 결과 집합을 지정된 행 수로 제한합니다. `ORDER BY` 및 `OFFSET` 절과 `LIMIT` 함께 또는 없이를 사용할 수 있습니다. `LIMIT`는 [0,2147483647]의 음수가 아닌 정수에서만 작동합니다.  | 
|  `ORDER BY`  |  <pre>ORDER BY expression<br />[ ASC | DESC ]<br />[ NULLS FIRST | NULLS LAST ] <br /></pre>  |  `ORDER BY` 절은 쿼리의 결과 집합을 정렬합니다.   `ORDER BY` 절의 집계에서 선택한 열을 참조할 때는 이름이나 별칭 대신 열의 서수 인덱스를 사용합니다. <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` 절은 쿼리의 그룹화 열을 식별합니다. 집계 표현식과 함께 사용됩니다.  | 
|  `HAVING`  |  <pre>HAVING boolean-expression</pre>  |  `HAVING` 절은 GROUP BY 절에서 생성한 그룹 행을 필터링합니다.  | 
|  `SUB SELECT`  |  <pre>SELECT column1, column2<br />FROM table1<br />WHERE column3 IN (SELECT column4 FROM table2);<br /></pre>  |  다른 `SELECT` 문에 포함된 `SELECT` 문입니다.  | 
|  `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>  |  는 조인 조건과 일치하는 두 테이블의 모든 행을 `INNER JOIN` 반환합니다.  | 
|  `UNION`  |  <pre>query<br />   { UNION [ ALL ] }<br />another_query<br /></pre>  |  `UNION` 연산자는 두 인수의 집합 조합을 계산하여 결과 집합에서 중복 레코드를 자동으로 제거합니다.  | 

# 논리 연산자
<a name="sql-supported-logical"></a>

AWS IoT SiteWise 는 다음과 같은 논리 연산자를 지원합니다.


|  **연산자**  |  **Signature**  |  **설명**  | 
| --- | --- | --- | 
|  `AND`  |  a `AND` b  |  `TRUE` 두 값이 모두 true인 경우  | 
|  `OR`  |  a `OR` b  |  `TRUE` 하나의 값이 true인 경우  | 
|  `NOT`  |  `NOT` expression  |  `TRUE` 표현식이 false이고 표현식이 true인 `FALSE` 경우  | 
|  `IN`  |  x `IN` 표현식  |  `TRUE` 표현식의 값인 경우  | 
|  `BETWEEN`  |  `BETWEEN` a `AND` b  |  `TRUE` 상한과 하한 사이의 값인 경우 및에 두 제한 모두 포함  | 
|  `LIKE`  |  `LIKE` pattern  |  `TRUE` 값이 패턴인 경우 `LIKE`는 와일드카드를 지원합니다. 예제는 아래를 참조하세요. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot-sitewise/latest/userguide/sql-supported-logical.html)  | 

모든 논리 연산자의 예:


|  **함수**  |  **예제**  | 
| --- | --- | 
|  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>  | 
|  또는  |  <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>  | 
|  IN  |  <pre>SELECT a.asset_name <br />   FROM asset AS a<br />   WHERE a.asset_name IN ('abc', 'pqr')<br /></pre>  | 
|  BETWEEN  |  <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>  | 
|  LIKE  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot-sitewise/latest/userguide/sql-supported-logical.html)  | 

# 비교 연산자
<a name="sql-supported-comparision"></a>

AWS IoT SiteWise 는 다음 비교 연산자를 지원합니다. 모든 비교 작업은 기본 제공 데이터 유형에 사용할 수 있으며 부울로 평가됩니다.


**논리 연산자**  

|  **연산자**  |  **설명**  | 
| --- | --- | 
|  `<`  |  보다 작음  | 
|  `>`  |  보다 큼  | 
|  `<=`  |  작거나 같음  | 
|  `>=`  |  크거나 같음  | 
|  `=`  |  같음  | 
|  `!=`  |  같지 않음  | 


**숫자가 아닌 값에 대한 비교 작업 실제 테이블**  

|  **유형**  |  **유형 >= x**  |  **유형 <= x**  |  **유형 > x**  |  **유형 < x**  |  **유형 = x**  |  **유형 \$1= x**  | 
| --- | --- | --- | --- | --- | --- | --- | 
|  `NULL`  |  `FALSE`  |  `FALSE`  |  `FALSE`  |  `FALSE`  |  `FALSE`  |  `TRUE`  | 

일부 조건자는 연산자처럼 동작하지만 특별한 구문이 있습니다. 아래 내용을 참조하십시오.


**비교 조건자**  

|  **연산자**  |  **설명**  | 
| --- | --- | 
|  `IS NULL`  |  값이 인지 테스트합니다`NULL`.  | 
|  `IS NOT NULL`  |  값이가 아닌지 테스트합니다`NULL`.  | 

## NaN 연산자
<a name="sql-supported-comparision-nan"></a>

 `NaN`또는 'Not a Number'는 부동 소수점 산술의 특수 값입니다. 다음은 `NaN` 비교 목록과 그 작동 방식입니다.
+ `NaN` 값은 작은따옴표로 묶어야 합니다. 예: '`NaN`'.
+ `NaN` 값은 서로 동일한 것으로 간주됩니다.
+ `NaN`가 다른 숫자 값보다 큽니다.
+ `AVG()`, 및 `STDDEV()`와 같은 집계 함수에서 값이 인 `SUM()`경우 `NaN`결과는 입니다`NaN`.
+ `MAX()` 및와 같은 집계 함수에서는 `MIN()` `NaN` 값이 계산에 포함됩니다.


**NaN 값 비교**  

|  **비교**  |  **결과**  | 
| --- | --- | 
|  `'NaN' ≥ x`  |  True  | 
|  `'NaN' ≤ x`  |  x가 NaN과 같으면 true, 그렇지 않으면 False  | 
|  `'NaN' > x`  |  x가 NaN인 경우 False, 그렇지 않으면 True  | 
|  `'NaN' < x`  |  False  | 
|  `'NaN' = x`  |  x가 NaN과 같으면 true, 그렇지 않으면 False  | 
|  `'NaN' != x`  |  x가 NaN인 경우 False, 그렇지 않으면 True  | 

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

 지원되는 함수 그룹은 다음과 같습니다.

**Topics**
+ [스칼라 함수](sql-functions-scalar.md)
+ [집계 함수](sql-functions-aggregated.md)

# 스칼라 함수
<a name="sql-functions-scalar"></a>

 스칼라 함수는 하나 이상의 입력 값을 가져와 단일 출력 값을 반환합니다. SQL(구조화된 쿼리 언어)에서 데이터 조작 및 검색에 널리 사용되므로 데이터 처리 작업의 효율성이 향상됩니다.

**Topics**
+ [Null 데이터 함수](sql-functions-null.md)
+ [문자열 함수](sql-functions-string.md)
+ [수학 함수](sql-functions-math.md)
+ [날짜 시간 함수](sql-functions-date.md)
+ [유형 변환 함수](sql-functions-type-conv.md)

# Null 데이터 함수
<a name="sql-functions-null"></a>

 Null 데이터 함수는 값이 없음을 나타내는 NULL 값을 처리하거나 조작합니다. 함수를 사용하면 NULLs을 다른 값으로 바꾸거나, 값이 NULL인지 확인하거나, 특정 방식으로 NULLs 처리하는 작업을 수행할 수 있습니다.


|  **함수**  |  **Signature**  |  **설명**  | 
| --- | --- | --- | 
|  `COALESCE`  |   COALESCE(expression1, expression2, ..., expressionN)   |  모든 표현식이 null로 평가되면 COALESCE는 null을 반환합니다. 표현식은 유형이 동일해야 합니다.  | 

**Example COALESCE 함수의**  

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

# 문자열 함수
<a name="sql-functions-string"></a>

 문자열 함수는 텍스트 데이터를 조작하고 처리하는 데 사용되는 기본 도구입니다. 문자열 내에서 연결, 추출, 형식 지정 및 검색과 같은 작업을 활성화합니다. 이러한 함수는 데이터베이스 내에서 텍스트 기반 데이터를 정리, 변환 및 분석하는 데 필수적입니다.


**문자열 함수**  

|  **함수**  |  **Signature**  |  **설명**  | 
| --- | --- | --- | 
|  `LENGTH`  |   길이(문자열)   |  문자열의 길이를 반환합니다.  | 
|  `CONCAT`  |   CONCAT(문자열, 문자열)   |  문자열의 인수를 연결합니다.  | 
|  `SUBSTR`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot-sitewise/latest/userguide/sql-functions-string.html)  |  다음 중 하나를 반환합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot-sitewise/latest/userguide/sql-functions-string.html) 시작 파라미터에 1 기반 인덱싱을 사용합니다.  | 
|  `UPPER`  |   UPPER(문자열)   |  입력 문자열의 문자를 대문자로 변환합니다.  | 
|  `LOWER`  |   LOWER(문자열)   |  입력 문자열의 문자를 소문자로 변환합니다.  | 
|  `TRIM`  |   TRIM(문자열)   |  문자열의 시작, 끝 또는 양쪽에서 공백 문자를 제거합니다.  | 
|  `LTRIM`  |   LTRIM(문자열)   |  문자열의 시작 부분에서 공백 문자를 제거합니다.  | 
|  `RTRIM`  |   RTRIM(문자열)   |  문자열 끝에서 공백 문자를 제거합니다.  | 
|  `STR_REPLACE`  |   STR\$1REPLACE(문자열, 시작, 종료)   |  지정된 하위 문자열의 모든 발생을 다른 지정된 하위 문자열로 바꿉니다.  | 

모든 함수의 예:


|  **함수**  |  **예제**  | 
| --- | --- | 
|  LENGTH  |  `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/ko_kr/iot-sitewise/latest/userguide/sql-functions-string.html)  | 
|  UPPER  |   `SELECT UPPER(d.string_value) AS up_string FROM raw_time_series AS d`   | 
|  LOWER  |   `SELECT LOWER(d.string_value) AS low_string FROM raw_time_series AS d`   | 
|  TRIM  |   `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\$1REPLACE  |   `SELECT STR_REPLACE(d.string_value, 'abc', 'def') AS replaced_string FROM raw_time_series AS d`   | 

## 연결 연산자
<a name="sql-operators-concatenation"></a>

 연결 연산자 `||`또는 파이프 연산자는 두 문자열을 함께 조인합니다. `CONCAT` 함수에 대한 대안을 제공하며 여러 문자열을 결합할 때 더 읽기 쉽습니다.

**Example 연결 연산자의**  

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

# 수학 함수
<a name="sql-functions-math"></a>

 수학 함수는 SQL 쿼리 내에서 숫자 데이터에 대한 계산을 수행하는 데 사용되는 사전 정의된 수학 작업입니다. 데이터베이스에서 데이터를 추출하여 별도로 처리할 필요 없이 데이터를 조작하고 변환할 수 있는 방법을 제공합니다.


**수학 함수**  

|  **함수**  |  **Signature**  |  **설명**  | 
| --- | --- | --- | 
|  `POWER`  |  POWER(int\$1double, int\$1double)  |  두 번째 인수의 출력에 대해 제기된 첫 번째 인수의 값을 반환합니다.  | 
|  `ROUND`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot-sitewise/latest/userguide/sql-functions-math.html)  |  가장 가까운 정수로 반올림합니다.  | 
|  `FLOOR`  |   바닥(int\$1double)   |  지정된 값보다 크지 않은 가장 큰 정수를 반환합니다.  | 

모든 함수의 예:


|  **함수**  |  **예제**  | 
| --- | --- | 
|  POWER  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot-sitewise/latest/userguide/sql-functions-math.html)  | 
|  ROUND  |   `ROUND (32.12435, 3)`   | 
|  FLOOR  |   `FLOOR (21.2)`   | 

# 날짜 시간 함수
<a name="sql-functions-date"></a>

 날짜 시간 함수는 날짜 및 시간과 함께 작동합니다. 이러한 함수를 사용하면 날짜의 특정 구성 요소를 추출하고, 계산을 수행하고, 날짜 값을 조작할 수 있습니다.

이러한 함수에서 허용되는 식별자는 다음과 같습니다.
+ YEAR
+ MONTH
+ DAY
+ 시간
+ 분
+ SECOND


|  **함수**  |  **Signature**  |  **설명**  | 
| --- | --- | --- | 
|  `NOW`  |   지금()   |  현재 타임스탬프를 밀리초 정밀도로 반환합니다. 쿼리 내에서 실행되는 정확한 시간을 제공합니다.  | 
|  `DATE_ADD`  |  DATE\$1ADD(식별자, interval\$1duration, 열)  |  날짜/시간과 일/시간 수 또는 날짜/시간 및 날짜/시간 간격의 합계를 반환합니다.  | 
|  `DATE_SUB`  |  DATE\$1SUB(식별자, interval\$1duration, 열)  |  날짜/시간과 일/시간 수 간의 차이 또는 날짜/시간과 날짜/시간 간격 간의 차이를 반환합니다.  | 
|  `TIMESTAMP_ADD`  |  TIMESTAMP\$1ADD(식별자, interval\$1duration, 열)  |  지정된 시간 단위로 날짜/시간 표현식에 시간 간격을 추가합니다.  | 
|  `TIMESTAMP_SUB`  |  TIMESTAMP\$1SUB(식별자, interval\$1duration, 열)  |  지정된 시간 단위의 시간 간격을 날짜/시간 표현식에서 뺍니다.  | 
|  `CAST`  |  CAST(Expression AS TIMESTAMP FORMAT 패턴)  |  지정된 형식 패턴을 사용하여 문자열 표현식을 타임스탬프로 변환합니다. 일반적인 패턴에는 표준 날짜/시간 형식`'yyyy-MM-dd HH:mm:ss'`에 대한가 포함됩니다. 예: `SELECT CAST('2023-12-25 14:30:00' AS TIMESTAMP) AS converted_timestamp`  | 

**Example 나열된 함수를 사용하는 SQL 쿼리의 :**  

```
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
```

# 유형 변환 함수
<a name="sql-functions-type-conv"></a>

 유형 변환 함수는 값의 데이터 유형을 한에서 다른 로 변경하는 데 사용됩니다. 이는 데이터 호환성을 보장하고 특정 형식의 데이터가 필요한 작업을 수행하는 데 필수적입니다.


|  **함수**  |  **Signature**  |  **설명**  | 
| --- | --- | --- | 
|  `TO_DATE`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot-sitewise/latest/userguide/sql-functions-type-conv.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot-sitewise/latest/userguide/sql-functions-type-conv.html)  | 
|  `TO_TIMESTAMP`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot-sitewise/latest/userguide/sql-functions-type-conv.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot-sitewise/latest/userguide/sql-functions-type-conv.html)  | 
|  `TO_TIME`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot-sitewise/latest/userguide/sql-functions-type-conv.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot-sitewise/latest/userguide/sql-functions-type-conv.html)  | 
|  `CAST`  |  CAST(<expression> AS <data type>)  |  한 유형에서 다른 유형으로 단일 값으로 평가되는 개체 또는 표현식을 변환합니다. 지원되는 데이터 형식은 다음과 같습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/iot-sitewise/latest/userguide/sql-functions-type-conv.html)  | 

**Example 나열된 함수를 사용하는 SQL 쿼리의 :**  

```
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
```

# 집계 함수
<a name="sql-functions-aggregated"></a>

 집계 함수는 여러 데이터 행에서 계산을 수행하여 단일 요약 결과를 생성하는 데이터베이스 작업입니다. 이러한 함수는 데이터 세트를 분석하여 합계, 평균, 개수 또는 기타 통계 측정치와 같은 계산된 값을 반환합니다.


|  **함수**  |  **Signature**  |  **설명**  | 
| --- | --- | --- | 
|  `AVG`  |  AVG(식)  |  숫자 표현식의 평균을 반환합니다.  | 
|  `COUNT`  |  COUNT(식)  |  지정된 기준과 일치하는 행 수를 반환합니다.  | 
|  `MAX`  |  MAX(식)  |  선택한 표현식의 가장 큰 값을 반환합니다.  | 
|  `MIN`  |  MIN(식)  |  선택한 표현식의 가장 작은 값을 반환합니다.  | 
|  `SUM`  |  SUM(식)  |  숫자 표현식의 합계를 반환합니다.  | 
|  `STDDEV`  |  STDDEV(식)  |  샘플 표준 편차를 반환합니다.  | 
|  `GROUP BY`  |  GROUP BY 표현식  |  그룹화 열로 생성된 행을 반환합니다.  | 
|  `HAVING`  |  부울 표현식 사용  |  `GROUP BY` 절로 필터링된 그룹 행을 반환합니다.  | 

모든 함수의 예:


|  **함수**  |  **예제**  | 
| --- | --- | 
|  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>  | 
|  SUM  |  <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/ko_kr/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>  | 

# 예제 쿼리
<a name="sql-examples"></a>

## 메타데이터 필터링
<a name="sql-examples-meta-filter"></a>

다음 예제는 AWS IoT SiteWise 쿼리 언어가 있는 `SELECT` 문을 사용한 메타데이터 필터링을 위한 것입니다.

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

## 값 필터링
<a name="sql-examples-value-filter"></a>

다음은 AWS IoT SiteWise 쿼리 언어가 있는 `SELECT` 문을 사용한 값 필터링의 예입니다.

```
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'
```

# 쿼리 최적화
<a name="query-optimize"></a>

## 메타데이터 필터
<a name="metadata-filters"></a>

메타데이터 또는 원시 데이터를 쿼리할 때 `WHERE` 절을 사용하여 메타데이터 필드를 기준으로 필터링하여 스캔되는 데이터의 양을 줄입니다. 다음 연산자를 사용하여 메타데이터 스캔을 제한합니다.
+ 같음(=)
+ 같지 않음(\$1=)
+ LIKE
+ IN
+ AND
+ 또는

속성 속성의 경우 다음 필드를 사용하여 결과를 필터링합니다.
+ `double_attribute_value`
+ `int_attribute_value`
+ `boolean_attribute_value`
+ `string_attribute_value`

이러한 필드는 속성 유형의 자산 속성에 대해 **latest\$1value\$1time\$1series** 테이블보다 더 나은 성능을 제공합니다.

**참고**  
연산자 오른쪽에 있는 리터럴을 사용하여 데이터 스캔을 적절하게 제한합니다. 예를 들어 다음 쿼리는 엄격한 문자열 리터럴을 사용하는 것보다 성능이 떨어집니다.  

```
SELECT property_id FROM asset_property WHERE property_name = CONCAT('my', 'property')
```

**Example 메타데이터 필터의 경우:**  

```
SELECT p.property_name FROM asset_property p
WHERE p.property_type = 'attribute' AND p.string_attribute_value LIKE 'my-property-%'
```

## 원시 데이터 필터
<a name="raw-data-filters"></a>

모든 원시 데이터 테이블(**raw\$1time\$1series**, **latest\$1value\$1time\$1series**, **precomputed\$1aggregates**)에는 해당 행과 연결된 타임스탬프가 있습니다. 메타데이터 필터 외에도 `event_timestamp` 필드에 `WHERE` 절 필터를 사용하여 스캔되는 데이터의 양을 줄입니다. 원시 데이터 스캔을 제한하려면 다음 작업을 사용합니다.
+ 같음(=)
+ 큼 (>)
+ 작음(<)
+ 크거나 같음(>=)
+ 작거나 같음(<=)
+ BETWEEN
+ AND

**필터의 예**:
+  **precomputed\$1aggregates** 테이블을 쿼리할 때는 항상 `WHERE` 절에서 품질 필터를 지정합니다. 이렇게 하면 특히 `BAD` 또는 데이터를 찾고 있는 경우 쿼리가 스캔하는 `UNCERTAIN` 데이터의 양이 줄어듭니다.

   또한 **precomputed\$1aggregates** 테이블을 쿼리할 때 해상도 필터(1m, 15m, 1h 또는 1d)를 사용하는 것이 좋습니다. 해상도 필터를 지정하지 않으면 AWS IoT SiteWise 는 기본적으로 모든 해상도에서 전체 테이블 스캔을 수행하므로 비효율적입니다.
+  원시 데이터를 쿼리할 때 `WHERE` 절에서 타임스탬프 함수를 사용하여 스캔한 데이터의 양을 필터링할 수도 있습니다. 예를 들어 다음 쿼리는 **raw\$1time\$1series** 테이블에서 지난 30분 동안의 데이터만 스캔합니다.

  ```
  SELECT r.event_timestamp, r.double_value
  FROM raw_time_series r
  WHERE r.event_timestamp > TIMESTAMP_SUB(MINUTE, 30, NOW())
  ```

**참고**  
Not equals `(!=)` 및 `OR` 연산자는 일반적으로 원시 데이터 스캔에 의미 있는 필터를 적용하지 않습니다. 원시 데이터 값(string\$1value, double\$1value 등)에 대한 필터도 원시 데이터 스캔을 제한하지 않습니다.

## JOIN 최적화
<a name="join-optimization"></a>

AWS IoT SiteWise SQL은 `JOIN` 키워드를 지원하여 두 테이블을 함께 병합합니다. 필드(`ON`키워드 사용)를 능동적으로 필터링`JOIN`하는 만 지원됩니다. 전체 데카르트 조인은 금지됩니다.

AWS IoT SiteWise 는 `JOIN` 키워드`JOIN`를 사용하지 않고 암시적 도 지원합니다. 이는 서로 다른 메타데이터 테이블 간에, 그리고 메타데이터 테이블과 원시 테이블 간에 허용됩니다. 예를 들어, 쿼리는 다음과 같습니다.

```
SELECT a.asset_name, p.property_name FROM asset a, asset_property p
```

이 동등한 쿼리보다 성능이 좋습니다.

```
SELECT a.asset_name, p.property_name FROM asset a
JOIN asset_property p ON a.asset_id = p.asset_id
```

다음과 같은 암시적 조인이 허용됩니다(O는 허용되고 X는 금지됨).


|  | asset | asset\$1property | latest\$1value\$1time\$1series | raw\$1time\$1series | precomputed\$1aggregates | subquery | 
| --- | --- | --- | --- | --- | --- | --- | 
| asset | X | O | O | O | O | X | 
| asset\$1property | O | X | O | O | O | X | 
| latest\$1value\$1time\$1series | O | O | X | X | X | X | 
| raw\$1time\$1series | O | O | X | X | X | X | 
| precomputed\$1aggregates | O | O | X | X | X | X | 
| subquery | X | X | X | X | X | X | 

가능한 경우 암시적 `JOIN`를 사용합니다. `JOIN` 키워드를 사용해야 하는 경우 개별 `JOIN`ed 테이블에 필터를 적용하여 스캔되는 데이터를 최소화합니다. 예를 들어이 쿼리 대신 다음을 수행합니다.

```
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%'
```

이 보다 효율적인 쿼리를 사용합니다.

```
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%'
```

메타데이터 필터를 하위 쿼리로 푸시하면 스캔 프로세스 중에의 개별 테이블이 필터링`JOIN`됩니다. 동일한 효과를 위해 하위 쿼리에서 `LIMIT` 키워드를 사용할 수도 있습니다.

## 대규모 쿼리
<a name="large-queries"></a>

기본값보다 많은 행을 생성하는 쿼리의 경우 [ExecuteQuery](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_ExecuteQuery.html) API의 페이지 크기를 최대값 20000으로 설정합니다. 이렇게 하면 전체 쿼리 성능이 향상됩니다.

`LIMIT` 절을 사용하여 일부 쿼리에 대해 스캔되는 데이터의 양을 줄입니다. 집계 함수와 특정 테이블 전체 절(`GROUP BY`, `ORDER BY`, `JOIN`)은 `LIMIT` 절을 적용하기 전에 전체 스캔을 완료해야 합니다.

**참고**  
 AWS IoT SiteWise 는 `LIMIT` 절이 적용된 상태에서도 최소량의 데이터를 스캔할 수 있으며, 특히 여러 속성을 스캔하는 원시 데이터 쿼리의 경우 더욱 그렇습니다.

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

용 오픈 소스 [ODBC 드라이버](https://github.com/awslabs/aws-iotsitewise-odbc-driver)는 개발자에게에 AWS IoT SiteWise 대한 SQL 관계형 인터페이스를 AWS IoT SiteWise 제공하며 Power BI 데스크톱 및 Microsoft Excel과 같은 비즈니스 인텔리전스(BI) 도구에서 연결할 수 있습니다. AWS IoT SiteWise ODBC 드라이버는 현재 [Windows](https://github.com/awslabs/aws-iotsitewise-odbc-driver/releases)에서 사용할 수 있으며 Okta 및 Microsoft Azure Active Directory(AD)를 사용하는 SSO를 지원합니다.

자세한 내용은 [AWS IoT SiteWise GitHub의 ODBC 드라이버 설명서를](https://github.com/awslabs/aws-iotsitewise-odbc-driver/blob/main/docs/markdown/index.md) 참조하세요.

**Topics**
+ [ODBC 드라이버에 대한 연결 문자열 구문 및 옵션](query-ODBC-connecting.md)
+ [AWS IoT SiteWise ODBC 드라이버의 연결 문자열 예제](query-ODBC-connecting-examples.md)
+ [ODBC 드라이버와의 연결 문제 해결](query-ODBC-connecting-troubleshooting.md)

# ODBC 드라이버에 대한 연결 문자열 구문 및 옵션
<a name="query-ODBC-connecting"></a>

ODBC 드라이버의 연결 문자열 옵션을 지정하는 구문은 다음과 같습니다.

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

사용 가능한 옵션은 다음과 같습니다.

**드라이버 연결 옵션**
+ **`Driver`***(필수)* - ODBC와 함께 사용 중인 드라이버입니다.

  기본값은 AWS IoT SiteWise입니다.
+ **`DSN`** - 연결을 구성하는 데 사용할 데이터 소스 이름(DSN)입니다.

  기본값은 `NONE`입니다.
+ **`Auth`** - 인증 모드입니다. 이 값은 다음 중 하나여야 합니다.
  + `AWS_PROFILE` - 기본 자격 증명 체인을 사용합니다.
  + `IAM` - AWS IAM 자격 증명을 사용합니다.
  + `AAD` - Azure Active Directory(AD) ID 제공업체를 사용합니다.
  + `OKTA` - Okta ID 제공업체를 사용합니다.

  기본값은 `AWS_PROFILE`입니다.

**엔드포인트 구성 옵션**
+ **`EndpointOverride`**   - AWS IoT SiteWise 서비스에 대한   엔드포인트 재정의입니다. 이는 리전을 재정의하는 고급 옵션입니다. 예제:

  ```
  iotsitewise.us-east-1.amazonaws.com
  ```
+ **`Region`**   - AWS IoT SiteWise 서비스 엔드포인트의   서명 리전입니다.

  기본값은 `us-east-1`입니다.

**자격 증명 제공업체 옵션**
+ **`ProfileName`**   - AWS 구성 파일의   프로필 이름입니다.

  기본값은 `NONE`입니다.

**AWS IAM 인증 옵션**
+ **`UID`** 또는**`AccessKeyId`** -   AWS 사용자 액세스 키 ID입니다. 연결 문자열에 `UID`와 `AccessKeyId`가 모두 제공된 경우 값이 비어 있지 않으면 `UID` 값이 사용됩니다.

  기본값은 `NONE`입니다.
+ **`PWD`** 또는 **`SecretKey`** - <shared id="AWS"/> 사용자 시크릿 액세스 키입니다. 연결 문자열에 `PWD`와 `SecretKey`가 모두 제공된 경우 값이 비어 있지 않으면 `PWD` 값이 사용됩니다.

  기본값은 `NONE`입니다.
+ **`SessionToken`** - 다중 인증(MFA)이 활성화된 데이터베이스에 액세스하는 데 필요한 임시 세션 토큰입니다. 입력에 후행 ` = `를 포함하지 마세요.

  기본값은 `NONE`입니다.

**Okta에 대한 SAML 기반 인증 옵션**
+ **`IdPHost`** - 지정된 IdP의 호스트 이름입니다.

  기본값은 `NONE`입니다.
+ **`UID`** 또는 **`IdPUserName`**- 지정된 IdP 계정의 사용자 이름입니다. 연결 문자열에 `UID`와 `IdPUserName`가 모두 제공된 경우 값이 비어 있지 않으면 `UID` 값이 사용됩니다.

  기본값은 `NONE`입니다.
+ **`PWD`** 또는 **`IdPPassword`** - 지정된 IdP 계정의 암호입니다. 연결 문자열에 `PWD`와 `IdPPassword`가 모두 제공된 경우 값이 비어 있지 않으면 `PWD` 값이 사용됩니다.

  기본값은 `NONE`입니다.
+ **`OktaApplicationID`**   - AWS IoT SiteWise 애플리케이션과 연결된   고유한 Okta 제공 ID입니다. 애플리케이션 메타데이터에 제공된 `entityID` 필드에서 애플리케이션 ID(AppId)를 찾을 수 있습니다. 예제:

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

  기본값은 `NONE`입니다.
+ **`RoleARN`** - 발신자가 수임하는 역할의 Amazon 리소스 이름(ARN)입니다.

  기본값은 `NONE`입니다.
+ **`IdPARN`** - IAM의 SAML 제공업체의 Amazon 리소스 이름(ARN)으로, IdP를 설명합니다.

  기본값은 `NONE`입니다.

**Azure Active Directory에 대한 SAML 기반 인증 옵션**
+ **`UID`** 또는 **`IdPUserName`**- 지정된 IdP 계정의 사용자 이름입니다.

  기본값은 `NONE`입니다.
+ **`PWD`** 또는 **`IdPPassword`**- 지정된 IdP 계정의 암호입니다.

  기본값은 `NONE`입니다.
+ **`AADApplicationID`** - Azure AD에 등록된 애플리케이션의 고유 ID입니다.

  기본값은 `NONE`입니다.
+ **`AADClientSecret`** - Azure AD에 등록된 애플리케이션과 연결된 클라이언트 시크릿으로, 토큰 가져오기를 승인하는 데 사용됩니다.

  기본값은 `NONE`입니다.
+ **`AADTenant`** - Azure AD 테넌트 ID입니다.

  기본값은 `NONE`입니다.
+ **`RoleARN`** - 발신자가 수임하는 역할의 Amazon 리소스 이름(ARN)입니다.

  기본값은 `NONE`입니다.
+ **`IdPARN`** - IAM의 SAML 제공업체의 Amazon 리소스 이름(ARN)으로, IdP를 설명합니다.

  기본값은 `NONE`입니다.

**AWS SDK(고급) 옵션**
+ **`RequestTimeout`**   - 시간이 초과되기 전에 AWS SDK가 쿼리 요청을 기다리는 밀리초 단위의   시간입니다. 양수가 아닌 값은 요청 제한 시간을 비활성화합니다.

  기본값은 `3000`입니다.
+ **`ConnectionTimeout`**   - AWS 제한 시간이 초과되기 전에 SDK가 열린 연결을 통해 데이터가 전송될 때까지 대기하는 밀리초 단위   시간입니다. 0 값은 연결 제한 시간을 비활성화합니다. 이 값은 음수가 아니어야 합니다.

  기본값은 `1000`입니다.
+ **`MaxRetryCountClient`** - SDK에서 오류 코드 5xx의 재시도 가능한 오류에 대한 최대 재시도 횟수입니다. 값은 음수가 아니어야 합니다.

  기본값은 `0`입니다.
+ **`MaxConnections`**   - AWS IoT SiteWise 서비스에 대해 동시에 열린 HTTP 연결이 허용되는   최대 수입니다. 값은 양수여야 합니다.

  기본값은 `25`입니다.

**ODBC 드라이버 로깅 옵션**
+ **`LogLevel`** - 드라이버 로깅에 대한 로그 수준입니다. 다음 중 하나여야 합니다.
  + **0**(OFF).
  + **1**(ERROR).
  + **2**(WARNING).
  + **3**(INFO).
  + **4**(DEBUG).

  기본값은 `1`(오류)입니다.

  **경고:** DEBUG 로깅 모드를 사용할 때 드라이버가 개인 정보를 로깅할 수 있습니다.
+ **`LogOutput`** - 로그 파일을 저장할 폴더입니다.

  기본값:
  + **Windows:** `%USERPROFILE%` 또는 `%HOMEDRIVE%%HOMEPATH%`(사용할 수 없는 경우)
  + **macOS 및 Linux:** `$HOME` 또는 함수 `getpwuid(getuid())` 반환 값의 필드 `pw_dir`(사용할 수 없는 경우)

**SDK 로깅 옵션**

 AWS SDK 로그 수준은 AWS IoT SiteWise ODBC 드라이버 로그 수준과 별개입니다. 하나를 설정해도 다른 하나에는 영향이 없습니다.

SDK 로그 수준은 환경 변수 `SW_AWS_LOG_LEVEL`을 사용하여 설정됩니다. 유효값은 다음과 같습니다.
+ `OFF`
+ `ERROR`
+ `WARN`
+ `INFO`
+ `DEBUG`
+ `TRACE`
+ `FATAL`

`SW_AWS_LOG_LEVEL`이 설정되지 않으면 SDK 로그 수준은 기본값인 `WARN`으로 설정됩니다.

## 프록시를 통해 연결
<a name="query-ODBC-connecting-proxy"></a>

ODBC 드라이버는 프록시를 AWS IoT SiteWise 통해에 연결할 수 있도록 지원합니다. 이 기능을 사용하려면 프록시 설정에 따라 다음 환경 변수를 구성하세요.
+ **`SW_PROXY_HOST`** - 프록시 호스트입니다.
+ **`SW_PROXY_PORT`** - 프록시 포트 번호입니다.
+ **`SW_PROXY_SCHEME`** - 프록시 체계(`http` 또는 `https`)입니다.
+ **`SW_PROXY_USER`** - 프록시 인증을 위한 사용자 이름입니다.
+ **`SW_PROXY_PASSWORD`** - 프록시 인증을 위한 사용자 암호입니다.
+ **`SW_PROXY_SSL_CERT_PATH`** - HTTPS 프록시에 연결하는 데 사용할 SSL 인증서 파일입니다.
+ **`SW_PROXY_SSL_CERT_TYPE`** - 프록시 클라이언트 SSL 인증서의 유형입니다.
+ **`SW_PROXY_SSL_KEY_PATH`** - HTTPS 프록시에 연결하는 데 사용할 프라이빗 키 파일입니다.
+ **`SW_PROXY_SSL_KEY_TYPE`** - HTTPS 프록시에 연결하는 데 사용되는 프라이빗 키 파일의 유형입니다.
+ **`SW_PROXY_SSL_KEY_PASSWORD`** - HTTPS 프록시에 연결하는 데 사용되는 프라이빗 키 파일의 암호입니다.

# AWS IoT SiteWise ODBC 드라이버의 연결 문자열 예제
<a name="query-ODBC-connecting-examples"></a>

## IAM 자격 증명을 사용하여 ODBC 드라이버에 연결하는 예제
<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;
```

## 프로필을 사용하여 ODBC 드라이버에 연결하는 예제
<a name="query-ODBC-connecting-examples-profile"></a>

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

드라이버는 `~/.aws/credentials`에 제공된 자격 증명을 사용하여 연결을 시도하거나, 환경 변수 `AWS_SHARED_CREDENTIALS_FILE`에 파일이 지정된 경우 해당 파일의 자격 증명을 사용하여 연결을 시도합니다.

## Okta를 사용하여 ODBC 드라이버에 연결하는 예제
<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);
```

## Azure Active Directory(AAD)를 사용하여 ODBC 드라이버에 연결하는 예제
<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);
```

## 지정된 엔드포인트와 로그 수준 2(경고)를 사용하여 ODBC 드라이버에 연결하는 예제
<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;
```

# ODBC 드라이버와의 연결 문제 해결
<a name="query-ODBC-connecting-troubleshooting"></a>

**참고**  
사용자 이름과 암호가 DSN에 이미 지정된 경우 ODBC 드라이버 관리자가 요청할 때 다시 지정하지 마십시오.

연결 문자열에서 연결 문자열 옵션이 두 번 이상 전달되면 `Re-writing (connection string option) (have you specified it several times?)`라는 메시지와 함께 오류 코드 `01S02`가 발생합니다. 옵션을 두 번 이상 지정하면 오류가 발생합니다. DSN과 연결 문자열을 사용하여 연결할 때 DSN에 이미 연결 옵션이 지정되어 있으면 연결 문자열에 다시 지정하지 마세요.