

# テーブルの作成
<a name="tables-described"></a>

データストア内のデータのインベントリを作成するには、クローラーの実行が推奨されますが、メタデータテーブルを手動で AWS Glue Data Catalog に追加できます。このアプローチにより、メタデータ定義をより詳細にコントロールし、特定の要件に応じてカスタマイズできます。

以下の方法で、データカタログにテーブルを手動で追加することもできます。
+ AWS Glue コンソールを使用して AWS Glue Data Catalog に手動でテーブルを作成します。詳細については、「[コンソールを使用したテーブルの作成](#console-tables)」を参照してください。
+ [AWS Glue API](aws-glue-api.md) の `CreateTable` オペレーションを使用し、AWS Glue Data Catalog にテーブルを作成します。詳細については、「[CreateTable アクション (Python: create\_table)](aws-glue-api-catalog-tables.md#aws-glue-api-catalog-tables-CreateTable)」を参照してください。
+ CloudFormation テンプレートを使用します。詳細については、「[AWS Glue 用の AWS CloudFormation](populate-with-cloudformation-templates.md)」を参照してください。

コンソールまたは API を使用して手動でテーブルを定義する場合、テーブルスキーマおよびデータソースでデータのタイプとフォーマットを示す分類フィールドの値を指定します、クローラーでテーブルを作成する場合、データ形式とスキーマは、組み込み分類子またはカスタム分類子のいずれかによって決定されます。AWS Glue コンソールを使用してテーブルを作成する方法の詳細については、[コンソールを使用したテーブルの作成](#console-tables) を参照してください。

**Topics**
+ [テーブルパーティション](#tables-partition)
+ [テーブルリソースリンク](#tables-resource-links)
+ [コンソールを使用したテーブルの作成](#console-tables)
+ [パーティションインデックスの作成](partition-indexes.md)
+ [クローラーを使用して手動で作成されたデータカタログテーブルを更新する](#update-manual-tables)
+ [Data Catalog テーブルのプロパティ](#table-properties)

## テーブルパーティション
<a name="tables-partition"></a>

Amazon Simple Storage Service (Amazon S3) フォルダの AWS Glue テーブル定義によって、パーティションテーブルを記述できます。たとえば、クエリのパフォーマンスを向上させるために、パーティションテーブルでは月の名前をキーとして毎月のデータを別のファイルに分割する場合があります。AWS Glue では、テーブル定義にテーブルのパーティションキーが含まれています。AWS Glue は、Amazon S3 フォルダのデータを評価してテーブルをカタログ化するとき、個々のテーブルまたはパーティション化されたテーブルを追加するかどうかを決定します。

テーブル内のすべてのパーティションをロードする代わりに、テーブル上にパーティションインデックスを作成して、パーティションのサブセットを取得できます。パーティションインデックスの使用方法については、「[パーティションインデックスの作成](partition-indexes.md)」を参照してください。

AWS Glue によって Amazon S3 フォルダのパーティションテーブルを作成するには、次の条件がすべて満たされている必要があります。
+ ファイルのスキーマは、AWS Glue によって決定されるものと似ている。
+ ファイルのデータ形式が同じである。
+ ファイルの圧縮形式が同じである。

例えば、iOS と Android 両方のアプリケーションの販売データを保存する `my-app-bucket` という名前の Amazon S3 バケットを所有しているとします。データは、年、月、日で分割されます。iOS および Android の販売に関するデータファイルは、同じスキーマ、データ形式、および圧縮形式です。AWS Glue Data Catalog では、AWS Glue クローラーが、年、月、日のパーティションキーを使用して 1 つのテーブル定義を作成します。

次の `my-app-bucket` の Amazon S3 リストでは、パーティションのいくつかが示されています。`=` シンボルは、パーティションキー値の割り当てに使用されます。

```
   my-app-bucket/Sales/year=2010/month=feb/day=1/iOS.csv
   my-app-bucket/Sales/year=2010/month=feb/day=1/Android.csv
   my-app-bucket/Sales/year=2010/month=feb/day=2/iOS.csv
   my-app-bucket/Sales/year=2010/month=feb/day=2/Android.csv
   ...
   my-app-bucket/Sales/year=2017/month=feb/day=4/iOS.csv
   my-app-bucket/Sales/year=2017/month=feb/day=4/Android.csv
```

## テーブルリソースリンク
<a name="tables-resource-links"></a>


|  | 
| --- |
| AWS Glue コンソールの更新が行われました。コンソールの現行バージョンでは、テーブルリソースリンクはサポートされません。 | 

Data Catalog には、テーブルへの*リソースリンク*を含めることができます。テーブルリソースリンクは、ローカルまたは共有テーブルへのリンクです。現在、AWS Lake Formation のみでリソースリンクを作成できます。テーブルへのリソースリンクを作成すると、テーブル名を使用する任意の場所で、リソースリンク名を使用できます。自分が所有している、または自分と共有しているテーブルに加えて、テーブルリソースリンクは `glue:GetTables()` から返され、AWS Glue コンソールの [**Tables**] (テーブル) ページにエントリとして表示されます。

Data Catalog には、データベースリソースリンクを含めることもできます。

リソースリンクの詳細については、「*AWS Lake Formation デベロッパーガイド*」の「[Creating Resource Links](https://docs.aws.amazon.com/lake-formation/latest/dg/creating-resource-links.html)」を参照してください。

## コンソールを使用したテーブルの作成
<a name="console-tables"></a>

AWS Glue Data Catalog のテーブルは、データストア内のデータを表すメタデータ定義です。クローラの実行時にテーブルを作成するか、または、AWS Glue コンソールで手動でテーブルを作成できます。** コンソールの [**TablesAWS Glue] (テーブル) リストに、テーブルのメタデータの値が表示されます。ETL (抽出、変換、ロード) ジョブを作成するときに、テーブル定義を使用してソースとターゲットを指定します。

**注記**  
AWS マネジメントコンソールの最新の変更に伴い、既存の IAM ロール を [https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-SearchTables](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-SearchTables) 許可を持つように変更することが必要になる場合があります。新しいロールを作成する場合、`SearchTables` API 許可は既にデフォルトとして追加されています。

開始するには、AWS マネジメントコンソール にサインインし、AWS Glue コンソール ([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)) を開きます。[**Tables**] (テーブル) タブをクリックし、[**Add tables**] (テーブルの追加) ボタンを使用して、クローラで、または属性を手動で入力してテーブルを作成します。

### コンソールでテーブルを追加する
<a name="console-tables-add"></a>

クローラを使用してテーブルを追加するには、[**Add tables**] (テーブルの追加)、[**Add tables using a crawler**] (クローラを使用してテーブルを追加) の順に選択します。次に、[**Add crawler**] (クローラの追加) ウィザードの手順に従います。クローラが実行されると、テーブルが AWS Glue Data Catalog に追加されます。詳細については、[クローラーを使用したデータカタログへの入力](add-crawler.md) を参照してください。

Data Catalog の Amazon Simple Storage Service (Amazon S3) テーブル定義の作成に必要な属性が分かっている場合は、テーブルウィザードで作成できます。[**Add tables**] (テーブルの追加)、[**Add table manually**] (手動でのテーブルを追加) の順に選択し、[**Add table**] (テーブルの追加) ウィザードの手順に従います。

コンソールで手動でテーブルを追加するときは、以下の点を考慮します。
+ Amazon Athena からテーブルにアクセスする場合は、英数字とアンダースコア文字のみを使用して名前を指定してください。詳細については、「[テーブル、データベース、および列の名前](https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html#ate-table-database-and-column-names-allow-only-underscore-special-characters)」を参照してください。
+ ソースデータの場所は Amazon S3 パスにする必要があります。
+ データのデータ形式は、ウィザードに表示されているいずれかの形式と一致する必要があります。対応する分類、SerDe、およびその他のテーブルのプロパティは、選択された形式に基づいて自動的に入力されます。次の形式でテーブルを定義できます。  
**Avro**  
Apache Avro JSON バイナリ形式。  
**CSV**  
文字で区切られた値。また、区切り文字として、カンマ、パイプ、セミコロン、タブ、または Ctrl-A を指定します。  
**JSON**  
JavaScript Object Notation。  
**XML**  
Extensible Markup Language 形式。データの行を定義する XML タグを指定します。列は行のタグ内で定義されます。  
**Parquet**  
Apache Parquet 列指向ストレージ。  
**ORC**  
Optimized Row Columnar (ORC) ファイル形式。Hive データを効率的に保存するために設計された形式。
+ テーブルのパーティションキーを定義できます。
+ 現在、コンソールで作成した分割されたテーブルは、ETL ジョブで使用することはできません。

### テーブル属性
<a name="console-tables-attributes"></a>

以下に重要なテーブル属性を示します。

**名前**  
名前は、テーブルの作成時に決定され、変更することはできません。多くの AWS Glue オペレーションでテーブル名を参照します。

**データベース**  
テーブルが存在するコンテナオブジェクト。このオブジェクトには、AWS Glue Data Catalog 内に存在するテーブルの組織名が含まれ、データストアの組織名とは異なる場合があります。データベースを削除すると、データベースに含まれるすべてのテーブルも Data Catalog から削除されます。

**説明**  
テーブルの説明。テーブルの内容を理解しやすくするために説明を記入できます。

**テーブル形式**  
標準 AWS Glue テーブル、または Apache Iceberg 形式のテーブルの作成を指定します。  
データカタログには、テーブルストレージを管理し、Iceberg テーブルのクエリパフォーマンスを向上させるための次のテーブル最適化オプションが用意されています。  
+ **圧縮** – 古いデータを削除して、フラグメント化されたデータをより大規模で効率的なファイルに統合するために、データファイルはマージされ、書き換えられます。
+ **スナップショット保持** - スナップショットは、Iceberg テーブルのタイムスタンプ付きバージョンです。スナップショット保持設定を使用すると、スナップショットを保持する期間と保持するスナップショットの数を強制できます。スナップショット保持オプティマイザーを設定すると、古い不要なスナップショットと、その基になる関連付けられたファイルを削除して、ストレージのオーバーヘッドを管理できます。
+ **孤立ファイルの削除** — 孤立ファイルは、Iceberg テーブルメタデータによって参照されなくなったファイルです。これらのファイルは、特にテーブルの削除や ETL ジョブの失敗などのオペレーションの後、時間の経過と共に蓄積される可能性があります。孤立ファイルの削除を有効にすると、AWS Glue はこれらの不要なファイルを定期的に特定して削除できるため、ストレージが解放されます。
詳細については、「[Iceberg テーブルの最適化](table-optimizers.md)」を参照してください。

**最適化設定**  
デフォルト設定を使用するか、テーブルオプティマイザを有効にするための設定をカスタマイズできます。

**IAM ロール**  
 テーブル最適化を実行するために、サービスはユーザーに代わって IAM ロールを引き受けます。IAM ロールは、ドロップダウンを使用して選択できます。圧縮を有効にするために必要な許可がロールに付与されているようにしてください。  
IAM ロールに必要な許可の詳細については、「[テーブル最適化の前提条件](optimization-prerequisites.md)」を参照してください。

**場所**  
このテーブル定義が表すデータストア内のデータの場所へのポインタ。

**分類**  
テーブルの作成時に指定された分類の値。通常、これはクローラが実行されてソースデータの形式を指定するときに書き込まれます。

**最終更新日**  
Data Catalog でこのテーブルが更新された日付と時刻 (UTC)。

**追加された日付**  
Data Catalog にこのテーブルが追加された日付と時刻 (UTC)。

**非推奨**  
AWS Glue により、Data Catalog のテーブルは元のデータストアに存在しなくなったことが分かると、そのテーブルは廃止されたとしてデータカタログにマークされます。廃止されたテーブルを参照するジョブを実行する場合、ジョブは失敗する可能性があります。廃止されたテーブルを参照するジョブを編集し、ソースおよびターゲットとして削除します。廃止されたテーブルが不要になったら削除することをお勧めします。

**接続**  
AWS Glue でデータストアへの接続が必要な場合は、接続の名前がテーブルに関連付けられます。

### テーブルの詳細の表示と管理
<a name="console-tables-details"></a>

既存のテーブルの詳細を表示するには、リスト内のテーブル名を選択し、[**Action, View details**] (アクション、詳細を表示) を選択します。

テーブルの詳細にはテーブルのプロパティとスキーマが含まれます。このビューには、テーブルに定義された順序の列名、データ型、およびパーティションのキー列を含む、テーブルのスキーマが表示されます。列が複合型の場合は、以下の例に示すように、[**View properties**] (プロパティの表示) を選択して、そのフィールドの構造の詳細を表示します。

```
{
"StorageDescriptor": 
    {
      "cols": {
         "FieldSchema": [
           {
             "name": "primary-1",
             "type": "CHAR",
             "comment": ""
           },
           {
             "name": "second ",
             "type": "STRING",
             "comment": ""
           }
         ]
      },
      "location": "s3://aws-logs-111122223333-us-east-1",
      "inputFormat": "",
      "outputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
      "compressed": "false", 
      "numBuckets": "0",
      "SerDeInfo": {
           "name": "",
           "serializationLib": "org.apache.hadoop.hive.serde2.OpenCSVSerde",
           "parameters": {
               "separatorChar": "|"
            }
      },
      "bucketCols": [],
      "sortCols": [],
      "parameters": {},
      "SkewedInfo": {},
      "storedAsSubDirectories": "false"
    },
    "parameters": {
       "classification": "csv"
    }
}
```

`StorageDescriptor` などのテーブルのプロパティの詳細については、「[StorageDescriptor 構造](aws-glue-api-catalog-tables.md#aws-glue-api-catalog-tables-StorageDescriptor)」を参照してください。

テーブルのスキーマを変更するには、[**Edit schema**] (スキーマの編集) を選択し、列の追加および削除、列名の変更、データ型の変更をします。

 スキーマを含め、テーブルの異なるバージョンを比較するには、[**Compare versions**] (バージョンの比較) を選択し、テーブルの 2 つのバージョンのスキーマを並べて比較します。詳細については、「[テーブルスキーマのバージョンの比較](#console-tables-schema-comparison)」を参照してください。

Amazon S3 パーティションを構成するファイルを表示するには、[**View partition**] (パーティションの表示) を選択します。Amazon S3 のテーブルでは、[**Key**] (キー) 列に、ソースデータストアでテーブルを分割するために使用されるパーティションキーが表示されます。パーティションは、日付、場所、または部門などのキー列の値に基づいて、テーブルを関連する部分に分割する方法です。パーティションの詳細については、インターネットで「hive パーティション」を検索してください。

**注記**  
テーブルの詳細を表示するための詳細な手順については、コンソールの [**Explore table**] (テーブルの確認) チュートリアルを参照してください。

### テーブルスキーマのバージョンの比較
<a name="console-tables-schema-comparison"></a>

 テーブルスキーマの 2 つのバージョンを比較する場合、展開・折りたたみによってネストされた行の変更点を比較、2 つのバージョンのスキーマを並べて比較、テーブルプロパティを並べて表示、などが行えます。

 バージョンの比較方法 

1.  AWS Glue コンソールから **[テーブル]** > **[アクション]** の順に選択し、**[バージョンの比較]** を選択します。  
![このスクリーンショットは、[アクション] ボタンの選択時を示しています。ドロップダウンメニューに [バージョンの比較] オプションが表示されます。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/catalog-table-compare-versions.png)

1.  バージョンのドロップダウンメニューから、比較するバージョンを選択します。スキーマを比較すると、[スキーマ] タブがオレンジ色で強調表示されます。

1.  2 つのバージョン間でテーブルを比較すると、テーブルスキーマが画面の左側と右側に表示されます。列名、データ型、キー、コメントの各フィールドを並べて比較することで、変更点を視覚的に判断できます。変更があると、色付きのアイコンでその変更の種類が表示されます。
   +  削除済み — 赤いアイコンによる表示は、以前のバージョンのテーブルスキーマから列が削除されたことを示します。
   +  編集済みまたは移動済み — 青いアイコンによる表示は、新しいバージョンのテーブルスキーマで列が変更または移動されたことを示します。
   +  追加 — 緑色のアイコンによる表示は、新しいバージョンのテーブルスキーマに列が追加されたことを示します。
   +  ネストされた変更 — 黄色のアイコンによる表示は、ネストされた列に変更が含まれていることを示します。列を選択して展開すると、削除、編集、移動、追加のいずれかが実行された列が表示されます。  
![このスクリーンショットは、2 つのバージョン間のテーブルスキーマの比較を示しています。左側は古いバージョンです。右側は新しいバージョンです。列の横にある削除アイコンは、古いバージョンから削除されたため、新しいバージョンでは表示されていません。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/catalog-table-version-comparison.png)

1.  検索バーのフィルタフィールドを使用すると、ここに入力した文字に基づいてフィールドを表示できます。いずれかのテーブルバージョンで列名を入力すると、フィルタリングされたフィールドが両方のテーブルバージョンに表示され、変更が行われた箇所がわかります。

1.  プロパティを比較するには、**[プロパティ]** タブを選択します。

1.  バージョンの比較を停止するには、**[比較の停止]** を選択してテーブルのリストに戻ります。

## クローラーを使用して手動で作成されたデータカタログテーブルを更新する
<a name="update-manual-tables"></a>

手動で AWS Glue Data Catalog テーブルを作成し、AWS Glue クローラーを使用して更新された状態を維持することもできます。スケジュールで実行されているクローラーは、新しいパーティションを追加して、スキーマの変更によりテーブルを更新できます。これは Apache Hive メタストアから移行されたテーブルにも適用されます。

これを行うには、クローラーを定義するときに、1 つ以上のデータストアをクロールのソースとして指定する代わりに、既存のデータカタログテーブルを 1 つ以上指定します。クローラーは、カタログテーブルで指定されたデータストアをクロールします。この場合、新しいテーブルは作成されず、手動で作成されたテーブルが更新されます。

以下に、カタログテーブルを手動で作成し、クローラーソースとしてカタログテーブルを指定するその他の理由を示します。
+ カタログテーブル名命名アルゴリズムに依存せず、カタログテーブル名を選択することをお勧めします。
+ パーティションの検出を中断する可能性がある形式のファイルが誤ってデータソースパスに保存されないように、新しいテーブルが作成されないようにする必要があります。

詳細については、「[ステップ 2: データソースと分類子を選択する](define-crawler-choose-data-sources.md)」を参照してください。

## Data Catalog テーブルのプロパティ
<a name="table-properties"></a>

 AWS CLI で知られているテーブルのプロパティ、つまりパラメータは無効なキーと値の文字列です。AWS Glue の外部での Data Catalog の使用をサポートする場合は、テーブルに独自のプロパティを設定します。この操作は、Data Catalog を使用する他のサービスでも行うことができます。AWS Glue がジョブまたはクローラーの実行時に一部のテーブルプロパティを設定します。特に説明がない限り、これらのプロパティは内部使用のためのものであり、現在の形式での存続や、これらのプロパティを手動で変更した場合の製品の動作についてはサポートされません。

 AWS Glue クローラーで設定できるテーブルプロパティの詳細については、「[クローラーによって設定されたデータカタログテーブルのパラメータ](table-properties-crawler.md)」を参照してください。