Amazon S3 전송

Amazon S3용 BigQuery Data Transfer Service를 사용하면 Amazon S3에서 BigQuery로 반복되는 로드 작업을 자동으로 예약하고 관리할 수 있습니다.

시작하기 전에

Amazon S3 전송을 만들기 전에 다음을 수행합니다.

  • BigQuery Data Transfer Service 사용 설정에 필요한 모든 작업을 완료했는지 확인합니다.
  • 기본 BigQuery 웹 UI를 사용하여 전송을 만들려면 권한 창을 볼 수 있도록 브라우저에서 bigquery.cloud.google.com의 팝업을 허용합니다. 전송을 관리하려면 BigQuery Data Transfer Service 권한을 허용해야 합니다.
  • 데이터를 저장할 BigQuery 데이터세트를 만듭니다.
  • 전송할 대상 테이블을 만들고 스키마 정의를 지정합니다. 대상 테이블은 테이블 이름 지정 규칙을 따라야 합니다. 대상 테이블 이름은 매개변수로도 지정할 수 있습니다.
  • Amazon S3 URI, 액세스 키 ID, 보안 비밀 액세스 키를 검색합니다. 액세스 키 관리에 대한 자세한 내용은 AWS 문서를 참조하세요.
  • Pub/Sub의 전송 실행 알림을 설정하려면 pubsub.topics.setIamPolicy 권한이 있어야 합니다. 이메일 알림만 설정한다면 Pub/Sub 권한이 필요하지 않습니다. 자세한 내용은 BigQuery Data Transfer Service 실행 알림을 참조하세요.

제한사항

Amazon S3 전송에는 다음과 같은 제한사항이 적용됩니다.

  • 현재 Amazon S3 URI의 버킷 부분을 매개변수화할 수 없습니다.
  • Amazon S3에서의 전송은 항상 대상 테이블에 데이터를 추가하는 WRITE_APPEND 환경설정으로 트리거됩니다. 자세한 내용은 로드 작업 구성에서 configuration.load.writeDisposition을 참조하세요.
  • Amazon S3 소스 데이터 형식에 따라 추가 제한사항이 있을 수 있습니다. 자세한 내용은 다음을 참고하세요.

필수 권한

Amazon S3 전송을 만들기 전에 다음을 수행합니다.

  • 전송을 만드는 사람에게 다음과 같은 BigQuery 필수 권한이 있는지 확인합니다.

    • 전송을 만들 bigquery.transfers.update 권한
    • 대상 데이터세트에 대한 bigquery.datasets.update 권한

    사전 정의된 Cloud IAM 역할 bigquery.admin에는 bigquery.transfers.updatebigquery.datasets.update 권한이 있습니다. BigQuery Data Transfer Service의 Cloud IAM 역할에 대한 자세한 내용은 액세스 제어 참조를 확인하세요.

  • Amazon S3의 문서를 참조하여 전송을 사용 설정하는 데 필요한 권한을 구성했는지 확인합니다. Amazon S3 소스 데이터에 최소한 AWS 관리 정책 AmazonS3ReadOnlyAccess가 적용되어야 합니다.

Amazon S3 데이터 전송 설정

Amazon S3 데이터 전송을 만들려면 다음 단계를 따르세요.

