

# データソースに Amazon S3 内のファイルを使用する
<a name="edit-jobs-source-s3-files"></a>

データソースとして Amazon S3 を選択する場合、次のいずれかを選択できます。
+ データカタログデータベースおよびテーブル。
+ Amazon S3 内のバケット、フォルダ、またはファイル。

Amazon S3 バケットをデータソースとして使用する場合、AWS Glue は、ファイルの一つ、あるいはサンプルファイルとして指定したファイルを使うことによって、指定した場所にあるデータのスキーマを検出します。[**Infer schema**] (スキーマを推測) ボタンをクリックすると、スキーマの検出が行われます。Amazon S3 の場所またはサンプルファイルを変更する場合は、[**Infer schema**] (スキーマを推測) を再度クリックして、新しい情報を使用しスキーマの検出を実行します。

**Amazon S3 内のファイルから直接読み取るデータソースノードを設定するには**

1. 新規または保存済みのジョブのビジュアルエディタに移動します。

1. Amazon S3 ソース用に、ジョブ図でデータソースノードを選択します。

1. [**Data source properties**] (データソースのプロパティ) タブを選択して、次の情報を入力します。
   + **S3 source type** (S3 ソースタイプ): (Amazon S3 データソースのみ) [**S3 location**] (S3 の場所) オプションを選択します。
   + **S3 URL** (S3 の URL): ジョブのデータを含む Amazon S3 バケット、フォルダ、またはファイルへのパスを入力します。[**Browse S3**] (S3 をブラウズ) を選択すると、アカウントで利用可能な場所からパスを選択できます。
   + **Recursive** : S3 の場所にある子フォルダ内のファイルからデータをAWS Glue に読ませたい場合、このオプションを選択します。

     子フォルダにパーティション化されたデータが含まれている場合、AWS Glue は、フォルダ名中で指定されているパーティション情報をデータカタログに追加しません。例えば、Amazon S3 で、次のフォルダについて考えてみます。

     ```
     S3://sales/year=2019/month=Jan/day=1
     S3://sales/year=2019/month=Jan/day=2
     ```

     [**Recursive**] を選択し、`sales` フォルダを S3 の場所として選択した場合、AWS Glue は、すべての子フォルダーのデータを読みますが、年、月、日のパーティションは作成しません。
   + **Data format** (データ形式): データを保存する形式を選択します。JSON、CSV、または Parquet を選択できます。選択した値により、ソースファイルからデータを読み取る方法が AWS Glue ジョブに伝えられます。
**注記**  
データのためにに正しい形式を選択していない場合、AWS Glue はスキーマは正しく推測する可能性はありますが、ジョブはソースファイルからのデータを正しく解析することはでないかもしれません。

     選択した形式に応じて、追加の設定オプションを入力できます。
     + **JSON** (JavaScript Object Notation)
       + **JsonPath**: テーブルスキーマの定義に使用されるオブジェクトを指す JSON パス。JSON パス式では、XPath 式が XML ドキュメントと組み合わせて使用されるのと同じように、常に JSON 構造を参照します。JSON パスの「ルートメンバーオブジェクト」は、オブジェクトや配列であっても、常に `$` として参照されます。JSON パスは、ドット表記またはブラケット表記で記述できます。

         JSON パスの詳細については、GitHub ウェブサイトの「[JsonPath](https://github.com/json-path/JsonPath)」を参照してください。
       + **Records in source files can span multiple lines** (ソースファイル内のレコードが複数行にまたがることができる): CSV ファイル内の単一のレコードが複数行にまたがることができる場合は、このオプションを選択します。
     + **CSV** (カンマ区切り値)
       + **Delimiter** (区切り記号): 行内の各列エントリの区切りを示す文字 (`;`、`,` など) を入力します。
       + **Escape character** (エスケープ文字): エスケープ文字として使用する文字を入力します。この文字は、その直後の文字は文字通りに解釈され、区切り文字として解釈しないことを示します。
       + **Quote character** (引用符文字): 区切られた文字列を単一の値にグループ化するのに使用する文字を入力します。例えば、CSV ファイルに `"This is a single value"` などの値がある場合、**ダブルクォート (")** を選択します。
       + **Records in source files can span multiple lines** (ソースファイル内のレコードが複数行にまたがることができる): CSV ファイル内の単一のレコードが複数行にまたがることができる場合は、このオプションを選択します。
       + **First line of source file contains column headers** (ソースファイルの最初の行に列ヘッダーが含まれる): CSV ファイルの最初の行にデータではなく列ヘッダーが含まれている場合は、このオプションを選択します。
     + **Parquet** (Apache Parquet 列指向ストレージ)

       Parquet 形式で保存されたデータに対する追加の設定はありません。
     + **Apache Hudi**

       Apache Hudi 形式で保存されたデータに対する追加の設定はありません。
     + **Delta Lake**

       Delta Lake 形式で保存されたデータに対する追加の設定はありません。
     + **Excel**

       Excel 形式で保存されたデータに対する追加の設定はありません。
   + **Partition predicate** (パーティション述語): データソースから読み取られたデータをパーティション分割するには、パーティション列のみを含む Spark SQL に基づいてブール式を入力します。例: `"(year=='2020' and month=='04')"`
   + **Advanced options**： 特定のファイルに基づくデータのスキーマの検出を AWS Glue にさせたい場合は、このセクションを展開します。
     + **Schema inference** : AWS Glue にファイルを選択させる代わりに、特定のダイルを使用したい場合は、 オプションの 「**Choose a sample file from S3**」 を選択します。スキーマ推論は Excel ソースでは使用できません。
     + **Auto-sampled file** (自動サンプリングファイル): スキーマの推測に使用する Amazon S3 内のファイルへのパスを入力します。

     データソースノードを編集中に、選択したサンプルファイルを変更する場合は、[**Reload schema**] (スキーマの再ロード) を選択して、新しいサンプルファイルを使用してスキーマを検出します。

1. [**Infer schema**] (スキーマを推測) ボタンをクリックして、Amazon S3 内のソースファイルからスキーマを検出します。Amazon S3 の場所またはサンプルファイルを変更する場合は、[**Infer schema**] (スキーマを推測) を再度選択して、新しい情報を使用してスキーマを推測します。