

# Google Sheets에 연결
<a name="connecting-to-googlesheets"></a>

 Google Sheets는 대량의 데이터를 구성하고, 사용자 지정 보고서를 생성하고, 계산을 자동화하고, 다른 사용자와 협업할 수 있는 온라인 스프레드시트 소프트웨어입니다. Google Sheets 사용자의 경우 Google Sheets 계정에 AWS Glue를 연결할 수 있습니다. 그런 다음, Google Sheets를 ETL 작업에서의 데이터 소스로 사용할 수 있습니다. 이러한 작업을 실행하여 Google Sheets 및 AWS 서비스 또는 기타 지원되는 애플리케이션 간에 데이터를 전송합니다.

**Topics**
+ [Google Sheets에 대한 AWS Glue 지원](googlesheets-support.md)
+ [연결을 생성하고 사용하기 위한 API 작업이 포함된 정책](googlesheets-configuring-iam-permissions.md)
+ [Google Sheets 구성](googlesheets-configuring.md)
+ [Google Sheets 연결 구성](googlesheets-configuring-connections.md)
+ [Google Sheets 엔터티에서 읽기](googlesheets-reading-from-entities.md)
+ [Google Sheets 연결 옵션](googlesheets-connection-options.md)
+ [Google Sheets에 대한 권한 부여 코드 OAuth 흐름 설정](googlesheets-oauth-authorization.md)
+ [Google Sheets 커넥터의 제한 사항](googlesheets-connector-limitations.md)

# Google Sheets에 대한 AWS Glue 지원
<a name="googlesheets-support"></a>

AWS Glue에서는 다음과 같이 Google Sheets를 지원합니다.

**소스로 지원되나요?**  
예. AWS Glue ETL 작업을 사용하여 Google Sheets에서 데이터를 쿼리할 수 있습니다.

**대상으로서 지원되나요?**  
아니요.

**지원되는 Google Sheets API 버전**  
 Google Sheets API v4 및 Google Drive API v3 

# 연결을 생성하고 사용하기 위한 API 작업이 포함된 정책
<a name="googlesheets-configuring-iam-permissions"></a>

 다음 샘플 정책에서는 연결을 생성하고 사용하는 데 필요한 AWS 권한을 설명합니다. 새 역할을 생성하는 경우 다음을 포함하는 정책을 생성합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

