

慎重に検討した結果、Amazon Kinesis Data Analytics for SQL アプリケーションを中止することにしました。

1. **2025 年 9 月 1** 日以降、Amazon Kinesis Data Analytics for SQL アプリケーションのバグ修正は提供されません。これは、今後の廃止によりサポートが制限されるためです。

2. **2025 年 10 月 15** 日以降、新しい Kinesis Data Analytics for SQL アプリケーションを作成することはできません。

3. **2026 年 1 月 27 日**以降、アプリケーションは削除されます。Amazon Kinesis Data Analytics for SQL アプリケーションを起動することも操作することもできなくなります。これ以降、Amazon Kinesis Data Analytics for SQL のサポートは終了します。詳細については、「[Amazon Kinesis Data Analytics for SQL アプリケーションのサポート終了](discontinuation.md)」を参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# JSONPath の操作
<a name="about-json-path"></a>

**注記**  
2023 年 9 月 12 日以降、Kinesis Data Analytics for SQL をまだ使用していない場合、Kinesis Data Firehose をソースとして使用して新しいアプリケーションを作成することはできません。詳細については、「[制限](https://docs.aws.amazon.com//kinesisanalytics/latest/dev/limits.html)」を参照してください。

JSONPath は、JSON オブジェクトの要素をクエリする標準化された方法です。JSONPath はパス式を使用して、JSON ドキュメントの要素、入れ子要素、配列に移動します。JSON の詳細については、「[JSON の入門](http://www.json.org/)」を参照してください。

Amazon Kinesis Data Analytics はアプリケーションのソーススキーマで JSONPath 式を使用して、JSON 形式のデータがあるストリーミングソースのデータ要素を識別します。

アプリケーションの入力ストリームにストリーミングデータをマッピングする方法の詳細については、「[SQL 入力列へのストリーミングソース要素のマッピング](sch-mapping.md)」を参照してください。

## JSONPath を使用した JSON 要素へのアクセス
<a name="about-json-path-elements"></a>

JSONPath 式を使用して JSON 形式のさまざまなデータにアクセスする方法について説明します。このセクションの例では、ソースストリームに次の JSON レコードが含まれていると想定します。

```
{
  "customerName":"John Doe",
  "address":
  {
    "streetAddress":
    [
      "number":"123",
      "street":"AnyStreet"
    ],
    "city":"Anytown"
  }
  "orders":
  [
    { "orderId":"23284", "itemName":"Widget", "itemPrice":"33.99" },
    { "orderId":"63122", "itemName":"Gadget", "itemPrice":"22.50" },
    { "orderId":"77284", "itemName":"Sprocket", "itemPrice":"12.00" }
  ]
}
```

### JSON 要素へのアクセス
<a name="about-json-path-firstlevel"></a>

JSONPath を使用して JSON データの要素をクエリするには、次の構文を使用します。ここで、`$` はデータ階層のルート、`elementName` はクエリを実行する要素ノードの名前を表します。

```
$.elementName
```

次の式では、前述の JSON の例の `customerName` 要素をクエリします。

```
$.customerName
```

前述の式では、前述の JSON のレコードから次のように返ります。

```
John Doe
```

**注記**  
Path 式では、大文字と小文字が区別されます。式 (`$.customername`) では、前述の JSON の例から `null` が返ります。

**注記**  
パス式で指定した場所に要素が表示されない場合、式は `null` を返します。次の式の例では、前述の JSON の例から `null` が返ります。これは一致する要素がないためです。  

```
$.customerId
```

### ネストされた JSON 要素へのアクセス
<a name="about-json-path-nested"></a>

ネストされた JSON 要素をクエリするには、次の構文を使用します。

```
$.parentElement.element
```

次の式では、前述の JSON の例の `city` 要素をクエリします。

```
$.address.city
```

前述の式では、前述の JSON のレコードから次のように返ります。

```
Anytown
```

以下の構文を使用して、深いレベルのサブ要素をクエリすることができます。

```
$.parentElement.element.subElement
```

次の式では、前述の JSON の例の `street` 要素をクエリします。

```
$.address.streetAddress.street
```

前述の式では、前述の JSON のレコードから次のように返ります。

```
AnyStreet
```

### 配列へのアクセス
<a name="about-json-path-arrays"></a>

JSON 配列内のデータにアクセスするには、以下の方法があります。
+ 配列内のすべての要素を単一の行として取得します。
+ 配列内の各要素を別々の行として取得します。

#### 配列内のすべての要素を単一の行として取得する
<a name="about-json-path-arrays-row"></a>

配列のコンテンツ全体を単一の行としてクエリを実行するには、次の構文を使用します。

```
$.arrayObject[0:]
```

次の式では、このセクションで使用した前述の JSON の例の `orders` 要素をクエリします。配列の内容は、単一行の 1 つの列で返ります。

```
$.orders[0:]
```

前述の式は、このセクションで使用した JSON レコード例から次を返します。

```
[{"orderId":"23284","itemName":"Widget","itemPrice":"33.99"},{"orderId":"61322","itemName":"Gadget","itemPrice":"22.50"},{"orderId":"77284","itemName":"Sprocket","itemPrice":"12.00"}]
```

#### 配列内のすべての要素を別々の行として取得する
<a name="about-json-path-arrays-separate"></a>

配列内の各要素を別々の行としてクエリを実行するには、次の構文を使用します。

```
$.arrayObject[0:].element
```

次の式では、前述の JSON の例の `orderId` 要素をクエリし、配列内の各要素は別々の行で返ります。

```
$.orders[0:].orderId
```

前述の例では、前述の JSON レコードから以下のように返ります。その際、各データ項目は別々の行で返ります。


****  

|  | 
| --- |
|  23284  | 
|  63122  | 
|  77284  | 

**注記**  
非配列要素をクエリする式が各配列要素をクエリするスキーマに含まれている場合、配列内の各要素に対して非配列要素が繰り返されます。たとえば、前述の JSON の例のスキーマに、次の式が含まれていると仮定します。  
\$1.customerName
\$1.orders[0:].orderId
この場合、サンプルの入力ストリーム要素から返されるデータ行は次のようになります。`orderId` 要素それぞれに対して、`name` 要素が繰り返されます。  


****  

|  |  | 
| --- |--- |
|  John Doe  |  23284  | 
|  John Doe  |  63122  | 
|  John Doe  |  77284  | 

**注記**  
Amazon Kinesis Data Analytics の配列式には、次の制限が適用されます。  
配列式でサポートされる参照解除レベルは 1 つのみです。次の式形式はサポートされていません。  

  ```
  $.arrayObject[0:].element[0:].subElement
  ```
スキーマにフラット化できる配列は 1 つのみです。複数の配列を参照する場合、配列のすべての要素を含む 1 つの行で返されます。ただし、個々の行として返る各要素には、1 つの配列のみ持つことができます。  
次の形式の要素を含むスキーマは有効です。この形式では、1 つの列として 2 番目の配列の内容が返り、最初の配列の各要素が繰り返されます。  

  ```
  $.arrayObjectOne[0:].element
  $.arrayObjectTwo[0:]
  ```
次の形式の要素を含むスキーマは無効です。  

  ```
  $.arrayObjectOne[0:].element
  $.arrayObjectTwo[0:].element
  ```

## その他の考慮事項
<a name="about-json-path-other"></a>

JSONPath を操作するには、他にも次のような考慮事項があります。
+ アプリケーションスキーマの JSONPath 式に各要素からアクセスされる配列がない場合、処理される JSON レコードごとに単一の行がアプリケーションの入力ストリームに作成されます。
+ 配列がフラット化された場合 (つまり、要素が個別の行として返される場合)、null 値となる欠落した要素はすべてアプリケーション内のストリームで作成されます。
+ 配列は常に少なくとも 1 つの行にフラット化されます。返される値がない場合 (つまり、配列が空またはクエリされている要素が存在しない)、すべての値が null で 1 つの行が返ります。

  次の式では、前述の JSON の例から null 値を含むレコードが返ります。これは、指定のパスに一致する要素がないためです。

  ```
  $.orders[0:].itemId
  ```

  前述の例では、前述の JSON のサンプルレコードから次のように返ります。  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/kinesisanalytics/latest/dev/about-json-path.html)

## 関連トピック
<a name="about-json-path.Related"></a>
+ [JSON のご紹介](http://www.json.org/)