Amazon S3 테이블 생성 - Amazon Simple Storage Service

Amazon S3 테이블 생성

Amazon S3 테이블은 테이블 버킷의 하위 리소스입니다. 테이블은 Apache Iceberg 형식으로 저장되므로 쿼리 엔진 및 Apache Iceberg를 지원하는 기타 애플리케이션을 사용하여 테이블을 사용할 수 있습니다. Amazon S3는 테이블을 지속적으로 최적화하여 스토리지 비용을 줄이고 분석 쿼리 성능을 개선합니다.

테이블을 생성하면 Amazon S3가 테이블의 웨어하우스 위치를 자동으로 생성합니다. 웨어하우스 위치는 테이블과 연결된 객체를 읽고 쓸 수 있는 고유한 S3 위치입니다. 다음 예시에서는 웨어하우스 위치의 형식을 보여줍니다.

s3://63a8e430-6e0b-46f5-k833abtwr6s8tmtsycedn8s4yc3xhuse1b--table-s3

테이블의 Amazon 리소스 이름(ARN) 형식은 다음과 같습니다.

arn:aws:s3tables:region:owner-account-id:bucket/bucket-name/table/table-id

기본적으로 테이블 버킷에 최대 1만 개의 테이블을 생성할 수 있습니다. 테이블 버킷 또는 테이블에 대한 할당량 증가를 요청하려면 지원에 문의하세요.

Amazon S3 콘솔, Amazon S3 REST API, AWS SDK, AWS Command Line Interface(AWS CLI) 또는 테이블 버킷에 연결된 쿼리 엔진을 사용하여 테이블을 생성할 수 있습니다.

Athena를 사용하여 테이블을 생성하지 않는 한, 테이블을 생성할 때 해당 테이블에 대한 암호화 설정을 지정할 수 있습니다. 암호화 설정을 지정하지 않으면 테이블이 테이블 버킷의 기본 설정으로 암호화됩니다. 자세한 내용은 테이블에 대한 암호화 지정 섹션을 참조하세요.

테이블 생성을 위한 사전 조건

테이블을 생성하려면 먼저 다음을 수행해야 합니다.

  • 테이블 버킷 생성.

  • 테이블 버킷에 네임스페이스 생성합니다.

  • s3tables:CreateTables3tables:PutTableData에 대한 AWS Identity and Access Management(IAM) 권한이 있는지 확인합니다.

  • 참고

    테이블에 SSE-KMS 암호화를 사용하는 경우 s3tables:PutTableEncryption 권한과 선택한 AWS KMS 키에 대한 DescribeKey 권한이 필요합니다. 또한 사용하는 AWS KMS 키가 S3 Tables에 자동 테이블 유지 관리를 수행할 수 있는 권한을 부여해야 합니다. 자세한 내용은 S3 Tables SSE-KMS 암호화에 대한 권한 요구 사항 섹션을 참조하세요.

유효한 테이블 이름에 대한 자세한 내용은 테이블 및 네임스페이스의 이름 지정 규칙 섹션을 참조하세요.

중요

테이블을 만들 때 테이블 이름 및 테이블 정의에 모두 소문자를 사용해야 합니다. 예를 들어 열 이름이 모두 소문자인지 확인합니다. 테이블 이름 또는 테이블 정의에 대문자가 포함된 경우 테이블은 AWS Lake Formation 또는 AWS Glue Data Catalog에서 지원되지 않습니다. 이 경우 테이블 버킷이 AWS 분석 서비스와 통합되어 있더라도 Amazon Athena와 같은 AWS 분석 서비스에는 테이블이 표시되지 않습니다.

테이블 정의에 대문자가 포함된 경우 Athena에서 SELECT 쿼리를 실행할 때 "GENERIC_INTERNAL_ERROR: Get table request failed: com.amazonaws.services.glue.model.ValidationException: Unsupported Federation Resource - Invalid table or column names."라는 오류 메시지가 표시됩니다.

다음 절차에서는 Amazon S3 콘솔을 사용하여 Amazon Athena로 테이블을 생성합니다. 테이블 버킷에 네임스페이스를 아직 생성하지 않은 경우 이 프로세스 중에 생성할 수 있습니다. 다음 단계를 수행하기 전에 테이블 버킷을 이 리전의 AWS 분석 서비스와 통합했는지 확인합니다. 자세한 내용은 AWS 분석 서비스에서 Amazon S3 Tables 사용 섹션을 참조하세요.

참고

Athena를 사용하여 테이블을 생성하면 해당 테이블은 테이블 버킷에서 기본 암호화 설정을 상속합니다. 다른 암호화 유형을 사용하려면 다른 방법을 사용하여 테이블을 생성해야 합니다.