아래 관리형 IAM 정책을 사용하여 다음에 대한 액세스를 허용할 수 있습니다.
+  [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – 다양한 AWS Glue 프로세스를 대신 실행하는 데 필요한 리소스에 대한 액세스 권한을 부여합니다. 이러한 리소스에는 AWS Glue, Amazon S3, IAM, CloudWatch Logs 및 Amazon EC2가 포함됩니다. 이 정책에 지정된 리소스의 이름 변환을 따르고자 한다면 AWS Glue 절차는 필요한 권한을 소유합니다. 이 정책은 크롤러, 작업 및 개발 엔드포인트를 정의할 때 지정된 역할에 일반적으로 추가됩니다.
+  [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) - 정책이 연결된 자격 증명이 AWS Management Console을 사용하는 경우 AWS Glue 리소스에 대한 전체 액세스 권한을 부여합니다. 이 정책에 지정된 리소스의 이름 변환을 따르면 사용자는 콘솔 전체 용량을 소유합니다. 이 정책은 보통 AWS Glue 콘솔의 사용자에게 해당됩니다.

# Google Sheets 구성
<a name="googlesheets-configuring"></a>

AWS Glue를 사용하여 Google Sheets에서 전송하려면 먼저 다음 요구 사항을 충족해야 합니다.

## 최소 요구 사항
<a name="googlesheets-configuring-min-requirements"></a>
+ 이메일 및 암호가 설정된 Google Sheets 계정이 있습니다.
+  API 액세스에 대해 Google Sheets 계정이 활성화되어 있습니다. Google Sheets API는 모두 추가 비용 없이 사용 가능합니다.
+  Google Sheets 계정을 사용하면 연결된 앱을 설치할 수 있습니다. 이 기능에 대한 액세스 권한이 없는 경우 Google Sheets 관리자에게 문의하세요.

 이러한 요구 사항을 충족하면 Google Sheets 계정에 AWS Glue를 연결할 준비가 된 것입니다.

# Google Sheets 연결 구성
<a name="googlesheets-configuring-connections"></a>

Google Sheet 연결을 구성하는 방법:

1. AWS Secrets Manager에서 다음 세부 정보로 보안 암호를 생성합니다.

   1.  AuthorizationCode 권한 부여 유형의 경우: 
      +  고객 관리형 연결된 앱의 경우 - 보안 암호는 키 역할을 하는 `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET`과 함께 연결된 앱 소비자 보안 암호를 포함해야 합니다.

1. AWS Glue Glue Studio의 **데이터 연결**에서 아래 단계에 따라 연결을 생성하세요.

   1. **데이터 소스**를 선택할 때 Google Sheets를 선택합니다.

   1. Google Sheets 환경을 제공합니다.

      1.  토큰을 넣기 위해 AWS Glue에서 이 연결에 사용할 `secretName`을 선택합니다.

      1.  네트워크를 사용하려는 경우 네트워크 옵션을 선택합니다.

1.  AWS Glue 작업 권한과 연결된 IAM 역할에 `secretName`을 읽을 수 있는 권한을 부여합니다.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "secretsmanager:DescribeSecret",
           "secretsmanager:GetSecretValue",
           "secretsmanager:PutSecretValue",
           "ec2:CreateNetworkInterface",
           "ec2:DescribeNetworkInterfaces",
           "ec2:DeleteNetworkInterface"
         ],
         "Resource": "*"
       }
     ]
   }
   ```

------

 **AUTHORIZATION\$1CODE 권한 부여 유형** 

 이 권한 부여 유형은 사용자를 인증하기 위해 사용자를 서드파티 권한 부여 서버로 리디렉션하는 방식에 의존하므로 '3각' OAuth로 간주됩니다. AWS Glue 콘솔을 통해 연결을 생성할 때 사용됩니다. AWS Glue 콘솔은 사용자를 Google Sheets로 리디렉션합니다. 사용자가 로그인하고 Google Sheets 인스턴스에 액세스하도록 요청된 권한을 AWS Glue에 허용해야 합니다.

 사용자는 AWS Glue 콘솔을 통해 연결을 생성할 때에도 Google Sheets에서 자체 연결된 앱을 생성하고 자체 클라이언트 ID와 클라이언트 보안 암호를 제공하기로 선택할 수 있습니다. 이 시나리오에서는 여전히 Google Sheets로 리디렉션되어 로그인하고 리소스에 액세스할 수 있는 권한을 AWS Glue에 부여합니다.

 이 권한 부여 유형은 새로 고침 토큰과 액세스 토큰을 생성합니다. 액세스 토큰은 수명이 짧으며 새로 고침 토큰을 사용하여 사용자 상호 작용 없이 자동으로 새로 고칠 수 있습니다.

 자세한 내용은 [권한 부여 코드 OAuth 흐름을 위한 연결된 앱 생성의 퍼블릭 Google Sheets 설명서](https://developers.google.com/workspace/guides/create-credentials)를 참조하세요.

# Google Sheets 엔터티에서 읽기
<a name="googlesheets-reading-from-entities"></a>

 **사전 조건** 
+  읽으려는 Google SpreadSheet입니다. 스프레드시트의 SpreadSheet ID 및 tabName이 필요합니다.

 **Google Sheets 엔터티 및 필드 세부 정보:** 


| 개체 | 데이터 형식 | 지원되는 연산자 | 
| --- | --- | --- | 
| 스프레드시트 | String | N/A(필터링이 지원되지 않음) | 

 **예제** 

```
googleSheets_read = glueContext.create_dynamic_frame.from_options(
    connection_type="googlesheets",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "{SpreadSheetID}#{SheetTabName}",
        "API_VERSION": "v4"
    }
```

 **분할 쿼리** 

 레코드 기반 분할에 한해 Spark에서 동시성을 활용하려는 경우 추가 Spark 옵션으로 `NUM_PARTITIONS`를 제공할 수 있습니다. 이 파라미터를 사용하면 Spark 태스크에서 동시에 실행할 수 있는 `NUM_PARTITIONS`개의 하위 쿼리로 원본 쿼리가 분할됩니다.

 **`NUM_PARTITIONS`를 사용한 예** 

```
googlesheets_read = glueContext.create_dynamic_frame.from_options(
    connection_type="googlesheets",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "{SpreadSheetID}#{SheetTabName}",
        "API_VERSION": "v4",
        "NUM_PARTITIONS": "10"
    }
```

# Google Sheets 연결 옵션
<a name="googlesheets-connection-options"></a>

다음은 Google Sheets의 연결 옵션입니다.
+  `ENTITY_NAME`(문자열) - (필수) 읽기에 사용됩니다. Google Sheets의 `SpreadSheet ID` 및 `sheetTabName`. 예시: `{SpreadSheetID}#{SheetTabName}`.
+  `API_VERSION`(문자열) - (필수) 읽기에 사용됩니다. 사용하려는 Google Sheets Rest API 버전.
+  `SELECTED_FIELDS`(List<String>) - 기본값: 비어 있습니다(SELECT \$1). 읽기에 사용됩니다. 객체에 대해 선택할 열.
+  `FILTER_PREDICATE`(문자열) - 기본값: 비어 있습니다. 읽기에 사용됩니다. Spark SQL 형식이어야 합니다.
+  `QUERY`(문자열) - 기본값: 비어 있습니다. 읽기에 사용됩니다. 전체 Spark SQL 쿼리.
+  `NUM_PARTITIONS`(정수) - 기본값: 1. 읽기에 사용됩니다. 읽을 파티션 수.

# Google Sheets에 대한 권한 부여 코드 OAuth 흐름 설정
<a name="googlesheets-oauth-authorization"></a>

 **사전 조건** 