Console

  1. Cloud Console에서 BigQuery 웹 UI로 이동합니다.

    Cloud Console로 이동

  2. 전송을 클릭합니다.

  3. 전송 만들기를 클릭합니다.

  4. 전송 만들기 페이지에서 다음을 수행합니다.

    • 소스 유형 섹션의 소스에서 Amazon S3을 선택합니다.

      전송 소스

    • 전송 구성 이름 섹션의 표시 이름에 전송 이름(예: My Transfer)을 입력합니다. 전송 이름은 나중에 수정해야 할 경우에 대비해 전송을 식별할 수 있는 값이면 됩니다.

      전송 이름

    • 일정 옵션 섹션의 일정에서 기본값(지금 시작)을 유지하거나 설정 시간에 시작을 클릭합니다.

      • 반복 빈도에서 전송을 실행할 빈도 옵션을 선택합니다. 옵션은 다음과 같습니다.

        • 매일(기본값)
        • 매주
        • 매월
        • 커스텀
        • 요청 시

        매일 이외의 옵션을 선택하면 추가 옵션이 제공됩니다. 예를 들어 매주를 선택하면 요일을 선택할 수 있는 옵션이 나타납니다.

      • 시작일 및 실행 시간에 전송을 시작할 날짜 및 시간을 입력합니다. 지금 시작을 선택하면 이 옵션은 사용 중지됩니다.

        전송 일정

    • 대상 설정 섹션의 대상 데이터세트에서 데이터를 저장하기 위해 만든 데이터세트를 선택합니다.

      전송 데이터세트

    • 데이터 소스 세부정보 섹션에서 다음을 수행합니다.

      • 대상 테이블에 BigQuery에 데이터를 저장하기 위해 만든 테이블의 이름을 입력합니다. 대상 테이블 이름은 매개변수로 지정할 수 있습니다.
      • Amazon S3 URI의 경우 URI를 s3://mybucket/myfolder/... 형식으로 입력합니다. URI는 매개변수로도 지정할 수 있습니다.
      • 액세스 키 ID에 액세스 키 ID를 입력합니다.
      • 보안 비밀 액세스 키에 보안 비밀 액세스 키를 입력합니다.
      • 파일 형식에서 데이터 형식을 줄바꿈으로 구분된 JSON, CSV, Avro, Parquet, ORC 중에서 선택합니다.

        S3 소스 세부정보

    • 전송 옵션 섹션의 허용되는 오류 개수에 무시할 수 있는 최대 오류 레코드 수를 정수 값으로 입력합니다.

      허용되는 오류 개수

    • 파일 형식으로 CSV 또는 JSON을 선택한 경우, JSON, CSV 섹션에서 알 수 없는 값 무시를 선택하면 스키마와 일치하지 않는 값이 포함된 행이 허용됩니다. 알 수 없는 값이 무시됩니다. CSV 파일의 경우, 이 옵션을 선택하면 줄 끝 부분의 추가 값이 무시됩니다.

      알 수 없는 값 무시

    • 파일 형식으로 CSV를 선택한 경우, CSV 섹션에 데이터 로드와 관련된 추가 CSV 옵션을 입력합니다.

      CSV 옵션

    • (선택사항) 알림 옵션 섹션에서 다음을 수행합니다.

      • 전환을 클릭해서 이메일 알림을 사용 설정합니다. 이 옵션을 사용 설정하면 전송 실행이 실패할 때 전송 관리자에게 이메일 알림이 발송됩니다.
      • Cloud Pub/Sub 주제 선택에서 주제 이름을 선택하거나 주제 만들기를 클릭하여 주제를 만듭니다. 이 옵션은 전송에 대한 Pub/Sub 실행 알림을 구성합니다.
  5. 저장을 클릭합니다.