테이블을 만들려면
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 S3 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 테이블 버킷을 선택합니다.

  3. 테이블 버킷 페이지에서 테이블을 생성할 버킷을 선택합니다.

  4. 버킷 세부 정보 페이지에서 Athena로 테이블 생성을 선택합니다.

  5. Athena로 테이블 생성 대화 상자에서 다음 중 하나를 수행합니다.

    • 네임스페이스를 새로 생성합니다. 네임스페이스 생성을 선택한 다음 네임스페이스 이름 필드에 이름을 입력합니다. 네임스페이스 이름은 1~255자여야 하며 테이블 버킷 내에서 고유해야 합니다. 유효한 문자는 a-z, 0-9 및 밑줄(_)입니다. 네임스페이스 이름 시작에는 밑줄이 허용되지 않습니다.

    • Create namespace(네임스페이스 생성)를 선택합니다.

    • 기존 네임스페이스를 지정합니다. 이 테이블 버킷 내의 기존 네임스페이스 지정을 선택합니다. 그런 다음 기존 네임스페이스에서 선택 또는 기존 네임스페이스 이름 입력을 선택합니다. 버킷에 네임스페이스가 1,000개 이상인 경우 목록에 표시되지 않는 네임스페이스 이름을 입력해야 합니다.

  6. Athena로 테이블 생성을 선택합니다.

  7. Amazon Athena 콘솔이 열리고 Athena 쿼리 편집기가 나타납니다. 카탈로그 필드는 s3tablescatalog/와 같은 테이블 버킷 이름으로 채워지고, 테이블 버킷의 이름, 예를 들어, s3tablescatalog/amzn-s3-demo-bucket로 채워야 합니다. 데이터베이스 필드는 이전에 생성하거나 선택한 네임스페이스로 채워져야 합니다.

    참고

    카탈로그데이터베이스 필드에 이러한 값이 표시되지 않는 경우 테이블 버킷을 이 리전의 AWS 분석 서비스와 통합했는지 확인합니다. 자세한 내용은 AWS 분석 서비스에서 Amazon S3 Tables 사용 섹션을 참조하세요.

  8. 쿼리 편집기는 테이블을 생성하는 데 사용할 수 있는 샘플 쿼리로 채워집니다. 쿼리를 수정하여 테이블에 포함할 테이블 이름과 열을 지정합니다.

  9. 쿼리 수정을 마치면 실행을 선택하여 테이블을 생성합니다.

    참고
    • Athena에서 쿼리를 실행하려고 할 때 “쿼리를 실행할 권한이 충분하지 않습니다. 위탁자는 지정된 리소스에 대한 권한이 없습니다." 오류가 표시되면 테이블에서 필요한 Lake Formation 권한이 부여되어야 합니다. 자세한 내용은 테이블 또는 데이터베이스에 대한 권한 부여 섹션을 참조하세요.

    • Athena에서 쿼리를 실행하려고 할 때 "Iceberg가 요청된 리소스에 액세스할 수 없음" 오류가 표시되면 AWS Lake Formation 콘솔로 이동하여 생성한 테이블 버킷 카탈로그 및 데이터베이스(네임스페이스)에 대한 권한을 자신에게 부여했는지 확인합니다. 이러한 권한을 부여할 때 테이블을 지정하지 마십시오. 자세한 내용은 테이블 또는 데이터베이스에 대한 권한 부여 섹션을 참조하세요.

    • Athena에서 SELECT 쿼리를 실행할 때 다음 오류 메시지가 표시되는 경우 테이블 이름이나 테이블 정의의 열 이름에 대문자가 있기 때문입니다. "GENERIC_INTERNAL_ERROR: Get table request failed: com.amazonaws.services.glue.model.ValidationException: Unsupported Federation Resource - Invalid table or column names." 테이블 및 열 이름이 모두 소문자인지 확인합니다.

테이블 생성에 성공하면 Athena의 테이블 목록에 새 테이블 이름이 나타납니다. Amazon S3 콘솔로 돌아가면 목록을 새로 고친 후 테이블 버킷의 버킷 세부 정보 페이지에 있는 테이블 목록에 새 테이블이 나타납니다.

이 예제에서는 AWS CLI를 사용하고 JSON으로 테이블 메타데이터를 지정하여 스키마가 있는 테이블을 생성하는 방법을 보여줍니다. 이 예제를 사용하려면 user input placeholders를 사용자의 정보로 대체합니다.

aws s3tables create-table --cli-input-json file://mytabledefinition.json

mytabledefinition.json 파일의 경우 다음 예제 테이블 정의를 사용합니다. 이 예제를 사용하려면 user input placeholders를 사용자의 정보로 대체합니다.

{ "tableBucketARN": "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket", "namespace": "your_namespace", "name": "example_table", "format": "ICEBERG", "metadata": { "iceberg": { "schema": { "fields": [ {"name": "id", "type": "int","required": true}, {"name": "name", "type": "string"}, {"name": "value", "type": "int"} ] } } } }

Amazon EMR의 Apache Spark 세션에서와 같이 테이블 버킷에 연결된 지원되는 쿼리 엔진에서 테이블을 생성할 수 있습니다.

이 예시에서는 Spark에서 CREATE 문을 사용하여 테이블을 생성하고 INSERT 문을 사용하여 테이블 데이터를 추가하거나 기존 파일에서 데이터를 읽는 방법을 보여줍니다. 이 예제를 사용하려면 user input placeholders를 사용자의 정보로 대체합니다.

spark.sql( " CREATE TABLE IF NOT EXISTS s3tablesbucket.example_namespace.`example_table` ( id INT, name STRING, value INT ) USING iceberg " )

테이블을 생성한 후 테이블에 데이터를 로드할 수 있습니다. 다음 방법 중에서 선택하세요.

  • INSERT 문을 사용하여 테이블에 데이터를 추가합니다.

    spark.sql( """ INSERT INTO s3tablesbucket.my_namespace.my_table VALUES (1, 'ABC', 100), (2, 'XYZ', 200) """)
  • 기존 데이터 파일을 로드합니다.

    1. Spark로 데이터를 읽습니다.

      val data_file_location = "Path such as S3 URI to data file" val data_file = spark.read.parquet(data_file_location)
    2. Iceberg 테이블에 데이터를 기록합니다.

      data_file.writeTo("s3tablesbucket.my_namespace.my_table").using("Iceberg").tableProperty ("format-version", "2").createOrReplace()