

# AWS Glue マネージド変換によるデータの変換
<a name="edit-jobs-transforms"></a>

 AWS Glue Studio には、次の 2 種類の変換が用意されています。
+  AWS Glue ネイティブ変換 - すべてのユーザーが利用でき、AWS Glue によって管理されます。
+  カスタムビジュアル変換 - 自分のカスタムビジュアル変換をアップロードして、AWS Glue Studio で使用できます。

## AWS Glue マネージドデータ変換ノード
<a name="edit-jobs-transforms-glue-managed"></a>

AWS Glue Studio には、データを処理するために使用できる一式の組み込み変換が用意されています。データは、ジョブ図内のあるノードから `DynamicFrame` と呼ばれるデータ構造の別のノードに渡されます。これは、Apache Spark SQL `DataFrame` の拡張機能です。

事前設定されたジョブ図では、データソースとデータターゲットノード間で、**スキーマ変更**変換ノードを使用できます。この変換ノードを設定すると、データを修正したり、他の変換を使用できます。

AWS Glue Studio を用いて、次のbuilt-in 変換が利用可能です。
+ **[ChangeSchema](transforms-configure-applymapping.md)**: データソースのデータプロパティキーを、データターゲットのデータプロパティキーにマッピングします。キーの名前を変更したり、データ型を変更したり、データセットから削除するキーを選択できます。
+ **[SelectFields](transforms-configure-select-fields.md)**: 保持したいデータプロパティキーを選択します。
+ **[DropFields](transforms-configure-drop-fields.md)**: 削除したいデータプロパティキーを選択します。
+ **[RenameField](transforms-configure-rename-field.md)**: 単一のデータプロパティキーの名前を変更します。
+ **[Spigot](transforms-configure-spigot.md)**:Amazon S3 バケットにデータのサンプルを書き込みます。
+ **[Join](transforms-configure-join.md)**: 指定したデータプロパティキー上の比較フレーズを使用して、2 つのデータセットを 1 つに結合します。結合タイプは、内部結合、外部結合、左結合、右結合、左半結合、左反結合を使用できます。
+ **[Union](transforms-configure-union.md)**: 同じスキーマを持つ複数のデータソースの行を結合します。
+ **[SplitFields](transforms-configure-split-fields.md)**: データプロパティキーを 2 つの `DynamicFrames` に分割します。出力は `DynamicFrames` のコレクションです。一方は選択したデータプロパティキー、他方は残っている方のデータプロパティキーを持ちます。
+ **[SelectFromCollection](transforms-selectfromcollection-overview.md)**： `DynamicFrame` のコレクションから を 1 つの `DynamicFrames` を選択します。出力は選択された `DynamicFrame` です。
+ [**[FillMissingValues](transforms-configure-fmv.md)**]：欠落値があるデータセットの記録を配置し、代入によって決定された提案値を用いた新しいフィールドを追加します。
+ **[Filter](transforms-filter.md)**: フィルター条件に基づいて、データセットを 2 つに分割します。
+  **[[Drop Null Fields]](transforms-dropnull-fields.md)**: 列のすべての値が「null」の場合、データセットから列を削除します。
+  ** [[Drop Duplicates]](transforms-drop-duplicates.md)**: 行全体を照合するか、キーを指定するかを選択して、データソースから行を削除します。
+ **[SQL](transforms-sql.md)**:SparkSQL コードをテキスト入力フィールドに入力して、データを変換するために SQL クエリを使用します。出力は、単一の `DynamicFrame` です。
+  **[Aggregate](transforms-aggregate-fields.md)**: 選択したフィールドと行で計算 (平均、合計、最小、最大など) を実行し、計算された値を使って新しいフィールドを作成します。
+ **[Flatten](transforms-flatten.md)**: Struct 内のフィールドを最上位のフィールドに抽出します。
+ **[UUID](transforms-uuid.md)**: 各行にユニバーサル一意識別子を含む列を追加します。
+ **[Identifier](transforms-identifier.md)**: 各行に数値識別子を含む列を追加します。
+ **[To timestamp](transforms-to-timestamp.md)**: 列をタイムスタンプタイプに変換します。
+ **[Format timestamp](transforms-format-timestamp.md)**: タイムスタンプ列をフォーマットされた文字列に変換します。
+ **[Conditional Router transform](transforms-conditional-router.md)**: 受信データに複数の条件を適用します。受信データの行はそれぞれグループフィルター条件により評価され、対応するグループに取り入れて処理されます。
+  **[[列の連結] 変換](transforms-concatenate-columns.md)**: オプションのスペーサーを使用して、他の列の値を使った新しい文字列の列を作成します。
+  **[[文字列の分割] 変換](transforms-split-string.md)**: 正規表現を使用して文字列をトークンの配列に分割し、分割方法を定義します。
+  **[[配列から列へ] 変換](transforms-array-to-columns.md)**: 配列タイプの列の一部またはすべての要素を抽出し、新しい列に追加します。
+  **[[現在のタイムスタンプを追加] 変換](transforms-add-current-timestamp.md)**: データが処理された時刻で行をマークします。これは、監査目的やデータパイプラインでのレイテンシーの追跡に役立ちます。
+  **[[行から列へのピボット] 変換](transforms-pivot-rows-to-columns.md)**: 選択した列の固有の値を回転させて数値列を集約し、新しい列にします。複数の列を選択した場合、値が連結されて新しい列に名前が付けられます。
+  **[[列から行へのピボット解除] 変換](transforms-unpivot-columns-to-rows.md)**: 列を新しい列の値に変換し、固有の値ごとに行を生成します。
+  **[[オートバランス処理] 変換](transforms-autobalance-processing.md)**: データをワーカー間でより適切に再配分します。これは、データのバランスが取れていない場合や、ソースから取得したデータでは十分に並行処理ができない場合に役立ちます。
+  **[[派生列] 変換](transforms-derived-column.md)**: 数式または SQL 式に基づいて新しい列を定義します。これらの式では、データ内の他の列および定数やリテラルを使用できます。
+  **[[ルックアップ] 変換](transforms-lookup.md)**: キーがデータ内の定義済みのルックアップ列と一致する場合、定義済みのカタログテーブルから列を追加します。
+  **[[配列またはマップを行に分解] 変換](transforms-explode-array.md)**: ネストされたデータ構造から値を抽出し、操作しやすい個々の行に値を追加します。
+  **[レコードマッチング変換](transforms-record-matching.md)**: 既存のレコードマッチング機械学習データ分類変換を呼び出します。
+  **[null 行変換を削除](transforms-remove-null-rows.md)**: すべての列が null または空の行をデータセットから削除します。
+  **[JSON 列変換の解析](transforms-parse-json-column.md)**: JSON データを含む文字列の列を解析し、JSON がオブジェクトか配列かに応じて、それぞれを構造体または配列の列に変換します。
+  **[JSON パス変換の抽出](transforms-extract-json-path.md)**: JSON 文字列の列から新しい列を抽出します。
+  **[正規表現から文字列の断片を抽出](transforms-regex-extractor.md)**: 正規表現を使用して文字列の断片を抽出し、そこから新しい列を作成します。正規表現グループを使用する場合は、複数の列を作成します。
+ **[Custom transform](transforms-custom.md)**: カスタム transforms を使用するために、テキスト入力フィールドにコードを入力します。出力は、`DynamicFrames` のコレクションです。

# AWS Glue Studio でのデータ準備レシピの使用
<a name="glue-studio-data-preparation"></a>

 **[データ準備レシピ]** 変換を使用すると、インタラクティブなグリッドスタイルオーサリングインターフェイスを使用して、データ準備レシピを最初から作成できます。また、既存の AWS Glue DataBrew レシピをインポートし、AWS Glue Studio で編集することもできます。

 **データ準備レシピ**ノードは、リソースパネルから使用できます。**データ準備レシピ**ノードは、データソースノードであるか別の変換ノードであるかに関らず、ビジュアルワークフロー内の別のノードに接続できます。AWS Glue DataBrew レシピとバージョンを選択すると、レシピに適用されたステップがノードのプロパティタブに表示されます。

## 前提条件
<a name="glue-studio-databrew-prerequisites"></a>
+  AWS Glue DataBrew レシピをインポートする場合、「[AWS Glue Studio で AWS Glue DataBrew レシピをインポートする](glue-studio-data-preparation-import-recipe.md)」で説明されているように、必要な IAM アクセス許可があります。
+  データプレビューセッションを作成する必要があります。