기본 UI

  1. BigQuery 웹 UI로 이동합니다.

    BigQuery 웹 UI로 이동

  2. 전송을 클릭합니다.

  3. 전송 추가를 클릭합니다.

  4. 새 전송 페이지에서 다음을 수행합니다.

    • 소스에서 Amazon S3을 선택합니다.
    • 표시 이름에 전송 이름(예: My Transfer)을 입력합니다. 표시 이름은 나중에 수정해야 할 경우에 대비해 전송을 식별할 수 있는 값이면 됩니다.
    • (선택사항) 일정의 경우 기본값인 매일(만든 시간을 기준으로 24시간마다)을 그대로 두거나 수정을 클릭하여 시간을 변경합니다. 간격을 매주, 매월, 커스텀으로 변경할 수도 있습니다. 커스텀을 선택할 경우 크론과 유사한 시간 지정이 필요합니다(예: every 12 hours). 지정할 수 있는 최단 시간은 12시간입니다. 그 밖의 유효한 API 값은 TransferConfig 아래의 schedule 필드를 참조하세요.
    • 대상 데이터세트에서 적절한 데이터세트를 선택합니다.
    • 대상 테이블에 대상 테이블 이름을 입력합니다. 대상 테이블은 테이블 이름 지정 규칙을 따라야 합니다. 대상 테이블 이름은 매개변수로도 지정할 수 있습니다.
    • Amazon S3 URIAmazon S3 URI를 입력합니다. 와일드 카드매개변수를 사용할 수 있습니다.
    • 액세스 키 ID에 액세스 키 ID를 입력합니다.
    • 보안 비밀 액세스 키에 보안 비밀 액세스 키를 입력합니다.
    • 파일 형식에서 데이터 형식을 줄바꿈으로 구분된 JSON, CSV, Avro, Parquet, ORC 중에서 선택합니다.
    • 전송 옵션 - 모든 형식 섹션 아래에서 다음을 수행합니다.
      • 허용되는 오류 개수에 작업을 실행할 때 BigQuery가 무시할 수 있는 불량 레코드의 최댓값을 입력합니다. 불량 레코드 수가 이 값을 초과하면 작업 결과에 '잘못된' 오류가 반환되고 작업이 실패합니다. 기본값은 0입니다.
    • 데이터 형식으로 CSV 또는 JSON을 선택한 경우, 전송 옵션 - JSON, CSV 섹션에서 다음을 수행합니다.
      • 전송 시 대상 테이블의 스키마와 맞지 않는 데이터를 삭제하려면 알 수 없는 값 무시 체크박스를 선택합니다.
    • 데이터 형식으로 CSV를 선택한 경우, 전송 옵션 - CSV 섹션에서 다음을 수행합니다.

      • 필드 구분 기호에 필드를 구분하는 문자를 입력합니다. 기본값은 쉼표입니다.
      • 건너뛸 헤더 행에 가져오지 않으려는 소스 파일의 헤더 행 수를 입력합니다. 기본값은 0입니다.
      • 따옴표가 있는 필드 안에서 줄바꿈을 허용하려면 따옴표 안에 줄바꿈 허용 체크박스를 선택합니다.
      • 누락된 NULLABLE 열이 있는 행을 전송하려면 불균일 행 허용 체크박스를 선택합니다.
    • (선택사항) 고급 섹션을 펼쳐서 전송 실행 알림을 구성합니다.

    • Cloud Pub/Sub 주제에 Cloud Pub/Sub 주제를 입력합니다(예: projects/myproject/topics/mytopic).

    • 전송 실행 실패 시 이메일 알림을 허용하려면 이메일 알림 전송을 선택합니다.

      Cloud Pub/Sub 주제

  5. 추가를 클릭합니다.

bq

bq mk 명령어를 입력하고 전송 생성 플래그 --transfer_config를 지정합니다.

bq mk \
--transfer_config \
--project_id=project_id \
--data_source=data_source \
--display_name=name \
--target_dataset=dataset \
--params='parameters'