+  Google Sheets 앱을 사용하기 위해 로그인할 수 있는 Google 계정. Google 계정에서 Google Sheets에는 전송하려는 데이터가 포함되어 있습니다.
+  Google Cloud Platform 관리자 계정 및 Google Cloud 프로젝트. 자세한 내용은 [Create Google Cloud Project](https://developers.google.com/workspace/guides/create-project)를 참조하세요.

**Google 계정을 설정하고 OAuth 2.0 자격 증명을 가져오는 방법:**

1.  Google Cloud 프로젝트가 설정되면 프로젝트에서 Google Sheets API 및 Google Drive API를 활성화하세요. 이를 활성화하는 단계는 Google Cloud Platform용 API Console Help의 [Enable and disable APIs](https://support.google.com/googleapi/answer/6158841)를 참조하세요.

1.  그런 다음 외부 사용자에 대한 OAuth 동의 화면을 구성하세요. OAuth 동의 화면에 대한 자세한 내용은 Google Cloud Platform Console Help의 [Setting up your OAuth consent screen](https://support.google.com/cloud/answer/10311615#)을 참조하세요.

1.  OAuth 동의 화면에서 다음 범위를 추가하세요.
   +  [ Google Sheets API 읽기 전용 범위 ](https://www.googleapis.com/auth/spreadsheets.readonly) 
   +  [ Google Drive API 읽기 전용 범위 ](ttps://www.googleapis.com/auth/drive.readonly) 

    이러한 범위에 대한 자세한 내용은 Google Identity 설명서의 [OAuth 2.0 Scopes for Google APIs](https://developers.google.com/identity/protocols/oauth2/scopes)를 참조하세요.

1.  OAuth 2.0 클라이언트 ID 및 보안 암호를 생성하세요. 이 클라이언트 ID를 생성하는 단계는 Google Cloud Platform Console Help의 [Setting up OAuth 2.0](https://support.google.com/cloud/answer/6158849?hl=en#zippy=)을 참조하세요.

    OAuth 2.0 클라이언트 ID에는 하나 이상의 승인된 리디렉션 URL이 포함되어야 합니다.

    리디렉션 URL 형식은 다음과 같습니다.
   + https://<aws-region>.console.aws.amazon.com/gluestudio/oauth 

1.  OAuth 2.0 클라이언트 ID의 설정에서 클라이언트 ID 및 클라이언트 보안 암호를 기록하세요.

# Google Sheets 커넥터의 제한 사항
<a name="googlesheets-connector-limitations"></a>

다음은 Google Sheets 커넥터의 제한 사항입니다.
+  Google Sheets 커넥터는 필터를 지원하지 않습니다. 따라서 필터 기반 분할은 지원되지 않습니다.
+  레코드 기반 분할에는 SAAS별로 정확한 레코드 수를 반환하는 조항이 없습니다. 결과적으로 빈 레코드가 있는 파일이 생성되는 시나리오가 발생할 수 있습니다.
+  Google Sheets 커넥터는 필터 기반 분할을 지원하지 않으므로 `partitionField`, `lowerbound` 및 `upperbound`는 유효한 연결 옵션이 아닙니다. 이러한 옵션이 제공되면 AWS Glue 작업이 실패할 것으로 예상됩니다.
+  데이터 처리 문제를 방지하려면 시트의 첫 번째 행을 헤더 행으로 지정하는 것이 중요합니다.
  +  헤더 행을 제공하지 않으면 시트에 첫 번째 행이 비어 있는 데이터가 포함된 경우 헤더 행이 `Unnamed:1`, `Unnamed:2`, `Unnamed:3` 등으로 바뀝니다.
  +  헤더 행을 제공하면 빈 열 이름이 `Unnamed:<number of column>`으로 바뀝니다. 예를 들어 헤더 행이 `['ColumnName1', 'ColumnName2', '', '', 'ColumnName5', 'ColumnName6']`이면 `['ColumnName1', 'ColumnName2', 'Unnamed:3', 'Unnamed:4', 'ColumnName5', 'ColumnName6'].`으로 됩니다.
+  Google Sheets 커넥터는 증분 전송을 지원하지 않습니다.
+  Google Sheets 커넥터는 문자열 데이터 유형만 지원합니다.
+  시트의 중복 헤더는 숫자 접미사를 사용하여 반복적으로 이름이 바뀝니다. 중복 헤더의 이름을 바꾸는 동안 사용자가 제공한 헤더 이름이 우선합니다. 예를 들어 헤더 행이 ["Name", "", "Name", null, "Unnamed:6", ""]인 경우 ["Name", "Unnamed:2", "Name1", "Unnamed:4", "Unnamed:6", "Unnamed:61"]로 변경됩니다.
+  Google Sheets 커넥터는 tabName에 공백을 지원하지 않습니다.
+  폴더 이름에는 다음과 같은 특수 문자를 사용할 수 없습니다.
  + \$1
  + /