## 制限事項
<a name="glue-studio-databrew-limitations"></a>
+  AWS Glue DataBrew レシピは、[商用 DataBrew リージョン](https://docs.aws.amazon.com/general/latest/gr/databrew.html)でのみサポートされています。
+  すべての AWS Glue DataBrew レシピが AWS Glue でサポートされているわけではありません。一部のレシピは AWS Glue Studio では実行できません。
  +  `UNION` および `JOIN` 変換を使用するレシピはサポートされていませんが、AWS Glue Studio には、**データ準備レシピ**ノードの前後で使用できる「Union」および「Join」変換ノードが既に存在します。
+  **データ準備レシピ**ノードは AWS Glue バージョン 4.0 以降のジョブでサポートされています。このバージョンは、**データ準備レシピ**ノードがジョブに追加されると自動選択されます。
+  **データ準備レシピ**ノードには Python が必要です。Python は、**データ準備レシピ**ノードがジョブに追加されると自動設定されます。
+  ビジュアルグラフに新しい**データ準備レシピ**ノードを追加すると、**データ準備レシピ**ノードを使用する正しいライブラリでデータプレビューセッションが自動的に再開されます。
+  **データ準備レシピ**ノードでのインポートまたは編集では、`GROUP_BY`、`PIVOT`、`UNPIVOT`、および `TRANSPOSE` の変換はサポートされていません。

## その他の機能
<a name="glue-studio-data-preparation-recipe-transform-features"></a>

 **[データ準備レシピ]** 変換を選択すると、**[レシピの作成]** を選択した後に追加のアクションを実行できます。
+  ステップの追加 – ステップの追加アイコンを選択するか、[プレビュー] ペインのツールバーを使用してアクションを選択して、必要に応じてレシピにステップを追加できます。  
![\[スクリーンショットはレシピの追加アイコンを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/add-recipe-icon.png)  
![\[スクリーンショットはレシピの追加アイコンを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/author-recipe-toolbar.png)
+  レシピのインポート — **[その他]** を選択し、AWS Glue Studio ジョブで使用する**レシピをインポート**します。  
![\[スクリーンショットは、その他アイコンを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/data-preparation-recipe-node-more-icon.png)  
![\[スクリーンショットは、その他アイコンを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/data-preparation-recipe-node-more-features.png)
+  YAML としてダウンロード – **[その他]**、次に **[YAML としてダウンロード]** を選択してレシピをダウンロードし、AWS Glue Studio の外部に保存します。
+  JSON としてダウンロード – **[その他]**、次に **[JSON としてダウンロード]** を選択してレシピをダウンロードし、AWS Glue Studio の外部に保存します。
+  レシピステップの元に戻すとやり直す – グリッドでデータを操作するときに、[プレビュー] ペインでレシピステップを元に戻したりやり直したりすることができます。  
![\[スクリーンショットは、その他アイコンを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/author-recipe-toolbar-undo-redo.png)

# ビジュアル ETL AWS Glue ジョブにおけるデータ準備レシピの作成および実行
<a name="glue-studio-data-preparation-recipe-transform-tutorial"></a>

 このシナリオでは、DataBrew で最初に作成しなくても、データ準備レシピを作成できます。レシピの作成を開始する前に、以下を行う必要があります。
+  アクティブなデータプレビューセッションが実行されている。データプレビューセッションが準備完了になると、**[レシピの作成]** がアクティブになり、レシピの作成または編集を開始できます。  
![\[このスクリーンショットは、データプレビューセッションが完了したことを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/data-preparation-recipe-data-preview-complete.png)
+  **[Glue ライブラリを自動的にインポート]** のトグルが有効になっていることを確認します。  
![\[このスクリーンショットは、[Glue ライブラリを自動的にインポート] のオプションがオンになっていることを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/data-preparation-recipe-automatically-import-glue-libraries.png)

   これを行うには、[データプレビュー] ペインで歯車アイコンを選択します。  
![\[このスクリーンショットは、[Glue ライブラリを自動的にインポート] のオプションがオンになっていることを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/data-preview-preferences.png)

**AWS Glue Studio でデータ準備レシピを作成するには:**

1.  **[データ準備レシピ]** 変換をジョブキャンバスに追加します。変換はデータソースノードの親に接続する必要があります。**[データ準備レシピ]** ノードを追加すると、ノードが適切なライブラリで再起動し、データフレームが準備中であることがわかります。  
![\[このスクリーンショットは、[データ準備レシピ] を追加した後のデータフレームのロードを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/data-preparation-preparing-dataframe.png)

1.  データプレビューセッションが準備完了になると、以前に適用されたステップを含むデータが画面の下部に表示されます。

1.  **[レシピの作成]** を選択します。これにより、AWS Glue Studio で新しいレシピを開始できます。  
![\[このスクリーンショットは、[名前] と [ノードの親] のフィールドと、レシピを作成するオプションを含む [変換] パネルを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/data-preparation-recipe-transform-tab-new.png)

1.  ジョブキャンバスの右側にある **[変換]** パネルに、データ準備レシピの名前を入力します。

1.  左側では、キャンバスはデータのグリッドビューに置き換えられます。右側には、**[変換]** パネルが変化し、レシピのステップが表示されます。**[ステップの追加]** を選択して、レシピの最初のステップを追加します。  
![\[このスクリーンショットは、[ステップの追加] を選択した後の [変換] パネルを示しています。列を選択すると、オプションが動的に変わります。ソート、列に対するアクションの実行、および値のフィルタリングを選択できます。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/author-recipe-preview-data-transform-panel.png)

1.  **[変換]** パネルで、ソート、列に対するアクションの実行、値のフィルタリングを選択します。例えば、**[列の名前変更]** を選択します。  
![\[このスクリーンショットは、[ステップの追加] を選択した後の [変換] パネルを示しています。列を選択すると、オプションが動的に変わります。ソート、列に対するアクションの実行、および値のフィルタリングを選択できます。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/author-recipe-add-step.png)

1.  右側の [変換] パネルで、列の名前を変更するオプションを使用して、名前を変更するソース列を選択し、新しい列名を入力できます。完了したら、**[適用]** を選択します。

    各ステップをプレビューしたり、ステップを元に戻したり、ステップを並べ替えたり、フィルター、ソート、分割、マージなどのアクションアイコンを使用できます。データグリッドでアクションを実行すると、[変換] パネルのレシピにステップが追加されます。  
![\[このスクリーンショットは、ツールバーが強調表示されたプレビューデータグリッドを示しています。いずれかのツールを使用してアクションを適用できます。アクションは右側の [変換] パネルのレシピに追加されます。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/author-recipe-preview-data-grid.png)

    変更を加える必要がある場合は、各ステップの結果をプレビューし、ステップを元に戻し、ステップの順序を変更することで、[プレビュー] ペインでこれを行うことができます。例: 
   +  ステップを元に戻す/やり直す – **[元に戻す]** アイコンを選択してステップを元に戻します。**[やり直す]** アイコンを選択すると、ステップを繰り返すことができます。  
![\[スクリーンショットは、その他アイコンを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/author-recipe-toolbar-undo-redo.png)
   +  ステップの順序を変更する – ステップの順序を変更すると、AWS Glue Studio は各ステップを検証し、そのステップが無効かどうかを知らせます。

1.  ステップを適用すると、[変換] パネルにレシピのすべてのステップが表示されます。すべてのステップをクリアして最初からやり直したり、追加アイコンを選択してさらにステップを追加したり、**[レシピの作成を完了]** を選択したりできます。  
![\[このスクリーンショットは、レシピにステップが追加された [変換] パネルを示しています。完了したら、[レシピの作成を完了] を選択するか、追加アイコンを選択してレシピにさらにステップを追加します。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/author-recipe-done-authoring-recipe.png)

1.  画面の右上にある **[保存]** を選択します。レシピステップは、ジョブを保存するまで保存されません。

# AWS Glue Studio で AWS Glue DataBrew レシピをインポートする
<a name="glue-studio-data-preparation-import-recipe"></a>

 AWS Glue DataBrew では、一連のデータ変換ステップをレシピといいます。AWS Glue DataBrew レシピには読み取り済みデータの変換方法は規定されていますが、データを読み取る場所と方法、およびデータを書き込む場所と方法は記載されていません。これは、AWS Glue Studio のソースノードとターゲットノードで設定します。レシピの詳細については、「[Creating and using AWS Glue DataBrew recipes](https://docs.aws.amazon.com/databrew/latest/dg/recipes.html)」を参照してください。

 AWS Glue Studio で AWS Glue DataBrew レシピを使用するには、最初に AWS Glue DataBrew でレシピを作成します 使用するレシピがある場合は、このステップを省略できます。

## AWS Glue DataBrew に対する IAM アクセス許可
<a name="glue-studio-databrew-permissions"></a>

 このトピックでは、IAM 管理者がデータ準備レシピ変換の AWS Identity and Access Management (IAM) ポリシーで使用できるアクションとリソースを理解するための情報について説明します。

 AWS Glue のセキュリティに関する追加情報については、「[Access Management](https://docs.aws.amazon.com/glue/latest/dg/security.html)」を参照してください。

**注記**  
 次の表に、既存の AWS Glue DataBrew レシピをインポートするときにユーザーが必要とするアクセス許可を示します。


**データ準備レシピ変換アクション**  

| アクション | 説明 | 
| --- | --- | 
| databrew:ListRecipes | AWS Glue DataBrew レシピを取得するアクセス許可を付与します。 | 
| databrew:ListRecipeVersions | AWS Glue DataBrew レシピバージョンを取得するアクセス許可を付与します。 | 
| databrew:DescribeRecipe | AWS Glue DataBrew レシピの説明を取得するアクセス許可を付与します。 | 



 この機能へのアクセスに使用するロールには、複数の AWS Glue DataBrew アクションを許可するポリシーが必要です。これを実現するには、必要なアクションを含む `AWSGlueConsoleFullAccess` ポリシーを使用するか、次のインラインポリシーをロールに追加します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "databrew:ListRecipes",
        "databrew:ListRecipeVersions",
        "databrew:DescribeRecipe"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
```

------



 データ準備レシピ変換を使用するには、アクセス許可ポリシーに `IAM:PassRole` アクションを追加する必要があります。


**追加で必要な許可**  

| アクション | 説明 | 
| --- | --- | 
| iam:PassRole | 承認済みのロールをユーザーが渡すことを許可するアクセス許可を、IAM に付与します。 | 

これらのアクセス許可がないと、次のエラーが発生します。

```
"errorCode": "AccessDenied"
"errorMessage": "User: arn:aws:sts::account_id:assumed-role/AWSGlueServiceRole is not 
authorized to perform: iam:PassRole on resource: arn:aws:iam::account_id:role/service-role/AWSGlueServiceRole 
because no identity-based policy allows the iam:PassRole action"
```



## AWS Glue DataBrew レシピのインポート
<a name="glue-studio-databrew-import-steps"></a>

**AWS Glue DataBrew レシピをインポートして AWS Glue Studio で使用するには:**

 既存の**データ準備レシピ**ノードがあり、AWS Glue Studio でレシピステップを直接編集する場合は、レシピステップを AWS Glue Studio ジョブにインポートする必要があります。

1.  データソースを使用して、AWS Glue Studio で AWS Glue ジョブを開始します。

1.  **[データ準備レシピ]** ノードをジョブキャンバスに追加します。  
![\[スクリーンショットは、選択可能なデータ準備レシピを含むノードモーダルの追加を示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/glue-add-node-data-preparation-recipe.png)

1.  [変換] パネルで、レシピの名前を入力します。

1.  ドロップダウンリストからキャンバスで使用可能なノードを選択して、1 つ以上の親ノードを選択します。

1.  **[レシピの作成]** を選択します。**[作成者レシピ]** が灰色の場合、ノードの親が選択され、データプレビューセッションが完了するまで使用できません。  
![\[Author Data Preparation Recipe form with name field and node parents selection dropdown.\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/glue-author-data-preparation-recipe.png)

1.  データフレームはロードされ、ソースデータに関する詳細情報が表示されます。

    **[その他のアクション]** アイコンを選択し、**[レシピのインポート]** を選択します。  
![\[Data preparation interface showing "Build your Recipe" with an "Add step" button.\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/glue-dataframe-import-recipe.png)

1.  レシピのインポートウィザードを使用して、ステップを完了します。ステップ 1 で、レシピを検索して選択し、**[次へ]** を選択します。  
![\[Import recipe interface showing two recipes, with one selected for import.\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/import-recipe-step-1.png)

1.  ステップ 2 で、インポートオプションを選択します。新しいレシピを既存のレシピに追加するか、既存のレシピを上書きするかを選択できます。[**次へ**] を選択します。  
![\[Import recipe interface showing selected recipe, version, and two imported steps.\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/import-recipe-step-2.png)

1.  ステップ 3 で、レシピステップを検証します。AWS Glue DataBrew レシピをインポートしたら、このレシピを AWS Glue Studio で直接編集できます。  
![\[Recipe import interface showing two steps and a validation progress indicator.\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/import-recipe-step-3.png)  
![\[Import recipe interface showing validated steps for sorting and formatting data.\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/import-recipe-step-3-validated-2.png)

1.  その後、ステップは AWS Glue ジョブの一部としてインポートされます。必要に応じてジョブに名前を付けたり、割り当てられた容量を調整したりして、**[ジョブの詳細]** タブで必要な設定変更を行います。**[保存]** を選択して、ジョブとレシピを保存します。
**注記**  
 JOIN、UNION、GROUP\$1BY、PIVOT、UNPIVOT、TRANSPOSE はレシピのインポートではサポートされず、レシピ作成モードでも使用できません。

1.  必要に応じて、その他の変換ノードを追加してジョブ作成を終了し、データターゲットノードを追加できます。

    レシピをインポートした後にステップの順序を変更すると、AWS Glue はそれらのステップの検証を実行します。例えば、列の名前を変更してから削除し、削除ステップを先頭に移動した場合、名前変更ステップは無効です。その後、ステップを編集して検証エラーを修正できます。

# AWS Glue DataBrew から AWS Glue Studio への移行
<a name="databrew-migration-to-glue-studio"></a>

 AWS Glue DataBrew にレシピがある場合は、次のチェックリストを使用してレシピを AWS Glue Studio に移行します。


| 目的 | こちらを実行してください | 
| --- | --- | 
|  ユーザーに AWS Glue DataBrew レシピ、レシピバージョン、レシピの説明の取得を許可します。 |  ロールが必要なアクションにアクセスできるようにするポリシーに IAM アクセス許可を追加します。「[AWS Glue DataBrew に対する IAM アクセス許可](glue-studio-data-preparation-import-recipe.md#glue-studio-databrew-permissions)」を参照してください。 | 
|  既存の AWS Glue DataBrew レシピを AWS Glue Studio にインポートします。 |  「[AWS Glue DataBrew レシピのインポート](glue-studio-data-preparation-import-recipe.md#glue-studio-databrew-import-steps)」のステップを実行してください。 | 
|  JOIN と UNION を使用してレシピをインポートします。 |  UNION 変換と JOIN 変換を含むレシピはサポートされていません。Data Preparation Recipe ノードの前後に AWS Glue Studio で [結合] 変換と [ユニオン] 変換を使用します。 | 

# スキーマの変更によるデータプロパティキーの再マッピング
<a name="transforms-configure-applymapping"></a>

スキーマ変更変換を使用して、ソースデータのプロパティキーをターゲットデータに適切な設定に再マッピングします。スキーマ変更変換ノードでは、次のことができます。
+ 複数のデータプロパティキーの名前の変更。
+ 新しいデータ型がサポートされており、2 つのデータ型間の変換パスがある場合、データプロパティキーのデータ型の変更。
+ 削除するデータプロパティキーの指定によるデータプロパティキーのサブセットの選択。

また、必要に応じて、ジョブ図に*スキーマ変更*ノードを追加できます。例えば、追加のデータソースを変更する場合や、*Join* 変換の後に続く場合などです。

## 10 進データ型で Change Schema を使用する
<a name="transforms-configure-applymapping-decimal-datatype"></a>

 10 進データ型で **Change Schema** 変換を使用する場合、**Change Schema** 変換は精度をデフォルト値 (10,2) に変更します。これを変更してユースケースの精度を設定するには、**SQL クエリ**変換を使用して特定の精度で列をキャストできます。

 例えば、「DecimalCol」という名前の入力列が 10 進数タイプで、それを特定の精度 (18,6) で「OutputDecimalCol」という名前の出力列に再マップする場合、次のようになります。

1.  **Change Schema** 変換後に後続の **SQL クエリ**変換を追加します。

1.  **SQL クエリ**変換では、SQL クエリを使用して、再マッピングされた列を希望の精度にキャストします。SQL クエリは次のようになります。

   ```
   SELECT col1, col2, CAST(DecimalCol AS DECIMAL(18,6)) AS OutputDecimalCol
   FROM __THIS__
   ```

    上記の SQL クエリで、次の操作を行います。
   +  「col1」と「col2」は、変更せずに渡すデータ内の他の列です。
   +  「DecimalCol」は入力データの元の列名です。
   +  「CAST(DecimalCol AS DECIMAL(18,6))」は、「DecimalCol」を 18 桁と 6 桁の小数点以下 6 桁の精度を持つ 10 進数型にキャストします。
   +  「AS OutputDecimalCol」は、キャストされた列の名前を 「OutputDecimalCol」に変更します。

 **SQL クエリ**変換を使用すると、**Change Schema** 変換で設定されたデフォルトの精度を上書きし、10 進数の列を目的の精度に明示的にキャストできます。このアプローチにより、**Change Schema** 変換を活用してデータの名前変更と再構築を行い、その後の **SQL クエリ**変換を通じて 10 進数列の精度要件を処理できます。

## Change Schema 変換をジョブに追加
<a name="transforms-configure-applymapping-add-to-job"></a>

**注記**  
スキーマ変更変換は、大文字と小文字を区別しません。

**スキーマ変更変換ノードをジョブ図に追加するには**

1. (オプション) リソースパネルを開いて、**[スキーマを変更する]** を選択し、必要に応じてジョブ図に新しい変換を追加します。

1. ノードのプロパティパネルで、ジョブ図にノード名を入力します。ノードの親がまだ選択されていない場合、[**Node parents**] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. ノードのプロパティパネルで、**[変換]** タブを選択します。

1. その後、入力スキーマを変更します。
   + データプロパティキーの名前を変更するには、キーの新しい名前を[**Target key**] (ターゲットキー) フィールドに入力します。
   + データプロパティキーのデータ型を変更するには、[**Data type**] (データ型) リストから、新しいデータ型を選択します。
   + ターゲットスキーマからデータプロパティキーを削除するには、そのキーの [**Drop**] (削除) チェックボックスをオンにします。

1. (オプション) 変換ノードのプロパティを設定した後、ノードの詳細パネルの [**Output schema**] (出力スキーマ) タブを選択して、データ用に変更されたスキーマを表示できます。ジョブ内の任意のノードに対してこのタブを初めて選択すると、データにアクセスする IAM ロールを指定するよう求められます。[**Job details**] (ジョブの詳細) タブで IAM ロールをまだ指定していない場合、ここで IAM ロールを入力するよう求められます。

1. (オプション) ノードおよび変換のプロパティを設定した後、ノードの詳細パネルの [**Data preview**] (データのプレビュー) タブを選択して、変更されたデータセットをプレビューできます。ジョブ内の任意のノードに対してこのタブを初めて選択すると、データにアクセスする IAM ロールを指定するよう求められます。この機能を使用するには費用がかかり、IAM ロールを指定するとすぐに請求が開始します。

# Drop Duplicates を使用する
<a name="transforms-drop-duplicates"></a>

 Drop Duplicates 変換では、2 つのオプションによってデータソースから行を削除します。完全に一致した重複する行を削除するか、照合するフィールドを選択して、選択したフィールドに基づいて重複する行のみを削除するかのどちらかを選択できます。

 例えば、次のデータセットには重複する行があり、行内の一部の値が一致していたり異なっていたりします。また、いくつかの行は、別の行とすべての値が完全に一致しています。


| 行 | 名前 | E メール | 年齢 | State | メモ | 
| --- | --- | --- | --- | --- | --- | 
| 1 | Joy | joy@gmail | 33 | NY |  | 
| 2 | Tim | tim@gmail | 45 | OH |  | 
| 3 | Rose | rose@gmail | 23 | NJ |  | 
| 4 | Tim | tim@gmail | 42 | OH |  | 
| 5 | Rose | rose@gmail | 23 | NJ |  | 
| 6 | Tim | tim@gmail | 42 | OH | これは重複した行であり、行 4 とすべての値が完全に一致しています | 
| 7 | Rose | rose@gmail | 23 | NJ | これは重複した行であり、行 5 とすべての値が完全に一致しています | 

 行全体で照合することを選択した場合、行 6 と 7 はデータセットから削除されます。データセットは次のようになります。


| 行 | 名前 | E メール | 年齢 | State | 
| --- | --- | --- | --- | --- | 
| 1 | Joy | joy@gmail | 33 | NY | 
| 2 | Tim | tim@gmail | 45 | OH | 
| 3 | Rose | rose@gmail | 23 | NJ | 
| 4 | Tim | tim@gmail | 42 | OH | 
| 5 | Rose | rose@gmail | 23 | NJ | 

 キーを指定することを選択した場合、「名前」と「Email (メール)」が一致する行を削除するように選択できます。これにより、データセットの「重複する行」をより細かく制御できます。「名前」と「Email (メール)」を指定すると、データセットは次のようになります。


| 行 | 名前 | E メール | 年齢 | State | 
| --- | --- | --- | --- | --- | 
| 1 | Joy | joy@gmail | 33 | NY | 
| 2 | Tim | tim@gmail | 45 | OH | 
| 3 | Rose | rose@gmail | 23 | NJ | 



 留意すべき点 
+  行の重複を認識するため、値では大文字と小文字が区別されます。行のすべての値は、大文字と小文字も一致する必要があります。これは、選択したオプション (行全体での一致/指定キーでの一致) のどちらにも当てはまります。
+  すべての値は文字列として読み込まれます。
+  **Drop Duplicates** 変換は、Spark の dropDuplicates コマンドを使用します。
+  **Drop Duplicates** 変換を使用すると、最初の行は保持され、他の行は削除されます。
+  **Drop Duplicates** 変換は、データフレームのスキーマを変更しません。キーの指定を選択した場合、生成されたデータフレームにはすべてのフィールドが保持されます。

# SelectFields を使用して大多数のデータプロパティキーを削除する
<a name="transforms-configure-select-fields"></a>

*SelectFields* 変換を使用して、データセットからデータプロパティキーのサブセットを作成できます。保持するデータプロパティキーを指定します。残りはデータセットから削除されます。

**注記**  
*SelectFields* 変換では、大文字と小文字が区別されます。大文字と小文字を区別しない方法でフィールドを選択する必要がある場合は、*ApplyMapping* を使用します。

**SelectFields 変換ノードをジョブ図に追加するには**

1. (オプション) リソースパネルを開いて、**[SelectFields]** を選択し、必要に応じてジョブ図に新しい変換を追加します。

1. [**Node properties**] (ノードのプロパティ) タブで、ジョブ図のノードの名前を入力します。ノードの親がまだ選択されていない場合は、[**Node parents**] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. ノードの詳細パネルで [**Transform**] (変換) タブを選択します。

1. 見出し [**SelectFields**] の下にある、保持するデータセット内のデータプロパティキーを選択します。選択されていないデータプロパティキーは、データセットから削除されます。

   列見出し [**Field**] (フィールド) の横にあるチェックボックスをオンにして、データセット内のすべてのデータプロパティキーを自動的に選択することもできます。その後、個々のデータプロパティキーの選択を解除して、それらをデータセットから削除できます。

1. (オプション) 変換ノードのプロパティを設定した後、ノードの詳細パネルの [**Output schema**] (出力スキーマ) タブを選択して、データ用に変更されたスキーマを表示できます。ジョブ内の任意のノードに対してこのタブを初めて選択すると、データにアクセスする IAM ロールを指定するよう求められます。[**Job details**] (ジョブの詳細) タブで IAM ロールをまだ指定していない場合、ここで IAM ロールを入力するよう求められます。

1. (オプション) ノードおよび変換のプロパティを設定した後、ノードの詳細パネルの [**Data preview**] (データのプレビュー) タブを選択して、変更されたデータセットをプレビューできます。ジョブ内の任意のノードに対してこのタブを初めて選択すると、データにアクセスする IAM ロールを指定するよう求められます。この機能を使用するには費用がかかり、IAM ロールを指定するとすぐに請求が開始します。

# DropFields を使用して大多数のデータプロパティキーを保持する
<a name="transforms-configure-drop-fields"></a>

*DropFields* 変換を使用して、データセットからデータプロパティキーのサブセットを作成できます。データセットから削除するデータプロパティキーを指定します。残りのキーは保持されます。

**注記**  
*DropFields* 変換では、大文字と小文字が区別されます。大文字と小文字を区別しない方法でフィールドを選択する必要がある場合は、スキーマ変更を使用します。

**ジョブ図に DropFields 変換ノードを追加するには**

1. (オプション) リソースパネルを開いて、**[DropFields]** を選択し、必要に応じてジョブ図に新しい変換を追加します。

1. [**Node properties**] (ノードのプロパティ) タブで、ジョブ図のノードの名前を入力します。ノードの親がまだ選択されていない場合は、[**Node parents**] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. ノードの詳細パネルで [**Transform**] (変換) タブを選択します。

1. 見出し [**DropFields**] の下で、データソースから削除するデータプロパティキーを選択します。

   列見出し [**Field**] (フィールド) の横にあるチェックボックスをオンにして、データセット内のすべてのデータプロパティキーを自動的に選択することもできます。その後、個々のデータプロパティキーの選択を解除して、それらをデータセット内に保持できます。

1. (オプション) 変換ノードのプロパティを設定した後、ノードの詳細パネルの [**Output schema**] (出力スキーマ) タブを選択して、データ用に変更されたスキーマを表示できます。ジョブ内の任意のノードに対してこのタブを初めて選択すると、データにアクセスする IAM ロールを指定するよう求められます。[**Job details**] (ジョブの詳細) タブで IAM ロールをまだ指定していない場合、ここで IAM ロールを入力するよう求められます。

1. (オプション) ノードおよび変換のプロパティを設定した後、ノードの詳細パネルの [**Data preview**] (データのプレビュー) タブを選択して、変更されたデータセットをプレビューできます。ジョブ内の任意のノードに対してこのタブを初めて選択すると、データにアクセスする IAM ロールを指定するよう求められます。この機能を使用するには費用がかかり、IAM ロールを指定するとすぐに請求が開始します。

# データセット内のフィールドの名前を変更する
<a name="transforms-configure-rename-field"></a>

*RenameField* 変換を使用して、データセット内の個々のプロパティキーの名前を変更します。

**注記**  
*RenameField* 変換では、大文字と小文字が区別されます。大文字と小文字を区別しないで変換する必要がある場合は、*ApplyMapping* を使用します。

**ヒント**  
スキーマ変更変換では、1 回の変換でデータセット内に存在する複数のデータプロパティキーの名前を変更できます。

**RenameField 変換ノードをジョブ図に追加するには**

1. (オプション) リソースパネルを開いて、**[RenameField]** を選択し、必要に応じてジョブ図に新しい変換を追加します。

1. [**Node properties**] (ノードのプロパティ) タブで、ジョブ図のノードの名前を入力します。ノードの親がまだ選択されていない場合は、[**Node parents**] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. [**Transform**] (変換) タブを選択します。

1. 見出し [**Data field**] (データフィールド) の下で、ソースデータからプロパティキーを選択し、その後 [**New field name**] (新しいフィールド名) フィールドに新しい名前を入力します。

1. (オプション) 変換ノードのプロパティを設定した後、ノードの詳細パネルの [**Output schema**] (出力スキーマ) タブを選択して、データ用に変更されたスキーマを表示できます。ジョブ内の任意のノードに対してこのタブを初めて選択すると、データにアクセスする IAM ロールを指定するよう求められます。[**Job details**] (ジョブの詳細) タブで IAM ロールをまだ指定していない場合、ここで IAM ロールを入力するよう求められます。

1. (オプション) ノードおよび変換のプロパティを設定した後、ノードの詳細パネルの [**Data preview**] (データのプレビュー) タブを選択して、変更されたデータセットをプレビューできます。ジョブ内の任意のノードに対してこのタブを初めて選択すると、データにアクセスする IAM ロールを指定するよう求められます。この機能を使用するには費用がかかり、IAM ロールを指定するとすぐに請求が開始します。

# Spigot を使用してデータセットをサンプリングする
<a name="transforms-configure-spigot"></a>

ジョブで実行される変換をテストするには、データのサンプルを取得して、変換が意図したとおりに機能することを確認します。*Spigot* 変換では、データセットから Amazon S3 バケットの JSON ファイルにレコードのサブセットが書き出されます。データのサンプリングには、ファイルの最初からの特定のレコード数、またはレコードの選択に使用される確率係数を使用します。

**Spigot 変換ノードをジョブ図に追加するには**

1. (オプション) リソースパネルを開いて、**[スピゴット]** を選択し、必要に応じてジョブ図に新しい変換を追加します。

1. [**Node properties**] (ノードのプロパティ) タブで、ジョブ図のノードの名前を入力します。ノードの親がまだ選択されていない場合は、[**Node parents**] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. ノードの詳細パネルで [**Transform**] (変換) タブを選択します。

1. Amazon S3 パスを入力するか、[**Browse S3**] (S3 をブラウズ) を選択して、Amazon S3 内の場所を選択します。これは、ジョブによりデータサンプルを含む JSON ファイルが書き込まれる場所です。

1. サンプリング方法に関する情報を入力します。データセットの最初から書き込む**レコード数**の値、および任意のレコードを選択する**確率のしきい値** (最大値が 1 の 10 進値として入力) を指定できます。

   例えば、データセットから最初の 50 レコードを書き込むには、**レコード数**を 50、**確率のしきい値**を 1 (100%) に設定します。

# データセットの結合
<a name="transforms-configure-join"></a>

*結合* 変換を使用すると、2 つのデータセットを 1 つに結合できます。比較する各データセットのスキーマのキー名を指定します。出力 `DynamicFrame` には、キーが結合条件を満たす行が含まれます。結合条件を満たす各データセットの行は、いずれかのデータセット内で見つかったすべての列を含む出力 `DynamicFrame` の単一の行に結合されます。

**Join (結合) 変換ノードをジョブ図に追加するには**

1. 使用可能なデータソースが 1 つしかない場合は、新しいデータソースノードをジョブ図に追加する必要があります。

1. 結合するソースノードを 1 つ選択します。リソースパネルを開いて、**[Join]** を選択し、ジョブ図に新しい変換を追加します。

1. [**Node properties**] (ノードのプロパティ) タブで、ジョブ図のノードの名前を入力します。

1. [**Node properties**] (ノードのプロパティ) タブの、見出し [**Node parents**] (ノードの親) の下で、結合の入力を提供するデータセットが 2 つ存在するように親ノードを追加します。親ノードは、データソースノードまたは変換ノードです。
**注記**  
結合すると、親ノードを 2 つだけ持つことができます。

1. [**Transform**] (変換) タブを選択します。

   競合するキー名があることを示すメッセージが表示された場合は、次のいずれかの操作を行います。
   + [**Resolve it**] (解決する) を選択して、*ApplyMapping* 変換ノードをジョブ図に自動的に追加します。ApplyMapping ノードにより、他のデータセットのキーと同じ名前を持つデータセット内のキーにプレフィックスが追加されます。例えば、デフォルト値 **right** を使用している場合、左側のデータセットと同じキー名を持つ右側のデータセットのキー名は `(right)key name` に変更されます。
   + ジョブ図に変換ノードを早期に手動で追加して、競合するキーを削除するか、名前を変更できます。

1. [**Join type**] (結合タイプ) のリストで、結合のタイプを選択します。
   + **Inner join** (内部結合): 結合条件に基づくすべての一致に対して、両方のデータセットの列を含む行を返します。結合条件を満たさない行は返されません。
   + **Left join** (左結合): 左側のデータセットのすべての行と、結合条件を満たす右側のデータセットの行の結合です。
   + **Right join** (右結合): 右側のデータセットのすべての行と、結合条件を満たす左側のデータセットの行の結合です。
   + **Outer join** (外部結合): 両方のデータセットのすべての行の結合です。
   + **Left semi join** (左半結合): 右側のデータセットで結合条件に基づく一致がある、左側のデータセットのすべての行の結合です。
   + **Left anti join** (左反結合): 右側のデータセットで結合条件に基づく一致がない、左側のデータセットのすべての行の結合です。

1. [**Transform**] (変換) タブで、見出し [**Join conditions**] (結合条件) の下にある、[**Add condition**] (条件の追加)を選択します。比較する各データセットからプロパティキーを選択します。比較演算子の左側にあるプロパティキーを左側のデータセット、右側にあるプロパティキーを右側のデータセットと呼びます。

   より複雑な結合条件の場合、[**Add condition**] (条件の追加) を複数回クリックして、他の一致するキーを追加できます。誤って条件を追加した場合は、削除アイコン (![\[\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/delete-icon-black.png)) をクリックして削除できます。

1. (オプション) 変換ノードのプロパティを設定した後、ノードの詳細パネルの [**Output schema**] (出力スキーマ) タブを選択して、データ用に変更されたスキーマを表示できます。ジョブ内の任意のノードに対してこのタブを初めて選択すると、データにアクセスする IAM ロールを指定するよう求められます。[**Job details**] (ジョブの詳細) タブで IAM ロールをまだ指定していない場合、ここで IAM ロールを入力するよう求められます。

1. (オプション) ノードおよび変換のプロパティを設定した後、ノードの詳細パネルの [**Data preview**] (データのプレビュー) タブを選択して、変更されたデータセットをプレビューできます。ジョブ内の任意のノードに対してこのタブを初めて選択すると、データにアクセスする IAM ロールを指定するよう求められます。この機能を使用するには費用がかかり、IAM ロールを指定するとすぐに請求が開始します。

結合出力スキーマの例では、次のプロパティキーを持つ 2 つのデータセット間の結合を検討します。

```
Left: {id, dept, hire_date, salary, employment_status}
Right: {id, first_name, last_name, hire_date, title}
```

結合は、`=` 比較演算子を使用して、`id` および `hire_date` キーで一致するように設定されます。

両方のデータセットに `id` および `hire_date` キーが含まれているため、[**Resolve it**] (解決する) を選択して、右側のデータセットのキーにプレフィックス **right** が自動で追加されるようにします。

出力スキーマのキーは次のようになります。

```
{id, dept, hire_date, salary, employment_status, 
(right)id, first_name, last_name, (right)hire_date, title}
```

# Union を使用して行を結合する
<a name="transforms-configure-union"></a>

 Union 変換ノードは、同じスキーマを持つ複数のデータソースの行を結合する場合に使用します。

 Union 変換には次の 2 種類があります。

1. ALL – ALL を適用すると、Union の結果として、重複する行は削除されません。

1. DISTINCT – DISTINCT を適用すると、Union の結果として、重複する行は削除されます。

 **Union と Join** 

 行を結合するには Union を使用します。列を結合するには Join を使用します。

**Visual ETL キャンバスでの Union 変換の使用**

1.  Union 変換を実行するには、複数のデータソースを追加します。データソースを追加するには、リソースパネルを開き、[ソース] タブからデータソースを選択します。Union 変換を使用する前に、Union の対象となるすべてのデータソースのスキーマと構造が同じであることを確認する必要があります。

1.  Union 変換を使用して結合したいデータソースが 2 つ以上ある場合は、キャンバスに追加して Union 変換を作成します。キャンバス上のリソースパネルを開き、「Union」を検索します。リソースパネルの [変換] タブを選択し、Union 変換が見つかるまで下にスクロールして、**[Union]** を選択することもできます。

1. ジョブキャンバスの Union ノードを選択します。ノードプロパティウィンドウで、Union 変換に接続する親ノードを選択します。

1. AWS Glue は互換性をチェックして、Union 変換がすべてのデータソースに適用できることを確認します。データソースのスキーマが同じ場合、実行できます。データソースのスキーマが同じでない場合は、無効であるというエラーメッセージが表示されます。「この Union の入力スキーマは一致していません。ApplyMapping を使用してスキーマを一致させることを検討してください」 これを修正するには、**[ApplyMapping を使用]** を選択します。

1. Union の種類を選択します。

   1. All – デフォルトでは、Union の種類として All が選択されています。これにより、データを結合したときに、重複する行は重複したままになります。

   1. Distinct – データを結合したときに、重複する行を削除したい場合は、Distinct を選択します。

# SplitFields を使用してデータセットを 2 つに分割する
<a name="transforms-configure-split-fields"></a>

*SplitFields* 変換を使用すると、入力データセット内のデータプロパティキーをいくつか選択し、それらを 1 つのデータセットに配置したり、選択されていないキーを別のデータセットに配置できます。この変換からの出力は、`DynamicFrames` のコレクションです。

**注記**  
出力をターゲットの場所に送信するには、*SelectFromCollection* 変換を使用して、`DynamicFrames` のコレクションを単一の `DynamicFrame` に変換する必要があります。

*SplitFields* 変換では、大文字と小文字が区別されます。大文字と小文字を区別しないプロパティキー名が必要な場合は、*ApplyMapping* 変換を親ノードとして追加します。

**SplitFields 変換ノードをジョブ図に追加するには**

1. (オプション) リソースパネルを開いて、**[SplitFields]** を選択し、必要に応じてジョブ図に新しい変換を追加します。

1. [**Node properties**] (ノードのプロパティ) タブで、ジョブ図のノードの名前を入力します。ノードの親がまだ選択されていない場合は、[**Node parents**] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. [**Transform**] (変換) タブを選択します。

1. 最初のデータセットに入れるプロパティキーを選択します。選択しなかったキーは、2 番目のデータセットに配置されます。

1. (オプション) 変換ノードのプロパティを設定した後、ノードの詳細パネルの [**Output schema**] (出力スキーマ) タブを選択して、データ用に変更されたスキーマを表示できます。ジョブ内の任意のノードに対してこのタブを初めて選択すると、データにアクセスする IAM ロールを指定するよう求められます。[**Job details**] (ジョブの詳細) タブで IAM ロールをまだ指定していない場合、ここで IAM ロールを入力するよう求められます。

1. (オプション) ノードおよび変換のプロパティを設定した後、ノードの詳細パネルの [**Data preview**] (データのプレビュー) タブを選択して、変更されたデータセットをプレビューできます。ジョブ内の任意のノードに対してこのタブを初めて選択すると、データにアクセスする IAM ロールを指定するよう求められます。この機能を使用するには費用がかかり、IAM ロールを指定するとすぐに請求が開始します。

1. *SelectFromCollection* 変換ノードを設定して、結果のデータセットを処理します。

# *SelectFromCollection* 変換の概要
<a name="transforms-selectfromcollection-overview"></a>

*SplitFields* のように、単一ではなく、複数のデータセットが出力される変換もあります。*SelectFromCollection* 変換では、データセットのコレクション (`DynamicFrames` の配列) から、1 つのデータセット (`DynamicFrame`) が選択されます。変換の出力は、選択された `DynamicFrame` です。

この変換は、次のような `DynamicFrames` のコレクションを作成する変換を使用した後に使用する必要があります。
+ カスタムコード変換
+ SplitFields

変換後に *SelectFromCollection* 変換ノードをジョブ図に追加しないと、ジョブでエラーが発生します。

この変換の親ノードは、`DynamicFrames` のコレクションを返すノードである必要があります。この変換ノードに、*Join* (結合) 変換などの単一の `DynamicFrame` を返す親ノードを選択すると、ジョブによりエラーが返されます。

同様に、ジョブ図の *SelectFromCollection* ノードを、入力として単一の `DynamicFrame` を想定している変換の親ノードとして使用する場合、ジョブによりエラーが返されます。

![\[このスクリーンショットは、ノードの詳細パネルの [Node properties] (ノードのプロパティ) タブでの、[Node parents] (ノードの親) フィールドを示しています。選択したノードの親は SplitFields で、「Parent node Split Fields outputs a collection, but node Drop Fields does not accept a collection. (親ノードの分割フィールドはコレクションを出力しますが、削除フィールドはコレクションを受け入れません)」というエラーメッセージが表示されています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/screenshot-edit-splitfields-wrong-parent.png)


# SelectFromCollection を使用して保持するデータセットを選択する
<a name="transforms-configure-select-collection"></a>

*SelectFromCollection* 変換を使用して、`DynamicFrames` のコレクションを単一の `DynamicFrame` に変換できます。

**SelectFromCollection 変換ノードをジョブ図に追加するには**

1. (オプション) リソースパネルを開いて、**[SelectFromCollection]** を選択し、必要に応じてジョブ図に新しい変換を追加します。

1. [**Node properties**] (ノードのプロパティ) タブで、ジョブ図のノードの名前を入力します。ノードの親がまだ選択されていない場合は、[**Node parents**] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. [**Transform**] (変換) タブを選択します。

1. 見出し [**Frame index**] (フレームインデックス)の下で、`DynamicFrames` のコレクションから選択する `DynamicFrame` に対応する配列のインデックス番号を選択します。

   例えば、この変換の親ノードが *SplitFields* 変換である場合、そのノードの [**Output schema**] (出力スキーマ) タブで各 `DynamicFrame` のスキーマを表示できます。[**出力 2**] のスキーマに関連付けられている `DynamicFrame` を保持する場合、**フレームインデックス**の値は **1** を選択します。これは、リストの 2 番目の値です。

   選択した `DynamicFrame` だけが出力に含まれます。

1. (オプション) 変換ノードのプロパティを設定した後、ノードの詳細パネルの [**Output schema**] (出力スキーマ) タブを選択して、データ用に変更されたスキーマを表示できます。ジョブ内の任意のノードに対してこのタブを初めて選択すると、データにアクセスする IAM ロールを指定するよう求められます。[**Job details**] (ジョブの詳細) タブで IAM ロールをまだ指定していない場合、ここで IAM ロールを入力するよう求められます。

1. (オプション) ノードおよび変換のプロパティを設定した後、ノードの詳細パネルの [**Data preview**] (データのプレビュー) タブを選択して、変更されたデータセットをプレビューできます。ジョブ内の任意のノードに対してこのタブを初めて選択すると、データにアクセスする IAM ロールを指定するよう求められます。この機能を使用するには費用がかかり、IAM ロールを指定するとすぐに請求が開始します。

# データセット内の欠落値を検索して埋める
<a name="transforms-configure-fmv"></a>

*FillMissingValues* 変換を使用して、データセット内に欠落値があるレコードを検索し、補完により決定する値を持つ新しいフィールドを追加します。入力データセットは、欠落値を決定する機械学習 (ML) モデルのトレーニングに使用されます。増分のデータセットを使用する場合、増分の各セットが ML モデルのトレーニングデータとして使用されるため、結果はそれほど正確ではない可能性があります。

**ジョブ図で FillMissingValues 変換ノードを使用するには**

1. (オプション) リソースパネルを開いて、**[FillMissingValues]** を選択し、必要に応じてジョブ図に新しい変換を追加します。

1. [**Node properties**] (ノードのプロパティ) タブで、ジョブ図のノードの名前を入力します。ノードの親がまだ選択されていない場合、[**Node parents**] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. [**Transform**] (変換) タブを選択します。

1. [**Data field**] (データフィールド) で、欠落値を分析するソースデータから、列名またはフィールド名を選択します。

1. (オプション) [**New field name**] (新しいフィールド名) フィールドに、フィールドの名前を入力します。このフィールドは、分析したフィールドの推定置換値を保持する各レコードに追加されます。分析したフィールドに欠落値がない場合、その分析したフィールドの値が新しいフィールドにコピーされます。

   フィールドの名前を指定しない場合、デフォルトの名前は、分析した列に `_filled` を追加した名前になります。例えば、[**Data field**] (データフィールド) に「**Age**」と入力し、[**New field name**] (新しいフィールド名) に値を指定しない場合、**Age\$1filled** という名前の新しいフィードが各レコードに追加されます。

1. (オプション) 変換ノードのプロパティを設定した後、ノードの詳細パネルの [**Output schema**] (出力スキーマ) タブを選択して、データ用に変更されたスキーマを表示できます。ジョブ内の任意のノードに対してこのタブを初めて選択すると、データにアクセスする IAM ロールを指定するよう求められます。[**Job details**] (ジョブの詳細) タブで IAM ロールをまだ指定していない場合、ここで IAM ロールを入力するよう求められます。

1. (オプション) ノードおよび変換のプロパティを設定した後、ノードの詳細パネルの [**Data preview**] (データのプレビュー) タブを選択して、変更されたデータセットをプレビューできます。ジョブ内の任意のノードに対してこのタブを初めて選択すると、データにアクセスする IAM ロールを指定するよう求められます。この機能を使用するには費用がかかり、IAM ロールを指定するとすぐに請求が開始します。

# データセット内のキーのフィルタリング
<a name="transforms-filter"></a>

*フィルター*変換を使用して、正規表現に基づいて入力データセットのレコードをフィルタリングすることで、新しいデータセットを作成できます。フィルター条件を満たさない行は、出力から削除されます。
+ 文字列のデータ型の場合、キー値と指定された文字列が一致する行をフィルタリングできます。
+ 数値のデータ型の場合、比較演算子 `<`、`>`、`=`、`!=`、`<=`、`>=` を使用してキー値と指定された値を比較することで、行をフィルタリングできます。

複数のフィルター条件を指定した場合、デフォルトでは `AND` 演算子を使用して結果が結合されますが、代わりに `OR` を使用することもできます。

*フィルター*変換では、大文字と小文字が区別されます。大文字と小文字を区別しないプロパティキー名が必要な場合は、*ApplyMapping* 変換を親ノードとして追加します。

**フィルター変換ノードをジョブ図に追加するには**

1. (オプション) リソースパネルを開いて、**[フィルター]** を選択し、必要に応じてジョブ図に新しい変換を追加します。

1. [**Node properties**] (ノードのプロパティ) タブで、ジョブ図のノードの名前を入力します。ノードの親がまだ選択されていない場合は、[**Node parents**] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. [**Transform**] (変換) タブを選択します。

1. [**Global AND**] または [**Global OR**] を選択します。これにより、複数のフィルター条件の結合方法が決定します。すべての条件は、`AND` または `OR` オペレーションで結合されます。フィルター条件が 1 つしかない場合は、どちらかを選択できます。

1. [**Filter condition**] (フィルター条件) セクションで [**Add condition**] (条件の追加) ボタンをクリックして、フィルター条件を追加します。

   [**Key**] (キー) フィールドで、データセットからプロパティキー名を選択します。[**Operation**] (オペレーション) フィールドで、比較演算子を選択します。[**Value**] (値) フィールドに、比較値を入力します。フィルター条件のいくつかの例を次に示します。
   + `year >= 2018`
   + `State matches 'CA*'`

   文字列の値をフィルタリングする場合は、比較値に、ジョブのプロパティ (Python または Scala) で選択したスクリプト言語と一致する正規表現の形式が使用されていることを確認します。

1. 必要に応じて、他のフィルター条件を追加します。

1. (オプション) 変換ノードのプロパティを設定した後、ノードの詳細パネルの [**Output schema**] (出力スキーマ) タブを選択して、データ用に変更されたスキーマを表示できます。ジョブ内の任意のノードに対してこのタブを初めて選択すると、データにアクセスする IAM ロールを指定するよう求められます。[**Job details**] (ジョブの詳細) タブで IAM ロールをまだ指定していない場合、ここで IAM ロールを入力するよう求められます。

1. (オプション) ノードおよび変換のプロパティを設定した後、ノードの詳細パネルの [**Data preview**] (データのプレビュー) タブを選択して、変更されたデータセットをプレビューできます。ジョブ内の任意のノードに対してこのタブを初めて選択すると、データにアクセスする IAM ロールを指定するよう求められます。この機能を使用するには費用がかかり、IAM ロールを指定するとすぐに請求が開始します。

# NULL 値を持つフィールドを削除するDropNullFields の使用
<a name="transforms-dropnull-fields"></a>

 フィールド内のすべての値が 'null' の場合、[*DropNullFields*]transform を使用し、データセットからフィールドを削除します。デフォルトでは、AWS Glue Studio は null オブジェクトを認識しますが、空の文字列、“null”の列、-1 の整数、または 0 などのプレースホルダなどでは、自動的に「null」として認識されません。

**DropNullFields を使用するには**

1.  ジョブダイアグラムに DropNullFields ノードを追加します。

1.  [**Node properties**]タブで、NULL 値を表す追加の値を選択します。値を選択しないか、すべての値を選択するかを選択できます。  
![\[スクリーンショットは、DropnullFields ノードの Transform tab タブを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/DropNullFields-transform-tab.png)
   +  空の文字列("" or '') －空の文字列を含むフィールドは削除されます。
   +  "null string"-単語「null」の文字列を含むフィールドは削除されます。
   +  a-1 (負の 1) integerを含む-1 整数 - フィールドは削除されます。

1.  必要に応じて、カスタム NULL 値を指定することもできます。これらは、データセットに一意である可能性がある NULL 値です。カスタム NULL 値を追加するには、[**Add new value**]を選択します。

1.  カスタム Null 値を入力します。たとえば、ゼロを指定したり、データセット内の NULL を表すために使用されている任意の値を指定できます。

1.  ドロップダウンフィールドでデータタイプを選択します。データ型は、文字列または整数のいずれかです。
**注記**  
 カスタムの NULL 値とそのデータ型は、フィールドが NULL 値として認識され、フィールドを削除するために、正確に一致する必要があります。カスタムの NULL 値のみが一致しているがデータ型が一致しない部分的な一致については、フィールドが削除されません。

# SQL クエリを使用してデータを変換する
<a name="transforms-sql"></a>

[**SQL**] 変換を使用して、SQL クエリの形式で独自の変換を記述できます。

SQL 変換ノードでは、入力として複数のデータセットを持つことができますが、出力として生成されるデータセットは 1 つだけです。これには、Apache SparkSQL クエリを入力するテキストフィールドが含まれています。入力として使用する各データセットにエイリアスを割り当てることで、SQL クエリを簡単に実行できます。SQL 構文の詳細については、[Spark SQL ドキュメント](https://spark.apache.org/docs/latest/sql-ref.html)を参照してください。

**注記**  
VPC にあるデータソースで Spark SQL 変換を使用する場合は、AWS Glue VPC エンドポイントを、データソースを含む VPC に追加します。開発エンドポイントの設定の詳細については、*AWS Glue デベロッパーガイド*の「[Adding a Development Endpoint](https://docs.aws.amazon.com/glue/latest/dg/add-dev-endpoint.html)」、「[Setting Up Your Environment for Development Endpoints](https://docs.aws.amazon.com/glue/latest/dg/start-development-endpoint.html)」、「[Accessing Your Development Endpoint](https://docs.aws.amazon.com/glue/latest/dg/dev-endpoint-elastic-ip.html)」を参照してください。

**ジョブ図で SQL 変換ノードを使用するには**

1. (オプション) 必要な場合、ジョブ図に変換ノードを追加します。ノードタイプに **[SQL クエリ]** を選択します。
**注記**  
 データプレビューセッションおよびカスタム SQL またはカスタムコードノードを使用する場合、データプレビューセッションはデータセット全体に SQL またはコードブロックをそのまま実行します。

1. [**Node properties**] (ノードのプロパティ) タブで、ジョブ図のノードの名前を入力します。ノードの親がまだ選択されていない場合、または SQL 変換に複数の入力が必要な場合は、[**Node parents**] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。必要な場合、他の親ノードを追加します。

1. ノードの詳細パネルで [**Transform**] (変換) タブを選択します。

1. SQL クエリのソースデータセットは、各ノードの [**Name**] (名前) フィールドで指定する名前により識別されます。これらの名前を使用しない場合、または名前が SQL クエリに適していない場合は、各データセットに名前を関連付けることができます。コンソールでは、`MyDataSource` などのデフォルトのエイリアスが提供されています。

   例えば、SQL 変換ノードの親ノードの名前が `Rename Org PK field` の場合、このデータセットに `org_table` という名前を関連付けることができます。その後、このエイリアスをノード名の代わりに SQL クエリで使用できます。

1. 見出し [**Code block**] (コードブロック) の下にある テキスト入力フィールドで、SQL クエリを貼り付けるか、入力します。テキストフィールドには、SQL 構文のハイライトとキーワードの候補が表示されます。

1. SQL 変換ノードを選択した状態で、[**Output schema**] (出力スキーマ) タブを選択してから、[**Edit**] (編集) を選択します。SQL クエリの出力フィールドを示す、列とデータ型を指定します。

   そのページの [**Output schema**] (出力スキーマ) セクションにある次のアクションを使用して、スキーマを指定します。
   + 列の名前を変更するには、その列の [**Key**] (キー) テキストボックス ([*field*] (フィールド) または [*property key*] (プロパティキー) とも示されます) にカーソルを置き、新しい名前を入力します。
   + 列のデータ型を変更するには、ドロップダウンリストから列の新しいデータ型を選択します。
   + トップレベルの新しい列をスキーマに追加するには、[Overflow] (オーバーフロー) (![\[\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/edit-schema-actions-button.png)) ボタンを選択して、[**Add root key**] (ルートキーの追加) をクリックします。新しい列がスキーマの先頭に追加されます。
   + スキーマから列を削除するには、キー名の右端にある削除アイコン (![\[\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/delete-icon-black.png)) をクリックします。

1. 出力スキーマの指定が完了したら、[**Apply**] (適用) を選択して変更を保存し、スキーマエディタを終了します。変更を保存しない場合は、[**Cancel**] (キャンセル) を選択して、スキーマエディタを編集します。

1. (オプション) ノードおよび変換のプロパティを設定した後、ノードの詳細パネルの [**Data preview**] (データのプレビュー) タブを選択して、変更されたデータセットをプレビューできます。ジョブ内の任意のノードに対してこのタブを初めて選択すると、データにアクセスする IAM ロールを指定するよう求められます。この機能を使用するには費用がかかり、IAM ロールを指定するとすぐに請求が開始します。

# [集計] を使用して選択したフィールドに対して集約計算を実行する
<a name="transforms-aggregate-fields"></a>

**Aggregate transform を使用するには**

1.  Aggregate ノードをジョブダイアグラムに追加します。

1.  **Node properties**タブ上で、ドロップダウンフィールド (オプション) を選択して、一緒にグループ化するフィールドを選択します。一度に複数のフィールドを選択するか、検索バーに入力してフィールド名を検索できます。

    フィールドを選択すると、名前とデータ型が表示されます。フィールドを削除するには、フィールドで [X] を選択します。  
![\[スクリーンショットは、Aggregate ノードの [Transform] タブを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/Aggregate-transform-tab.png)

1.  [**Aggregate another column**]を選択します。少なくとも 1 つのフィールドを選択する必要があります。  
![\[スクリーンショットは、[別の列を集約] を選択したときのフィールドを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/Aggregate-fieldtoaggregate.png)

1.  [**Field to aggregate**]ドロップダウン中のフィールドを選択します。

1.  選択したフィールドに適用する集計関数を選択します：
   +  avg-平均を計算します。
   +  CountDistinct-一意の非ヌル値の数を計算します。
   +  count-非 null 値の数を計算します。
   +  first-「グループ別」の基準を満たす最初の値を返します。
   +  last-「グループ別」の基準を満たす最後の値を返します。
   +  kurtosis-周波数ディストリビューション曲線のピークのシャープネスを計算します。
   +  max-「グループ別」の基準を満たす最高値を返します。
   +  min-「グループ別」の基準を満たす最小値を返します。
   +  skewness-正規ディストリビューションの確率ディストリビューションの非対称性の尺度 
   +  stddev\$1pop-母標準偏差を計算し、母分散の平方根を返します。
   +  sum-グループ内のすべての値の合計 
   +  sumDistinct-グループ内の個別の値の合計 
   +  var\$1samp-グループのサンプル分散 (ヌルは無視されます) 
   +  var\$1pop-グループの母分散 (ヌルは無視されます) 

# ネストされた Struct のフラット化
<a name="transforms-flatten"></a>

*データ内のネストされた Struct のフィールドをフラット化し*、最上位のフィールドにします。新しいフィールドの名前には、そこに届く Struct フィールドの名前が接頭辞として付いたフィールド名が、ドットで区切られて使用されます。

例えば、データに「phone\$1numbers」という Struct 型のフィールドがあり、他のフィールドでの「home\$1phone」という名前の Struct 型の 1 つとともに、「country\$1code」および「number」という 2 つのフィールドを伴っているとします。フラット化されると、この 2 つのフィールドはそれぞれ「phone\$1numbers.home\$1phone.country\$1code」および「phone\$1numbers.home\$1phone.number」という名前の最上位のフィールドになります。

***フラット化された*変換ノードをジョブ図に追加するには**

1. リソースパネルを開いて、**[変換]** タブの **[フラット化]** 選択し、ジョブ図に新しい変換を追加します。検索バーを使用して、「Flatten」と入力し、フラット化ノードをクリックすることもできます。ノードを追加する際に選択したノードが、その親になります。  
![\[スクリーンショットに、リソースパネルと「Flatten」という単語が入力された検索バーを示します。検索結果には、フラット化変換が表示されます。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/transform-flatten.png)

1. (オプション) **[Node properties]** (ノードのプロパティ) タブで、ジョブ図にノードの名前を入力できます。ノードの親がまだ選択されていない場合は、[**Node parents**] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. (オプション) **[Transform]** (変換) タブでは、フラット化するネストレベルの上限を設定できます。例えばその値を 1 に設定すると、最上位の Struct のみをフラット化できます。上限を 2 に設定すると、最上位とその次の Struct をフラット化できます。

# UUID カラムを追加する
<a name="transforms-uuid"></a>

*UUID* (ユニバーサル一意識別子) 列を追加すると、各行に 36 字の一意の文字列が割り当てられます。

***UUID* 変換ノードをジョブ図に追加するには**

1. リソースパネルを開いて、**[UUID]** を選択し、ジョブ図に新しい変換を追加します。ノードを追加する際に選択したノードが、その親になります。

1. (オプション) **[Node properties]** (ノードのプロパティ) タブで、ジョブ図にノードの名前を入力できます。ノードの親がまだ選択されていない場合は、[**Node parents**] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. (オプション) 新しい列の名前は **[Transform]** (変換) タブでカスタマイズできます。デフォルトでは「uuid」という名前が付けられます。

# 識別子列を追加する
<a name="transforms-identifier"></a>

データセット内の各行に数値*識別子*を割り当てます。

**ジョブ図に*識別子*変換ノードを追加するには**

1. リソースパネルを開いて、**[Identifier]** を選択し、ジョブ図に新しい変換を追加します。ノードを追加する際に選択したノードが、その親になります。

1. (オプション) **[Node properties]** (ノードのプロパティ) タブで、ジョブ図にノードの名前を入力できます。ノードの親がまだ選択されていない場合は、[**Node parents**] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. (オプション) 新しい列の名前は **[Transform]** (変換) タブでカスタマイズできます。デフォルトでは、「id」という名前が付けられます。

1. (オプション) ジョブがデータを段階的に処理して保存する場合は、ジョブの実行時に同じ ID が再利用されないよう注意する必要があります。

   **[Transform]** (変換) タブで、チェックボックスのオプション **[unique]** (一意) をチェックします。これで識別子にジョブのタイムスタンプが追加されるため、複数の実行間で一意になります。数字を増やせるようにするには、long の代わりに列を 10 進数にします。

# 列をタイムスタンプタイプに変換する
<a name="transforms-to-timestamp"></a>

*To timestamp* 変換を使用すると、数値または文字列の列のデータ型をタイムスタンプに変更できます。これで、そのデータ型で保存したり、タイムスタンプを必要とする他の変換に適用したりできるようになります。

***To timestamp* 変換ノードをジョブ図に追加するには**

1. リソースパネルを開いて、**[To timestamp]** を選択し、ジョブ図に新しい変換を追加します。ノードを追加する際に選択したノードが、その親になります。

1. (オプション) **[Node properties]** (ノードのプロパティ) タブで、ジョブ図にノードの名前を入力できます。ノードの親がまだ選択されていない場合は、[**Node parents**] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. **[Transform]** (変換) タブで、変換する列の名前を入力します。

1. **[Transform]** (変換) タブで、タイプを選択し、選択した列の解析方法を定義します。

   値が数値の場合は、秒 (Unix/Python タイムスタンプ)、ミリ秒、マイクロ秒のいずれかで表すことができます。その際は対応するオプションを選択します。

   値がフォーマットされた文字列の場合は、「iso」タイプを選択します。文字列は ISO 形式のいずれかに準拠している必要があります (例:「2022-11-02T14:40:59.915Z」)。

   この時点でタイプが不明な場合や、行によってタイプが異なる場合は、[autodetect] (自動検出) を選択すると、システムが最小限の実行コストでベストな推測を行います。

1. (オプション) **[Transform]** タブでは、選択した列を変換する代わりに、新しい列の名前を入力すれば、新しい列を作成し、元の列を残すことができます。

# タイムスタンプ列をフォーマットされた文字列に変換する
<a name="transforms-format-timestamp"></a>

タイムスタンプ列をパターンに基づいた文字列にフォーマットします。*Format timestamp* を使用すると、日付と時刻を希望する形式の文字列で取得できます。形式の定義には、[Spark の日付構文](https://spark.apache.org/docs/latest/sql-ref-datetime-pattern.html)とほとんどの [Python 日付コード](https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes)を使用できます。

例えば、日付文字列を「2023-01-01 00:00」のような形式にしたいときは、Spark 構文を「yyyy-MM-dd HH:mm」として使用するか、Python の同様の日付コード「%Y-%m-%d %H:%M」を使用することで、形式を定義できます。

***Format timestamp* 変換ノードをジョブ図に追加するには**

1. リソースパネルを開いて、**[Format timestamp]** を選択し、ジョブ図に新しい変換を追加します。ノードを追加する際に選択したノードが、その親になります。

1. (オプション) **[Node properties]** (ノードのプロパティ) タブで、ジョブ図にノードの名前を入力できます。ノードの親がまだ選択されていない場合は、[**Node parents**] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. **[Transform]** (変換) タブで、変換する列の名前を入力します。

1. **[Transform]** タブに、使用する**タイムスタンプ形式**のパターンを、[Spark 日付構文](https://spark.apache.org/docs/latest/sql-ref-datetime-pattern.html)または [Python 日付コード](https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes)を使って入力します。

1. (オプション) **[Transform]** タブでは、選択した列を変換する代わりに、新しい列の名前を入力すれば、新しい列を作成し、元の列を残すことができます。

# 条件付きルーター変換の作成
<a name="transforms-conditional-router"></a>

 条件付きルーター変換を使うと、着信データに複数の条件を適用することができます。着信データの行はそれぞれグループフィルター条件により評価され、対応するグループに取り入れて処理されます。行が複数のグループフィルター条件を満たしている場合、変換により、その行が複数のグループに渡されます。行がどの条件も満たしていない場合は、その行を削除するか、デフォルトの出力グループにルーティングします。

 この変換はフィルター変換に似ていますが、同じ入力データを複数の条件でテストしたいユーザーにとって便利です。

**条件付きルーター変換を追加するには**

1.  条件付きルーター変換を実行するノードを選択します。これは、ソースノードでも別の変換でもかまいません。

1.  **[Action]** (アクション) を選択し、検索バーで [Conditional Router] (条件付きルーター) を検索し、選択します。**条件付きルーター**変換が、2 つの出力ノードと共に追加されます。一方の出力ノード [Default group] (デフォルトグループ) には、もう一方の出力ノードで定義された条件のいずれをも満たさないレコードが含まれます。デフォルトのグループは編集できません。  
![\[こちらのスクリーンショットは、ソースノードに接続された条件付きルーター変換を示したものです。出力ノードは、条件付きルーターノードから分岐しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/transform-conditional-router-node.png)

    **[Add group]** (グループを追加) を選択すると、出力グループを追加できます。各出力グループで、グループに名前を付けてフィルタ条件と論理演算子を追加できます。  
![\[このスクリーンショットは、条件付きルーター変換のタブで、出力グループ、論理演算子、条件付きフィルターに名前を付けるオプションが付いています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/transform-conditional-router-tab.png)

1.  出力グループの名前を変更するときは、グループに新しい名前を入力します。AWS Glue Studio は、ユーザーに代わって自動的にグループに名前を付けます (例: 「output\$1group\$11」)。

1.  論理演算子 (**AND**、**OR**) を選択し、**[Key]** (キー)、**[Operation]** (演算)、**[Value]** (値) を指定して**[Filter condition]** (フィルター条件) を追加します。論理演算子を使用すると、複数のフィルター条件を実装し、指定した各フィルター条件に対して論理演算子を実行できます。

    キーを指定するときは、スキーマに表示されているキーの中から選択します。その後、選択したキーの種類に応じて使用可能な演算を選択します。例えば、キーの種類が「string」の場合、選択できる演算は「match」です。  
![\[こちらのスクリーンショットは、キー、操作、値のフィルター条件フィールドを含む、条件付きルーター変換タブです。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/transform-conditional-router-filter-condition.png)

1.  **[Value]** (値) フィールドに値を入力します。その他の条件を追加するときは、**[Add condition]** (条件を追加) を選択します。フィルター条件を削除するときは、ごみ箱のアイコンを選択します。

# [列の連結] 変換を使用して列を追加する
<a name="transforms-concatenate-columns"></a>

 [連結] 変換では、オプションのスペーサーを使用して、他の列の値を使った新しい文字列の列を作成できます。「year」、「month」、「day」を順にスペーサー「-」で連結して、連結した列「date」を定義する例を以下に示します。


| day | month | year | date | 
| --- | --- | --- | --- | 
| 01 | 01 | 2020 | 2020-01-01 | 
| 02 | 01 | 2020 | 2020-01-02 | 
| 03 | 01 | 2020 | 2020-01-03 | 
| 04 | 01 | 2020 | 2020-01-04 | 

**[連結] 変換を追加するには**

1. リソースパネルを開きます。次に **[列の連結]** を選択して、ジョブ図に新しい変換を追加します。ノードを追加する際に選択したノードが、その親になります。

1. (オプション) **[Node properties]** (ノードのプロパティ) タブで、ジョブ図にノードの名前を入力できます。ノードの親がまだ選択されていない場合は、[Node parents] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. **[変換]** タブで、連結する列および連結した文字列を保持する列の名前を入力します。ドロップダウンで列にチェックを入れた順序が、使用される順序になります。  
![\[スクリーンショットは、[連結] 変換の [変換] タブを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/transforms-concatenate-transform-tab.png)

1. **[スペーサー - オプション]** — 連結したフィールドの間に配置する文字列を入力します。デフォルトでは、スペーサーはありません。

1. **[NULL 値 - オプション]** — 列の値が「NULL」の場合に使用する文字列を入力します。デフォルトでは、列の値が「NULL」または「NA」の場合、空の文字列が使用されます。

# [文字列の分割] 変換を使用して文字列の列を分割する
<a name="transforms-split-string"></a>

 [文字列の分割] 変換を使用して、正規表現の文字列をトークンの配列に分割し、分割方法を定義します。その後、列を配列型のままにするか、この後に **[配列から列へ]** 変換を適用して、配列の値を抽出し最上位のフィールドに追加できます。ただし、各トークンの意味が事前にわかっていることが前提です。また、カテゴリのセットなどトークンの順序が関係ない場合、**[分解]** 変換を使用して値ごとに個別の行を生成できます。

 例えば、カンマを分割のパターンとして使用して「categories」列を分割し、「categories\$1arr」列を追加できます。


| product\$1id | カテゴリ | categories\$1arr | 
| --- | --- | --- | 
| 1 | sports,winter | [sports, winter] | 
| 2 | garden,tools | [garden, tools] | 
| 3 | videogames | [videogames] | 
| 4 | game,boardgame,social | [game, boardgame, social] | 

**[文字列の分割] 変換を追加するには：**

1. リソースパネルを開いて、[Split String] を選択し、ジョブ図に新しい変換を追加します。ノードを追加する際に選択したノードが、その親になります。

1. (オプション) [Node properties] (ノードのプロパティ) タブで、ジョブ図にノードの名前を入力できます。ノードの親がまだ選択されていない場合は、[Node parents] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. **[変換]** タブで、分割する列を選択して文字列の分割に使用するパターンを入力します。ほとんどの場合、正規表現として特別な意味がありエスケープする必要がある場合を除いて、文字を入力するだけで済みます。エスケープする必要がある文字は `\.[]{}()<>*+-=!?^$|` で、文字の前にバックスラッシュを追加することでエスケープできます。例えば、ドット (「.」) で区切る場合は、「`\.`」と入力する必要があります。ただし、カンマには特別な意味はなく、「`,`」のようにそのまま指定できます。  
![\[スクリーンショットは、[文字列の分割] 変換の [変換] タブを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/transforms-split-string-transform-tab.png)

1. (オプション) 元の文字列の列を保持したい場合は、新しい配列の列の名前を入力できます。これにより、元の文字列の列と新しいトークン化された配列の列の両方が保持できます。

# [配列から列へ] 変換を使用して、配列の要素を抽出して最上位の列に追加する
<a name="transforms-array-to-columns"></a>

 [配列から列へ] 変換では、配列型の列の一部またはすべての要素を抽出して新しい列に追加できます。配列に抽出に十分な数の値がある場合、変換によって新しい列が可能な限り埋め込まれ、オプションで指定された位置の要素を取得できます。

 例えば、ip v4 サブネットに「文字列の分割」変換を適用した結果である配列の列「subnet」がある場合、最初と 4 番目の要素を抽出して、新しい列「first\$1octect」と「forth\$1octect」に追加できます。この例の変換の出力は次のようになります (最後の 2 行の配列が期待する長さよりも短いことに注意してください)。


| サブネット | first\$1octect | fourth\$1octect | 
| --- | --- | --- | 
| [54, 240, 197, 238] | 54 | 238 | 
| [192, 168, 0, 1] | 192 | 1 | 
| [192, 168] | 192 |  | 
| [] |  |  | 

**[配列から列へ] 変換を追加するには:**

1. リソースパネルを開いて、**[Array To Columns]** を選択し、ジョブ図に新しい変換を追加します。ノードを追加する際に選択したノードが、その親になります。

1. (オプション) **[Node properties]** (ノードのプロパティ) タブで、ジョブ図にノードの名前を入力できます。ノードの親がまだ選択されていない場合は、[Node parents] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. **[変換]** タブで、抽出する配列の列を選択し、抽出されたトークンの新しい列のリストを入力します。  
![\[スクリーンショットは、[配列から列へ] 変換の [変換] タブを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/transforms-array-to-columns-transform-tab.png)

1. (オプション) 列を割り当てるために配列のトークンを取得しない場合は、指定した同じ順序で列のリストに割り当てるインデックスを指定できます。例えば、出力列が「column1, column2, column3」でインデックスが「4, 1, 3」の場合、配列の 4 番目の要素は column1 に、最初の要素は column2 に、3 番目の要素は column3 に指定できます (配列がインデックスの番号より短い場合は NULL 値が設定されます)。

# [現在のタイムスタンプを追加] 変換の使用
<a name="transforms-add-current-timestamp"></a>

 **[現在のタイムスタンプを追加]** 変換では、データが処理された時刻で行をマークできます。これは、監査目的やデータパイプラインでのレイテンシーの追跡に役立ちます。この新しい列は、タイムスタンプのデータ型またはフォーマットされた文字列として追加できます。

**[現在のタイムスタンプを追加] 変換を追加するには:**

1. リソースパネルを開いて、**[Add Current Timestamp]** を選択し、ジョブ図に新しい変換を追加します。ノードを追加する際に選択したノードが、その親になります。

1. (オプション) **[Node properties]** (ノードのプロパティ) タブで、ジョブ図にノードの名前を入力できます。ノードの親がまだ選択されていない場合は、[Node parents] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。  
![\[スクリーンショットは、[現在のタイムスタンプを追加] 変換の [変換] タブを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/transforms-add-current-timestamp-transform-tab.png)

1. (オプション) 列をフォーマット済の日付の文字列にしたい場合は、**[変換]** タブで、新しい列のカスタム名とフォーマットを入力します。

# [行から列へのピボット] 変換の使用
<a name="transforms-pivot-rows-to-columns"></a>

 **[行から列へのピボット]** 変換では、選択した列の固有の値を回転させて数値列を集約し、新しい列にすることができます (複数の列を選択した場合は、値が連結され新しい列に名前が付けられます)。このように、それぞれの固有の値ごとに部分的な集計を含む列を増やしながら、行を統合します。例えば、月別および国別の売上に関するデータセットがあるとします (わかりやすいように並べ替えられています)。


| 年 | month | country | amount | 
| --- | --- | --- | --- | 
| 2020 | Jan | uk | 32 | 
| 2020 | Jan | de | 42 | 
| 2020 | Jan | us | 64 | 
| 2020 | Feb | uk | 67 | 
| 2020 | Feb | de | 4 | 
| 2020 | Feb | de | 7 | 
| 2020 | Feb | us | 6 | 
| 2020 | Feb | us | 12 | 
| 2020 | Jan | us | 90 | 

 **金額**と**国**を集計列としてピボットすると、元の**国**列から新しい列が作成されます。次の表では、**国**列の代わりに **de**、**uk**、**us** の新しい列が作成されています。


| 年 | month | de | uk | us | 
| --- | --- | --- | --- | --- | 
| 2020 | Jan | 42 | 32 | 64 | 
| 2020 | Jan | 11 | 67 | 18 | 
| 2021 | Jan |  |  | 90 | 

 代わりに、月と国の両方をピボットする場合は、それらの列の値の組み合わせごとに列が表示されます。


| year | Jan\$1de | Jan\$1uk | Jan\$1us | Feb\$1de | Feb\$1uk | Feb\$1us | 
| --- | --- | --- | --- | --- | --- | --- | 
| 2020 | 42 | 32 | 64 | 11 | 67 | 18 | 
| 2021 |  |  | 90 |  |  |  | 

**[行から列へのピボット] 変換を追加するには:**

1. リソースパネルを開いて、**[Pivot Rows To Columns]** を選択し、ジョブ図に新しい変換を追加します。ノードを追加する際に選択したノードが、その親になります。

1. (オプション) **[Node properties]** (ノードのプロパティ) タブで、ジョブ図にノードの名前を入力できます。ノードの親がまだ選択されていない場合は、[Node parents] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. **[変換]** タブで、新しい列の値を生成するために集約される数値列、適用する集計関数、および固有の値を新しい列に変換する列を選択します。  
![\[スクリーンショットは、[行から列へのピボット] 変換の [変換] タブを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/transforms-pivot-rows-to-columns-transform-tab.png)

# [列から行へのピボット解除] 変換の使用
<a name="transforms-unpivot-columns-to-rows"></a>

 **[ピボット解除]** 変換では、列を新しい列の値に変換して、固有の値ごとに行を生成できます。この変換はピボットの逆ですが、集約された同じ値の行を分解したり、組み合わせを元の列に分割できないため、同等ではないことに注意してください (これらは、後で [分割] 変換を使用して行うことができます)。例えば、次のようなテーブルがあるとします。


| 年 | month | de | uk | us | 
| --- | --- | --- | --- | --- | 
| 2020 | Jan | 42 | 32 | 64 | 
| 2020 | Feb | 11 | 67 | 18 | 
| 2021 | Jan |  |  | 90 | 

 値「amount」を使用して「de」、「uk」、「us」の列を「country」列にピボット解除すると、次のようになります (ここでは分かりやすくするために並べ替えられています)。


| 年 | month | country | amount | 
| --- | --- | --- | --- | 
| 2020 | Jan | uk | 32 | 
| 2020 | Jan | de | 42 | 
| 2020 | Jan | us | 64 | 
| 2020 | Feb | uk | 67 | 
| 2020 | Feb | de | 11 | 
| 2020 | Feb | us | 18 | 
| 2021 | Jan | us | 90 | 

 NULL 値の列 (Jan 2021 の「de」と「uk」) はデフォルトでは生成されません。このオプションを有効にすると、次のようになります。


| 年 | month | country | amount | 
| --- | --- | --- | --- | 
| 2020 | Jan | uk | 32 | 
| 2020 | Jan | de | 42 | 
| 2020 | Jan | us | 64 | 
| 2020 | Feb | uk | 67 | 
| 2020 | Feb | de | 11 | 
| 2020 | Feb | us | 18 | 
| 2021 | Jan | us | 90 | 
| 2021 | Jan | de |  | 
| 2021 | Jan | uk |  | 

**[列から行へのピボット解除] 変換を追加するには:**

1. リソースパネルを開いて、**[Unpivot Columns to Rows]** を選択し、ジョブ図に新しい変換を追加します。ノードを追加する際に選択したノードが、その親になります。

1. (オプション) **[Node properties]** (ノードのプロパティ) タブで、ジョブ図にノードの名前を入力できます。ノードの親がまだ選択されていない場合は、[Node parents] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. **[変換]** タブで、ピボット解除する列の名前と値を保持するために作成する新しい列を入力します。  
![\[スクリーンショットは、[列から行へのピボット解除] 変換の [変換] タブを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/transforms-unpivot-columns-to-rows-transform-tab.png)

# [オートバランス処理] 変換を使用してランタイムを最適化する
<a name="transforms-autobalance-processing"></a>

 **[オートバランス処理]** 変換は、パフォーマンスを向上させるためにデータをワーカー間で再配分します。これは、データのバランスが取れていない場合や、ソースからのデータでは十分に並行処理ができない場合に役立ちます。これは、ソースが gzip 圧縮されている場合や JDBC である場合に一般的です。データの再配分には中程度のパフォーマンスコストがかかるため、データのバランスが既に取れている場合は、最適化により必ずしもコストが補われるとは限りません。変換で Apache Spark の再パーティション化を使用して、クラスターのキャパシティに最適な複数のパーティション間でデータをランダムに再度割り当てできます。上級ユーザーの場合は、複数のパーティションを手動で入力できます。さらに、指定した列に基づいてデータを再編成することで、分割テーブルの書き込みを最適化することもできます。これにより、出力ファイルがより統合されます。

****

1. リソースパネルを開いて、**[Autobalance Processing]** を選択し、ジョブ図に新しい変換を追加します。ノードを追加する際に選択したノードが、その親になります。

1. (オプション) **[Node properties]** (ノードのプロパティ) タブで、ジョブ図にノードの名前を入力できます。ノードの親がまだ選択されていない場合は、[Node parents] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. (オプション) **[変換]** タブで、複数のパーティションを入力できます。一般的に、この値はシステムに決定させることをお勧めしますが、値を制御する必要がある場合は乗数を調整したり特定の値を入力できます。列で分割されたデータを保存する場合は、再パーティションの列と同じ列を選択できます。これにより、各パーティションのファイルの数を最小限に抑え、パーティションごとに多数のファイルが作成されるのを防ぐことができます。ファイルが多数作成されると、データをクエリするツールのパフォーマンスが低下します。  
![\[スクリーンショットは、[オートバランス処理] 変換の [変換] タブを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/transforms-autobalance-processing-transform-tab.png)

# [派生列] 変換を使用して他の列を結合する
<a name="transforms-derived-column"></a>

 **[派生列]** 変換では、定数やリテラル、データ内の他の列も使用できる数式または SQL 式に基づいて新しい列を定義できます。例えば「success」および「count」列から「percentage」列を派生させるには、「success \$1 100 / count \$1\$1 '%'」という SQL 式を入力します。

 結果の例: 


| success | count | 割合(%) | 
| --- | --- | --- | 
| 14 | 100 | 14% | 
| 6 | 20 | 3% | 
| 3 | 40 | 7.5% | 

**[派生列] 変換を追加するには**

1. リソースパネルを開いて、**[Derived Column]** を選択し、ジョブ図に新しい変換を追加します。ノードを追加する際に選択したノードが、その親になります。

1. (オプション) **[Node properties]** (ノードのプロパティ) タブで、ジョブ図にノードの名前を入力できます。ノードの親がまだ選択されていない場合は、[Node parents] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. **[変換]** タブで、列の名前とその内容の式を入力します。  
![\[スクリーンショットは、[派生列] 変換の [変換] タブを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/transforms-dervied-column-transform-tab.png)

# [ルックアップ] 変換を使用してカタログテーブルから一致するデータを追加する
<a name="transforms-lookup"></a>

 **[ルックアップ]** 変換では、キーがデータ内の定義済みのルックアップ列と一致する場合、定義済みのカタログテーブルから列を追加できます。これは、データとルックアップテーブル間を左外部結合し、条件に一致する列として使用するのと同じです。

**[ルックアップ] 変換を追加するには**

1. リソースパネルを開いて、**[Lookup]** を選択し、ジョブ図に新しい変換を追加します。ノードを追加する際に選択したノードが、その親になります。

1. (オプション) **[Node properties]** (ノードのプロパティ) タブで、ジョブ図にノードの名前を入力できます。ノードの親がまだ選択されていない場合は、[Node parents] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. **[変換]** タブで、ルックアップの実行に使用するカタログテーブルの完全修飾名を入力します。例えば、データベースが「mydb」で、テーブルが「mytable」の場合は、「mydb.mytable」と入力します。次に、ルックアップキーが作成されている場合は、ルックアップテーブルで一致するものを見つけるための基準を入力します。キー列のリストは、カンマで区切って入力します。1 つ以上のキー列に同じ名前がない場合は、マッチマッピングを定義する必要があります。

   例えば、データ列が「user\$1id」と「region」で、ユーザーテーブルで対応する列の名前が「id」と「region」の場合、**[一致する列]** フィールドに「user\$1id=id, region」と入力します。region=region と入力することもできますが、これらは同じなので必要ありません。

1. 最後に、ルックアップテーブルで一致した行から取得する列を入力して、それらをデータに組み込みます。一致するものが見つからなかった場合、それらの列は NULL に設定されます。
**注記**  
**[ルックアップ]** 変換では、効率を上げるため左結合を使用しています。ルックアップテーブルに複合キーがある場合は、一致する列がすべてのキーの列と一致するように設定されていることを確認し、一致が 1 つだけになるようにしてください。そうしないと、複数のルックアップ行が一致し、一致するごとに余分な行が追加されます。  
![\[スクリーンショットは、[ルックアップ] 変換の [変換] タブを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/transforms-lookup-transform-tab.png)

# [配列またはマップを行に分解] 変換の使用
<a name="transforms-explode-array"></a>

 **[分解]** 変換では、ネストされたデータ構造から値を抽出し、操作しやすい個々の行を追加できます。配列の場合、変換により配列の各値に対して行が生成され、その行に他の列の値が複製されます。マップの場合、変換によりキーと値を列として持つ各エントリに対して行が生成されます。各エントリには列としてのキーと値があり、その行に他の列も複製されます。

 例えば、このデータセットに複数の値がある「category」配列の列があるとします。


| product\$1id | category | 
| --- | --- | 
| 1 | [sports, winter] | 
| 2 | [garden, tools] | 
| 3 | [videogames] | 
| 4 | [game, boardgame, social] | 
| 5 | [] | 

 「category」列が同じ名前の列に分解されると、その列が上書きされます。NULL を含めるように選択すると、次のようになります (分かりやすいように順番になっています)。


| product\$1id | category | 
| --- | --- | 
| 1 | sports | 
| 1 | winter | 
| 2 | garden | 
| 2 | tool | 
| 3 | videogames | 
| 4 | ゲーム | 
| 4 | boardgame | 
| 4 | social | 
| 5 |  | 

**[配列またはマップを行に分解] 変換を追加するには:**

1. リソースパネルを開いて、**[Explode Array Or Map Into Rows]** を選択し、ジョブ図に新しい変換を追加します。ノードを追加する際に選択したノードが、その親になります。

1. (オプション) **[Node properties]** (ノードのプロパティ) タブで、ジョブ図にノードの名前を入力できます。ノードの親がまだ選択されていない場合は、[Node parents] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. **[変換]** タブで、分解する列を選択します (タイプが配列またはマップである必要があります)。次に、配列の項目を表す列の名前を入力するか、マップを分解する場合はキーと値を表す列の名前を入力します。

1. (オプション) **[変換]** タブでは、デフォルトで分解する列が NULL、またはデータ構造が空である場合、分解されたデータセットではその列が省略されます。(新しい列を NULL として) 行を残しておきたい場合は、[NULL を含む] にチェックを入れます。  
![\[スクリーンショットは、[配列またはマップを行に分解] 変換の [変換] タブを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/transforms-explode-array-transform-tab.png)

# レコードマッチング変換を使用して既存のデータ分類変換を呼び出す
<a name="transforms-record-matching"></a>

この変換は、既存のレコードマッチング機械学習データ分類変換を呼び出します。

この変換は、ラベルに基づいて、トレーニング済みモデルに対して現在のデータを評価します。列「match\$1id」が追加され、アルゴリズムトレーニングに基づいて、同等とみなされる項目のグループに各行が割り当てられます。詳細については、「[AWS Lake Formation FindMatches によるレコードのマッチング](https://docs.aws.amazon.com/glue/latest/dg/machine-learning.html)」を参照してください。

**注記**  
ビジュアルジョブで使用する AWS Glue のバージョンは、レコードマッチング変換の作成時に AWS Glue で使用するバージョンと一致する必要があります。

![\[このスクリーンショットは、変換のデータプレビューを示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/recording-matching-transform-1.png)


**レコードマッチング変換ノードをジョブ図に追加するには**

1. リソースパネルを開いて、**[Record Matching]** を選択し、ジョブ図に新しい変換を追加します。ノードを追加する際に選択したノードが、その親になります。

1. ノードのプロパティパネルで、ジョブ図にノード名を入力します。ノードの親がまだ選択されていない場合、[**Node parents**] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. **[変換]** タブに、**[機械学習の変換]** ページから取得した ID を入力します。  
![\[このスクリーンショットは、機械学習変換ページの ID を示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/recording-matching-transform-2.png)

1. (オプション) **[変換]** タブで、信頼スコアを追加するオプションを確認できます。計算量は増えますが、モデルは各マッチングの信頼スコアを追加の列として推定します。

# null 行の削除
<a name="transforms-remove-null-rows"></a>

この変換は、すべての列が null である行をデータセットから削除します。さらに、この条件を拡張して空のフィールドを含め、1 つ以上の列が空でない行を保持することもできます。

**null 行削除変換ノードをジョブ図に追加するには**

1. リソースパネルを開いて、**[Remove Null Rows]** を選択し、ジョブ図に新しい変換を追加します。ノードを追加する際に選択したノードが、その親になります。

1. ノードのプロパティパネルで、ジョブ図にノード名を入力します。ノードの親がまだ選択されていない場合、[**Node parents**] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. (オプション) 行が null でもなく空でもないようにする必要がある場合は、**[変換]** タブで **[Extended]** オプションをオンにします。この変換により、空の文字列、配列、マップは null とみなされます。

# JSON データを含む文字列の列の解析
<a name="transforms-parse-json-column"></a>

この変換は、JSON データを含む文字列の列を解析し、JSON がオブジェクトか配列かに応じて、それぞれを構造体または配列の列に変換します。(オプション) 解析された列と元の列の両方を保持できます。

JSON スキーマは、オプションのサンプリングを使用して提供または推測できます (JSON オブジェクトの場合)。

**JSON 列解析変換ノードをジョブ図に追加するには**

1. リソースパネルを開いて、**[Parse JSON Column]** を選択し、ジョブ図に新しい変換を追加します。ノードを追加する際に選択したノードが、その親になります。

1. ノードのプロパティパネルで、ジョブ図にノード名を入力します。ノードの親がまだ選択されていない場合、[**Node parents**] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. **[変換]** タブで、JSON 文字列を含む列を選択します。

1. (オプション) **[変換]** タブで、JSON データが従うスキーマを、SQL 構文を使用して入力します (例: オブジェクトの場合は「field1 STRING, field2 INT」、配列の場合は「ARRAY<STRING>」)。

   配列の場合はスキーマが必要ですが、オブジェクトの場合はデータを使用して推測されます (スキーマが指定されていない場合)。スキーマの推論による影響を軽減するため (特に大規模なデータセットの場合)、**[Ratio of samples to use to infer schema]** を入力することで、データ全体を 2 回読み取る必要がなくなります。値が 1 より小さい場合は、対応するランダムサンプルの比率を使用してスキーマが推測されます。データに信頼性があり、行間でオブジェクトが一貫している場合は、0.1 などの小さな比率を使用してパフォーマンスを高めることができます。

1. (オプション) 元の文字列の列と解析された列の両方を保持する場合は、**[変換]** タブで新しい列名を入力します。

# JSON パスの抽出
<a name="transforms-extract-json-path"></a>

この変換は、JSON 文字列の列から新しい列を抽出します。この変換は、必要なデータ要素が少なく、JSON コンテンツ全体をテーブルスキーマにインポートしない場合に便利です。

**JSON パス抽出変換ノードをジョブ図に追加するには**

1. リソースパネルを開いて、**[Extract JSON Path]** を選択し、ジョブ図に新しい変換を追加します。ノードを追加する際に選択したノードが、その親になります。

1. ノードのプロパティパネルで、ジョブ図にノード名を入力します。ノードの親がまだ選択されていない場合、[**Node parents**] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. **[変換]** タブで、JSON 文字列を含む列を選択します。1 つ以上の JSON パス式をカンマで区切って入力します。各式は、JSON 配列またはオブジェクトから値を抽出する方法を示しています。例えば、JSON 列に「prop\$11」と「prop2」というプロパティを持つオブジェクトが含まれている場合、「prop\$11, prop\$12」と名前を指定して両方を抽出できます。

   JSON フィールドに特殊文字が含まれていて、この JSON `{"a. a": 1}` からプロパティを抽出する場合などには、パス `$['a. a']` を使用できます。例外は、パスを区切るためのカンマです。続いて、各パスに対応する列名をカンマで区切って入力します。

1. (オプション) **[変換]** タブでは、抽出された JSON 列を削除するようにチェックできます。これは、必要な JSON データを抽出した後、残りのデータが不要な場合に便利です。

# 正規表現による文字列の断片の抽出
<a name="transforms-regex-extractor"></a>

この変換は、正規表現を使用して文字列の断片を抽出し、そこから新しい列を作成します。正規表現グループを使用する場合は複数の列を作成します。

**正規表現抽出変換ノードをジョブ図に追加するには**

1. リソースパネルを開いて、**[Regex Extractor]** を選択し、ジョブ図に新しい変換を追加します。ノードを追加する際に選択したノードが、その親になります。

1. ノードのプロパティパネルで、ジョブ図にノード名を入力します。ノードの親がまだ選択されていない場合、[**Node parents**] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

1. **[変換]** タブに、正規表現とそれを適用する必要のある列を入力します。続いて、一致する文字列を格納する新しい列の名前を入力します。新しい列は、ソース列が null の場合にのみ null になり、正規表現が一致しない場合は空になります。

   正規表現がグループを使用する場合、対応する列名はカンマで区切られますが、列名を空のままにすることでグループをスキップできます。

   例えば、長い ISO 日付形式と短い ISO 日付形式の両方を使用する文字列を含む列「purchase\$1date」があり、使用可能な場合は、年、月、日、時間を抽出します。時間グループはオプションであり、使用できない場合、(正規表現が一致しないため) 抽出されたすべてのグループは空の文字列になります。グループで、時間をオプションではなく含めたい場合は、名前を空のままにすることで抽出されなくなります (グループには T 文字が含まれます)。  
![\[このスクリーンショットは、正規表現抽出の正規表現の設定を示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/regex-extractor-1.png)

   データプレビューの結果:  
![\[このスクリーンショットは、正規表現抽出のデータプレビューの設定を示しています。\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/regex-extractor-2.png)

# カスタム変換を作成する
<a name="transforms-custom"></a>

データに対してより複雑な変換を実行する必要がある場合、またはデータプロパティキーをデータセットに追加する場合は、ジョブ図に**カスタムコード**変換を追加します。カスタムコードノードを使用すると、変換を実行するスクリプトを入力できます。

カスタムコードを使用する場合は、スキーマエディタを使用して、カスタムコードを通して出力に加えらえる変更を指定する必要があります。スキーマの編集時に、次のアクションを実行できます。
+ データプロパティキーの追加または削除
+ データプロパティキーのデータ型の変更
+ データプロパティキーの名前の変更
+ ネストされたプロパティキーの再構築

出力をターゲットの場所に送信するには、*SelectFromCollection* 変換を使用して、カスタム変換ノードの結果から単一の `DynamicFrame` を選択する必要があります。

次のタスクを実行して、カスタム変換ノードをジョブ図に追加できます。

## カスタムコード変換ノードをジョブ図に追加する
<a name="transforms-custom-addnode"></a>

**カスタム変換ノードをジョブ図に追加するには**

1. (オプション) リソースパネルを開いて、**[Custom transform]** を選択し、ジョブ図にカスタム変換を追加します。

1. [**Node properties**] (ノードのプロパティ) タブで、ジョブ図のノードの名前を入力します。ノードの親がまだ選択されていない場合、またはカスタム変換に複数の入力が必要な場合は、[**Node parents**] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

## カスタム変換ノードのコードを入力する
<a name="transforms-custom-addcode"></a>

入力フィールドにコードを入力またはコピーできます。ジョブでは、データ変換の実行にこのコードを使用します。Python または Scala のいずれかでコードのスニペットを指定できます。コードは、入力として 1 つ以上の `DynamicFrames` を取り、`DynamicFrames` のコレクションを返す必要があります。

**カスタム変換ノードのスクリプトを入力するには**

1. ジョブ図でカスタム変換ノードを選択した状態で、[**Transform**] (変換) タブを選択します。

1. 見出し [**Code block**] (コードブロック) の下のテキスト入力フィールドで、変換用のコードを貼り付けるか、入力します。使用するコードは、[**Job details**] (ジョブの詳細) タブのジョブで指定されている言語と一致する必要があります。

   コード内の入力ノードを参照する場合、AWS Glue Studio は、作成された順序に基づきジョブの図表ノードによって連続的に返される `DynamicFrames` に名前を付けます。コード内で次のいずれかのネーミングメソッドを使用します。
   + Classic code generation — 関数名を使用して、ジョブダイアグラム内のノードを参照します。
     + データソースノード: `DataSource0`、`DataSource1`、`DataSource2` などです。
     + 変換ノード: `Transform0`、`Transform1`、`Transform2` などです。
   + New code generation — '`_node1`','`_node2`'などが添付されたノードの[**Node properties**]タブ上で指定された名前を使用します。例えば、`S3bucket_node1`、`ApplyMapping_node2`、`S3bucket_node2`、`MyCustomNodeName_node1`

   各エラーコード generator のさらなる詳細については、「[スクリプトコードの生成](job-editor-features.md#code-gen)」を参照してください。

次の例は、コードボックスに入力するコードの形式を示しています。

------
#### [ Python ]

次の例では、まず `DynamicFrame` を受信し、それを `DataFrame` に変換してネイティブフィルターメソッド (1000 票を超えるレコードのみを保持)を適用しています。その後、返す前に `DynamicFrame` に再び変換しています。

```
def FilterHighVoteCounts (glueContext, dfc) -> DynamicFrameCollection:
    df = dfc.select(list(dfc.keys())[0]).toDF()
    df_filtered = df.filter(df["vote_count"] > 1000)
    dyf_filtered = DynamicFrame.fromDF(df_filtered, glueContext, "filter_votes")
    return(DynamicFrameCollection({"CustomTransform0": dyf_filtered}, glueContext))
```

------
#### [ Scala ]

次の例では、まず `DynamicFrame` を受信し、それを `DataFrame` に変換してネイティブフィルターメソッド (1000 票を超えるレコードのみを保持)を適用しています。その後、返す前に `DynamicFrame` に再び変換しています。

```
object FilterHighVoteCounts {
  def execute(glueContext : GlueContext, input : Seq[DynamicFrame]) : Seq[DynamicFrame] = {
    val frame = input(0).toDF()
    val filtered = DynamicFrame(frame.filter(frame("vote_count") > 1000), glueContext)
    Seq(filtered)
  }
}
```

------

## カスタム変換ノードでスキーマを編集する
<a name="transforms-custom-editschema"></a>

カスタム transform ノードを使用する場合、AWS Glue Studio は、transform によって作成された出力スキーマを自動で推測することはできません。スキーマエディタを使用して、カスタム変換コードによって実装されるスキーマの変更を記述できます。

カスタムコードノードでは、カスタムコードの入力として `DynamicFrame` を提供する任意の数の親ノードを持つことができます。カスタムコードノードでは、`DynamicFrames` のコレクションが返されます。入力として使用される各 `DynamicFrame` には、スキーマが関連付けられています。カスタムコードノードによって返される各 `DynamicFrame` を記述するスキーマを追加する必要があります。

**注記**  
 カスタム変換で独自のスキーマを設定した場合、AWS Glue Studio は、前のノードからのスキーマ継承を行いません。スキーマを更新するには、カスタム変換のノードを選択した上で、[Data preview] (データプレビュー) タブを開きます。プレビューが生成されたら、[Use Preview Schema] (プレビュースキーマを使用) をクリックします。その後、このスキーマがプレビューデータを使用するスキーマに置き換えられます。

**カスタム変換ノードの入力スキーマを編集するには**

1. ジョブ図でカスタム変換ノードを選択した状態で、ノードの詳細パネルの [**Output schema**] (出力スキーマ) タブを選択します。

1. [**Edit**] (編集) を選択して、スキーマを変更します。

   配列やオブジェクトなどのネストされたデータのプロパティキーがある場合、各スキーマパネルの右上部にある [**Expand-Rows**] (行の展開) アイコン (![\[\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/expand-rows-icon.png)) を選択して、子データのプロパティキーのリストを展開します。このアイコンは、選択すると [**Collapse-Rows**] (列の折りたたみ) アイコン (![\[\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/collapse-rows-icon.png)) に変わり、子のプロパティキーのリストを折りたたむことができます。

1. ページ右側のセクションにある次のアクションを使用して、スキーマを変更します。
   + プロパティキーの名前を変更するには、プロパティキーの [**Key**] (キー) テキストボックスにカーソルを置き、新しい名前を入力します。
   + プロパティキーのデータ型を変更するには、リストを使用して、プロパティキーの新しいデータ型を選択します。
   + トップレベルの新しいプロパティキーをスキーマに追加するには、[**Cancel**] (キャンセル) ボタンの左側にある [**Overflow**] (オーバーフロー) (![\[\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/edit-schema-actions-button.png)) アイコンをクリックして、[**Add root key**] (ルートキーの追加) を選択します。
   + スキーマに子のプロパティキーを追加するには、親キーに関連付けられている [**Add-Key**] (キーの追加) (![\[\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/filter-add-icon.png)) アイコンをクリックします。子のキーの名前を入力し、データ型を選択します。
   + スキーマからプロパティキーを削除するには、キー名の右端にある [**Remove**] (削除) アイコン (![\[\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/delete-icon-black.png)) をクリックします。

1. カスタム変換コードで `DynamicFrames` を複数使用していない場合、他の出力スキーマを追加できます。
   + 新しい空のスキーマを追加するには、[**Overflow**] (オーバーフロー) (![\[\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/edit-schema-actions-button.png)) アイコンをクリックし、[**Add output schema**] (出力スキーマの追加) を選択します。
   + 既存のスキーマを新しい出力スキーマにコピーするには、コピーするスキーマがスキーマセレクタに表示されていることを確認します。[**Overflow**] (オーバーフロー) (![\[\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/edit-schema-actions-button.png)) アイコンをクリックして、[**Duplicate**] (複製) を選択します。

   出力スキーマを削除する場合は、コピーするスキーマがスキーマセレクタに表示されていることを確認します。[**Overflow**] (オーバーフロー) (![\[\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/edit-schema-actions-button.png)) アイコンをクリックして、[**Delete**] (削除)を選択します。

1. 新しいスキーマに新しいルートキーを追加するか、複製したキーを編集します。

1. 出力スキーマを変更する場合は、[**Apply**] (適用) ボタンをクリックして変更を保存し、スキーマエディタを終了します。

   変更を保存しない場合は、[**Cancel**] (キャンセル) ボタンをクリックします。

## カスタム変換の出力を設定する
<a name="transforms-custom-output"></a>

カスタムコード変換では、1 つの結果セットに `DynamicFrame` が 1 つだけであっても、`DynamicFrames` のコレクションが返されます。

**カスタム変換ノードからの出力を処理するには**

1. カスタム変換ノードを親ノードとして持つ *SelectFromCollection* 変換ノードを追加します。この変換を更新して、使用するデータセットを指定します。詳細については「[SelectFromCollection を使用して保持するデータセットを選択する](transforms-configure-select-collection.md)」を参照してください。

1. カスタム変換ノードによって生成される他の `DynamicFrames` を使用する場合は、*SelectFromCollection* 変換をジョブ図に追加します。

   カスタム変換ノードを追加してフライトのデータセットを複数のデータセットに分割し、フライトの日付や番号などの各出力スキーマで識別プロパティキーを複製するシナリオを考えてみましょう。各出力スキーマに、カスタム変換ノードを親として持つ *SelectFromCollection* 変換ノードを追加します。

1. (オプション) その後、各 *SelectFromCollection* 変換ノードをジョブ内の他のノードの入力として、またはデータターゲットノードの親として使用できます。