여기에서

  • project_id: 선택사항. Google Cloud 프로젝트 ID 특정 프로젝트를 지정하는 --project_id가 입력되지 않으면 기본 프로젝트가 사용됩니다.
  • data_source: 필수. 데이터 소스 — amazon_s3.
  • display_name: 필수. 전송 구성의 표시 이름입니다. 전송 이름은 나중에 수정해야 할 경우에 전송을 쉽게 식별할 수 있는 값이면 됩니다.
  • dataset: 필수사항. 전송 구성의 대상 데이터 세트입니다.
  • parameters: 필수. JSON 형식으로 생성된 전송 구성의 매개변수입니다. 예를 들면 --params='{"param":"param_value"}'입니다. 다음은 Amazon S3 전송을 위한 매개변수입니다.

    • destination_table_name_template: 필수. 대상 테이블의 이름입니다.
    • data_path: 필수. 다음 형식의 Amazon S3 URI입니다.

      s3://mybucket/myfolder/...

      URI는 매개변수로도 지정할 수 있습니다.

    • access_key_id: 필수. 액세스 키 ID입니다.

    • secret_access_key: 필수. 보안 비밀 액세스 키입니다.

    • file_format: 선택사항. 전송할 파일 유형(CSV, JSON, AVRO, PARQUET 또는 ORC)을 나타냅니다. 기본값은 CSV입니다.

    • max_bad_records: 선택사항. 허용되는 불량 레코드 수입니다. 기본값은 0입니다.

    • ignore_unknown_values: 선택사항이며 file_formatJSON 또는 CSV가 아닌 경우 무시됩니다. 데이터에서 알 수 없는 값을 무시할지 여부입니다.

    • field_delimiter: 선택 사항이며 file_formatCSV인 경우에만 적용됩니다. 필드를 구분하는 문자입니다. 기본값은 쉼표입니다.

    • skip_leading_rows: 선택 사항이며 file_formatCSV인 경우에만 적용됩니다. 가져오지 않으려는 헤더 행 수를 나타냅니다. 기본값은 0입니다.

    • allow_quoted_newlines: 선택 사항이며 file_formatCSV인 경우에만 적용됩니다. 따옴표가 있는 필드 안에서 줄바꿈을 허용할지 여부를 나타냅니다.

    • allow_jagged_rows: 선택 사항이며 file_formatCSV인 경우에만 적용됩니다. 뒤에 오는 선택적인 열이 누락된 행을 허용할지 여부를 나타냅니다. 누락된 값은 NULL로 채워집니다.

예를 들어 다음 명령어는 data_path_templates3://mybucket/myfile/*.csv, 대상 데이터세트 mydataset, file_format CSV를 사용하여 이름이 My Transfer인 Amazon S3 전송을 만듭니다. 이 예시에는 CSV file_format과 연관된 선택적 매개변수의 기본값이 아닌 값이 포함되어 있습니다.

기본 프로젝트에 전송이 생성됩니다.

bq mk --transfer_config \
--target_dataset=mydataset \
--display_name='My Transfer' \
--params='{"data_path_template":"s3://mybucket/myfile/*.csv",
"destination_table_name_template":"MyTable",
"file_format":"CSV",
"max_bad_records":"1",
"ignore_unknown_values":"true",
"field_delimiter":"|",
"skip_leading_rows":"1",
"allow_quoted_newlines":"true",
"allow_jagged_rows":"false",
"delete_source_files":"true"}' \
--data_source=amazon_s3

명령어를 실행한 후 다음과 같은 메시지가 수신됩니다.

[URL omitted] Please copy and paste the above URL into your web browser and follow the instructions to retrieve an authentication code.

안내에 따라 인증 코드를 명령줄에 붙여넣습니다.

API

projects.locations.transferConfigs.create 메서드를 사용하고 TransferConfig 리소스의 인스턴스를 지정합니다.

데이터 쿼리

BigQuery로 전송되는 데이터는 수집 시간으로 파티션을 나눈 테이블에 기록됩니다. 자세한 내용은 파티션을 나눈 테이블 소개를 참조하세요.

자동 생성된 뷰를 사용하지 않고 직접 테이블을 쿼리하는 경우에는 쿼리에서 _PARTITIONTIME 유사 열을 사용해야 합니다. 자세한 내용은 파티션을 나눈 테이블 쿼리를 참조하세요.

프리픽스 일치와 와일드 카드 일치의 영향

Amazon S3 API는 프리픽스 일치를 지원하지만 와일드 카드 일치는 지원하지 않습니다. 프리픽스와 일치하는 모든 Amazon S3 파일은 Google Cloud로 전송됩니다. 그러나 전송 구성에서 Amazon S3 URI와 일치하는 항목만 실제로 BigQuery에로드됩니다. 따라서 전송되었지만 BigQuery에 로드되지 않은 파일에 초과분의 Amazon S3 이그레스 비용이 발생할 수 있습니다.

다음 데이터 경로를 예시로 들어보겠습니다.

s3://bucket/folder/*/subfolder/*.csv

그리고 소스 위치에 다음 파일이 있다고 가정합니다.

