

# AWS Glue Data Catalog の開始方法
<a name="start-data-catalog"></a>

 AWS Glue Data Catalog は永続的な技術メタデータストアです。AWS クラウドでメタデータを保存、注釈付け、および共有するために使用することができるマネージド型サービスです。詳細については、「[AWS Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/components-overview.html#data-catalog-intro)」を参照してください。


|  | 
| --- |
| AWS Glue コンソールおよび一部のユーザーインターフェイスが最近更新されました。 | 

## 概要:
<a name="start-data-catalog-overview"></a>

 このチュートリアルを使用して、最初の AWS Glue データカタログを作成できます。このデータカタログは、データソースとして Simple Storage Service (Amazon S3) バケットを使用します。

 このチュートリアルでは、AWS Glue コンソールを使用して以下の作業を行います。

1.  データベースの作成 

1.  テーブルを作成する 

1.  データソースとして Amazon S3 バケットを使用します。

 これらのステップを完了すると、データソースとして Amazon S3 バケットを使用して、AWS Glue データカタログにデータを入力できるようになります。

## ステップ 1: データベースを作成する
<a name="start-data-catalog-database"></a>

 開始するには、AWS マネジメントコンソール にサインインして [AWS Glue コンソール](https://console.aws.amazon.com/glue) を開きます。

 **AWS Glue コンソールを使用してデータベースを作成する:** 

1.  AWS Glue コンソールで、左側のメニューにある **[Data catalog]** (データカタログ) から、 **[Databases]** (データベース) を選択します。

1.  **[Add database]** (データベースの追加) を選択します。

1.  [データベースの作成] ページで、データベースの名前を入力します。**[Location - optional]** セクションで、データカタログのクライアントが使用する URI の場所を設定します。これがわからない場合は、データベースの作成を続行してください。

1.  (オプション)。データベースの説明を入力します。

1.  **[データベースの作成]** を選択します。

 これで、AWS Glue コンソールで最初のデータベースの作成が終わりました。新しいデータベースが、使用可能なデータベースのリストに表示されます。データベースは、**[Databases]** (データベース) ダッシュボードからデータベースの名前を選択することで編集できます。

 **次のステップ** 

 **[Other ways to create a database: ]** (データベースを作成するその他の方法) 

 AWS Glue コンソールでデータベースを作成しましたが、データベースを作成する方法は他にもあります。
+ クローラーを使用して、データベースとテーブルを自動的に作成することができます。クローラーを使用してデータベースを設定するには、「[AWS Glue コンソールでクローラーを使用する](https://docs.aws.amazon.com/glue/latest/dg/console-crawlers.html)」を参照してください。
+  CloudFormation テンプレートを使用できます。「[AWS Glue リソースをAWS Glue Data Catalog テンプレートで作成する](https://docs.aws.amazon.com/glue/latest/dg/populate-with-cloudformation-templates.html)」を参照してください。
+  AWS Glue データベース API オペレーションを使用してデータベースを作成することもできます。

   `create` オペレーションを使用してデータベースを作成するには、`DatabaseInput` (必須) パラメータを含めてリクエストを構成します。

   例:   
****  
 CLI、Boto3、または DDL を使用して、チュートリアルで使用した S3 バケットからの同じ flights\$1data.csv ファイルに基づいてテーブルを定義する方法の一例を以下に示します。  

  ```
  aws glue create-database --database-input "{\"Name\":\"clidb\"}"                                              
  ```

  ```
  glueClient = boto3.client('glue')
  
  response = glueClient.create_database(
      DatabaseInput={
          'Name': 'boto3db'
      }
  )
  ```

 Database API のデータタイプ、構造、およびオペレーションの詳細については、「[データベース API](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-databases.html)」を参照してください。

 **次のステップ** 

 次のセクションでは、テーブルを作成し、そのテーブルをデータベースに追加します。

データカタログの設定とアクセス許可を確認することもできます。「[AWS Glue コンソールでデータカタログ設定を使用する](https://docs.aws.amazon.com/glue/latest/dg/console-data-catalog-settings.html)」を参照してください。

## ステップ 2。テーブルを作成する
<a name="start-data-catalog-table"></a>

 このステップでは、AWS Glue コンソールを使用してテーブルを作成します。

1.  AWS Glue コンソールで、左側のメニューにある**[Tables]** (テーブル) を選択します。

1.  [**Add table (テーブルの追加)**] を選択します。

1.  **[Table details]** (テーブルの詳細) でテーブルの名前を入力して、テーブルのプロパティを設定します。

1.  **[Databases]** (データベース) セクションのドロップダウンメニューから、ステップ 1 で作成したデータベースを選択します。

1.  **[Add a data store]** (データストアの追加) セクションのデフォルト状態では、ソースのタイプとして **[S3]** が選択されています。

1.  **[Data located in]** (データがある場所) で、**[Specified path in another account]** (他のアカウントの指定したパス) を選択します。

1. パスをコピーして、**[Include path]** (パスを含める) の入力フィールドに貼り付けます。

   `s3://crawler-public-us-west-2/flight/2016/csv/`

1.  **[Data format]** (データ形式) セクションにある **[Classification]** (分類) で **[CSV]** を選択し、**[Delimiter]** (区切り記号) では **[comma (,)]** (カンマ (,)) を選択します。[**次へ**] を選択します。

1. スキーマを定義するように求められます。スキーマ は、データレコードの構造と形式を定義します。**[Add column]** (列の追加) を選択します。(詳細については、「[スキーマレジストリ](https://docs.aws.amazon.com/glue/latest/dg/schema-registry.html#schema-registry-schemas.html)」を参照してください)。

1.  列のプロパティを指定します。

   1. 列名を入力します。

   1. **[Column type]** (列タイプ) の場合、デフォルトで 'string' が既に選択されています。

   1. **[Column number]** (列番号) の場合、デフォルトで '1' が既に選択されています。

   1. **[Add]** (追加) を選択します。

1.  パーティションインデックスを追加するように求められます。これはオプションです。このステップをスキップするには、**[Next]** (次へ) を選択します。

1.  テーブルプロパティのサマリーが表示されます。すべてが期待とおりに動作している場合、**[作成]** を選択します。それ以外の場合は、**[Back]** (戻る) を選択して、必要に応じて編集します。

 これで、テーブルを手動で作成し、データベースに関連付ける作業が完了しました。新しく作成したテーブルは [Tables] (テーブル) ダッシュボードに表示されます。ダッシュボードからは、すべてのテーブルの編集と管理を行うことができます。

 詳細については、「[AWS Glue コンソールでテーブルを操作する](https://docs.aws.amazon.com/glue/latest/dg/console-tables.html)」を参照してください。

## 次のステップ
<a name="start-data-catalog-next-steps"></a>

 **次のステップ** 

 データカタログを入力した後は、AWS Glue でジョブの作成を開始できます。「[AWS Glue Studio でビジュアル ETL ジョブの作成](https://docs.aws.amazon.com/glue/latest/dg/author-job-glue.html)」を参照してください。

 コンソールを使用する以外にも、データカタログでテーブルを定義する方法として、次のような方法があります。
+  [クローラーを作成して実行する](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html) 
+  [AWS Glue のクローラーに分類子の追加](https://docs.aws.amazon.com/glue/latest/dg/add-classifier.html) 
+  [AWS Glue テーブル API を使用する](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html) 
+  [AWS Glue Data Catalog テンプレートを使用する](https://docs.aws.amazon.com/glue/latest/dg/populate-with-cloudformation-templates.html) 
+  [Apache Hive メタストアを移行する](https://github.com/aws-samples/aws-glue-samples/tree/master/utilities/Hive_metastore_migration) 
+  [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/glue/create-table.html)、Boto3、またはデータ定義言語 (DDL) を使用する   
****  
 CLI、Boto3、または DDL を使用して、チュートリアルで使用した S3 バケットからの同じ flights\$1data.csv ファイルに基づいてテーブルを定義する方法の一例を以下に示します。  
 AWS CLI コマンドを構造化する方法については、ドキュメントを参照してください。CLI の例には、「aws glue create-table --table-input」値の JSON 構文が含まれています。  

  ```
  {
          "Name": "flights_data_cli",
          "StorageDescriptor": {
              "Columns": [
                  {
                      "Name": "year",
                      "Type": "bigint"
                  },
                  {
                      "Name": "quarter",
                      "Type": "bigint"
                  }
              ],
              "Location": "s3://crawler-public-us-west-2/flight/2016/csv",
              "InputFormat": "org.apache.hadoop.mapred.TextInputFormat",
              "OutputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
              "Compressed": false,
              "NumberOfBuckets": -1,
              "SerdeInfo": {
                  "SerializationLibrary": "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe",
                  "Parameters": {
                      "field.delim": ",",
                      "serialization.format": ","
                  }
              }
          },
          "PartitionKeys": [
              {
                  "Name": "mon",
                  "Type": "string"
              }
          ],
          "TableType": "EXTERNAL_TABLE",
          "Parameters": {
              "EXTERNAL": "TRUE",
              "classification": "csv",
              "columnsOrdered": "true",
              "compressionType": "none",
              "delimiter": ",",
              "skip.header.line.count": "1",
              "typeOfData": "file"
          }
      }
  ```

  ```
  import boto3
  
  glue_client = boto3.client("glue")
  
  response = glue_client.create_table(
      DatabaseName='sampledb',
      TableInput={
          'Name': 'flights_data_manual',
      'StorageDescriptor': {
        'Columns': [{
          'Name': 'year',
          'Type': 'bigint'
        }, {
          'Name': 'quarter',
          'Type': 'bigint'
        }],
        'Location': 's3://crawler-public-us-west-2/flight/2016/csv',
        'InputFormat': 'org.apache.hadoop.mapred.TextInputFormat',
        'OutputFormat': 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat',
        'Compressed': False,
        'NumberOfBuckets': -1,
        'SerdeInfo': {
          'SerializationLibrary': 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe',
          'Parameters': {
            'field.delim': ',',
            'serialization.format': ','
          }
        },
      },
      'PartitionKeys': [{
        'Name': 'mon',
        'Type': 'string'
      }],
      'TableType': 'EXTERNAL_TABLE',
      'Parameters': {
        'EXTERNAL': 'TRUE',
        'classification': 'csv',
        'columnsOrdered': 'true',
        'compressionType': 'none',
        'delimiter': ',',
        'skip.header.line.count': '1',
        'typeOfData': 'file'
      }
      }
  )
  ```

  ```
  CREATE EXTERNAL TABLE `sampledb`.`flights_data` (
    `year` bigint, 
    `quarter` bigint)
  PARTITIONED BY ( 
    `mon` string)
  ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY ',' 
  STORED AS INPUTFORMAT 
    'org.apache.hadoop.mapred.TextInputFormat' 
  OUTPUTFORMAT 
    'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
  LOCATION
    's3://crawler-public-us-west-2/flight/2016/csv/'
  TBLPROPERTIES (
    'classification'='csv', 
    'columnsOrdered'='true', 
    'compressionType'='none', 
    'delimiter'=',', 
    'skip.header.line.count'='1', 
    'typeOfData'='file')
  ```