

# 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>

 이 자습서를 사용하여 Amazon S3 버킷을 데이터 원본으로 사용하는 첫 번째 AWS Glue 데이터 카탈로그를 생성할 수 있습니다.

 이 자습서에서는 AWS Glue 콘솔을 사용하여 다음을 수행합니다.

1.  데이터베이스 생성 

1.  테이블 생성 

1.  Amazon S3 버킷을 데이터 소스로 사용 

 이 단계를 완료하면 Amazon S3 버킷을 데이터 원본으로 사용하여 AWS Glue 데이터 카탈로그를 채울 수 있습니다.

## 1단계: 데이터베이스 생성
<a name="start-data-catalog-database"></a>

 시작하려면 AWS Management Console에 로그인한 후 [AWS Glue 콘솔](https://console.aws.amazon.com/glue)을 엽니다.

 **AWS Glue 콘솔을 사용하여 데이터베이스 생성** 

1.  AWS Glue 콘솔에서 왼쪽 메뉴의 **Data catalog**(데이터 카탈로그)에서 **Databases**(데이터베이스)를 선택합니다.

1.  **데이터베이스 추가(Add database)**를 선택합니다.

1.  데이터베이스 생성 페이지에서 데이터베이스의 이름을 입력합니다. **위치 - *선택 사항*** 섹션에서 데이터 카탈로그의 클라이언트가 사용할 URI 위치를 설정합니다. 이 정보를 몰라도 데이터베이스 생성을 계속할 수 있습니다.

1.  (선택 사항). 데이터베이스에 대한 설명을 입력합니다.

1.  **데이터베이스 생성**을 선택합니다.

 축하합니다. AWS Glue 콘솔을 사용하여 첫 번째 데이터베이스를 설정했습니다. 새 데이터베이스가 사용 가능한 데이터베이스 목록에 나타납니다. **데이터베이스(Databases)** 대시보드에서 데이터베이스 이름을 선택하여 데이터베이스를 편집할 수 있습니다.

 **다음 단계** 

 **데이터베이스를 생성하는 다른 방법:** 

 방금 AWS Glue 콘솔을 사용하여 데이터베이스를 생성했지만 데이터베이스를 생성하는 다른 방법이 있습니다.
+ 크롤러를 사용하여 자동으로 데이터베이스와 테이블을 생성할 수 있습니다. 크롤러를 사용하여 데이터베이스를 설정하려면 [AWS Glue 콘솔에서 크롤러 작업](https://docs.aws.amazon.com/glue/latest/dg/console-crawlers.html)을 참조하세요.
+  CloudFormation 템플릿을 사용할 수 있습니다. [AWS Glue Data Catalog 템플릿을 사용하여 AWS Glue 리소스 생성](https://docs.aws.amazon.com/glue/latest/dg/populate-with-cloudformation-templates.html)을 참조하세요.
+  AWS Glue 데이터베이스 API 작업을 사용하여 데이터베이스를 생성할 수도 있습니다.

   `create` 작업을 사용하여 데이터베이스를 생성하려면 `DatabaseInput`(필수) 파라미터를 포함하여 요청을 구조화합니다.

   예:   
****  
 다음은 CLI, Boto3 또는 DDL을 사용하여 자습서에서 사용한 S3 버킷의 동일한 flight\$1data.csv 파일을 기반으로 테이블을 정의하는 방법의 예입니다.  

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

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

 데이터베이스 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.  **테이블 추가**를 선택합니다.

1.  **Table details**(테이블 세부 정보)에 테이블 이름을 입력하여 테이블 속성을 설정합니다.

1.  **Databases**(데이터베이스) 섹션의 드롭다운 메뉴에서 1단계에서 생성한 데이터베이스를 선택합니다.

1.  **Add a data store**(데이터 스토어 추가) 섹션에서 **S3**는 소스 유형으로 기본 선택됩니다.

1.  **Data is 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. **추가**를 선택합니다.

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 버킷의 동일한 flight\$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')
  ```