s3://bucket/folder/any/subfolder/file1.csv
s3://bucket/folder/file2.csv

그러면 프리픽스가 s3://bucket/folder/인 모든 Amazon S3 파일이 Google Cloud로 전송됩니다. 이 예시에서는 file1.csvfile2.csv가 모두 전송됩니다.

하지만 s3://bucket/folder/*/subfolder/*.csv와 일치하는 파일만 실제로 BigQuery에 로드됩니다. 이 예시에서는 file1.csv만 BigQuery에 로드됩니다.

문제해결

다음은 일반적인 오류 및 권장되는 해결방법에 대한 정보입니다.

Amazon S3 PERMISSION_DENIED 오류

오류 권장 작업
입력한 AWS 액세스 키 ID가 Google 기록에 없습니다. 액세스 키가 존재하고 ID가 올바른지 확인합니다.
Google이 계산한 요청 서명이 제공된 서명과 일치하지 않습니다. 키와 서명 방법을 확인하세요. 전송 구성에 올바른 해당 보안 비밀 액세스 키가 있는지 확인합니다.
소스 S3 버킷의 위치를 가져올 수 없습니다. 추가 세부정보: 액세스 거부됨

소스 S3 버킷의 위치를 가져올 수 없습니다. 추가 세부정보: HTTP/1.1 403 금지됨

S3 오류 메시지: 액세스 거부됨
AWS IAM 사용자에게 다음을 수행할 권한이 있는지 확인합니다.
  • Amazon S3 버킷을 나열합니다.
  • 버킷의 위치를 가져옵니다.
  • 버킷의 객체를 읽습니다.
서버가 객체 업로드를 초기화할 수 없습니다. InvalidObjectState: 작업이 객체의 스토리지 클래스에 유효하지 않습니다.

소스 S3 버킷의 위치를 가져올 수 없습니다. 추가 세부정보: 이 객체에 대한 모든 액세스가 비활성화되었습니다.
Amazon Glacier에 보관처리된 객체를 모두 복원합니다. Amazon Glacier에 보관처리된 Amazon S3의 객체는 복원되기 전에는 액세스할 수 없습니다.
이 객체에 대한 모든 액세스가 비활성화되었습니다. 전송 구성의 Amazon S3 URI가 올바른지 확인합니다.

Amazon S3 전송 제한 오류

오류 권장 작업
전송 중인 파일 수가 10,000개 제한을 초과합니다. Amazon S3 URI에서 와일드 카드의 수를 1개로 줄일 수 있는지 확인합니다. 이렇게 할 수 있으면 전송 실행당 최대 파일 수가 더 많아지므로 새로운 전송 구성으로 다시 시도합니다.

전송 구성을 각각 소스 데이터의 일부를 전송하는 여러 전송 구성으로 분할할 수 있는지 확인합니다.
전송 중인 파일 크기가 16,492,674,416,640 바이트 제한을 초과합니다. 전송 구성을 각각 소스 데이터의 일부를 전송하는 여러 전송 구성으로 분할할 수 있는지 확인합니다.

일반적인 문제

오류 권장 작업
파일이 Amazon S3에서 전송되었지만 BigQuery로 로드되지 않습니다. 전송 로그는 다음과 유사할 수 있습니다.

Amazon S3에서 Google Cloud로 데이터 이동이 완료되었습니다. <NNN> 객체를 이동했습니다.
Amazon S3 URI와 일치하는 새 파일이 없습니다.
전송 구성의 Amazon S3 URI가 올바른지 확인합니다.

전송 구성이 공통의 프리픽스가 있는 모든 파일을 로드하기 위한 것이라면 Amazon S3 URI가 와일드 카드로 끝나는지 확인하세요.
예를 들어 s3://my-bucket/my-folder/의 모든 파일을 로드하려면 전송 구성의 Amazon S3 URI가 s3://my-bucket/my-folder/가 아니라 s3://my-bucket/my-folder/*여야 합니다.
기타 문제 전송 구성 문제해결을 참조하세요.

다음 단계