

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 連線至 Google Sheets
<a name="connecting-to-googlesheets"></a>

 Google Sheets 是一種線上試算表軟體，可讓您組織大量資料、建立自訂報告、自動化計算，以及與他人協作。如果您是 Google Sheets 使用者，您可以 AWS Glue 連線至 Google Sheets 帳戶。然後，您可以在 ETL 任務中使用 Google Sheets 作為資料來源。執行這些任務以在 Google Sheets AWS 和服務或其他支援的應用程式之間傳輸資料。

**Topics**
+ [AWS Glue 支援 Google Sheets](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)

# AWS Glue 支援 Google Sheets
<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 管理主控台時，授予 AWS Glue 資源的完整存取權。如果您依照此政策中指定的資源命名慣例，使用者就能擁有完整的主控台功能。此政策通常連接到 AWS Glue 主控台的使用者。

# 設定 Google Sheets
<a name="googlesheets-configuring"></a>

您必須先符合下列要求，才能使用 從 Google Sheets AWS Glue 傳輸：

## 最低需求
<a name="googlesheets-configuring-min-requirements"></a>
+ 您有一個具有電子郵件和密碼的 Google Sheets 帳戶。
+  您的 Google Sheets 帳戶已啟用 API 存取。所有 Google Sheets API 的使用皆免費。
+  您的 Google Sheets 帳戶允許您安裝連線的應用程式。如果無法存取此功能，請聯絡您的 Google Sheets 管理員。

 如果您符合這些要求，就可以 AWS Glue 連線到 Google Sheets 帳戶。

# 設定 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.  選取您要用於此連線`secretName`的 AWS Glue ，以放置字符。

      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 授權類型** 

 此授權類型被視為「三條腿的」OAuth，因為其依賴將使用者重新導向至第三方授權伺服器來驗證使用者。在透過 AWS Glue 主控台建立連線時使用。 AWS Glue 主控台會將使用者重新導向至 Google Sheets，使用者必須在其中登入 AWS Glue ，並允許請求的許可存取其 Google Sheets 執行個體。

 使用者可以選擇在 Google Sheets 中建立自己的連線應用程式，並在透過 AWS Glue 主控台建立連線時提供自己的用戶端 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 | 不適用 (不支援篩選條件) | 

 **範例** 

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

 **分區查詢** 

 僅對於「以記錄為基礎的分區」，如果您想利用 Spark 中的並行，可以提供 `NUM_PARTITIONS` 作為其他 Spark 選項。使用此參數，原始查詢會分區為可由 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`(String) - (必要) 用於讀取。Google Sheets 中的 `SpreadSheet ID` 和 `sheetTabName`。範例：`{SpreadSheetID}#{SheetTabName}`。
+  `API_VERSION`(String) - (必要) 用於讀取。您要使用的 Google Sheets Rest API 版本。
+  `SELECTED_FIELDS`(List<String>) - 預設：empty(SELECT \$1)。用於讀取。您要為物件選取的資料欄。
+  `FILTER_PREDICATE`(String) - 預設：空白。用於讀取。其應該為 Spark SQL 格式。
+  `QUERY`(String) - 預設：空白。用於讀取。完整的 Spark SQL 查詢。
+  `NUM_PARTITIONS`(Integer) - 預設：1。用於讀取。要讀取的分區數目。

# 設定 Google Sheets 的授權碼 OAuth 流程
<a name="googlesheets-oauth-authorization"></a>

 **先決條件** 
+  可讓您登入以使用 Google Sheets 應用程式的 Google 帳戶。在您的 Google 帳戶中，Google Sheets 包含您要傳輸的資料。
+  Google Cloud Platform 帳戶和 Google Cloud 專案。如需詳細資訊，請參閱[建立 Google Cloud 專案](https://developers.google.com/workspace/guides/create-project)。

**若要設定您的 Google 帳戶並取得 OAuth 2.0 憑證，請執行以下操作：**

1.  設定 Google Cloud 專案後，在專案中啟用 Google Sheets API 和 Google Drive API。如需啟用這些 API 的步驟，請參閱《適用於 Google 雲端平台的 API 主控台說明》中的[啟用和停用 API](https://support.google.com/googleapi/answer/6158841)。

1.  接著，為外部使用者設定 OAuth 同意畫面。如需 OAuth 同意畫面的詳細資訊，請參閱《Google 雲端平台主控台說明》中的[設定 OAuth 同意畫面](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 文件中的 [Google API 的 OAuth 2.0 範圍](https://developers.google.com/identity/protocols/oauth2/scopes)。

1.  產生 OAuth 2.0 用戶端 ID 和機密。如需建立此用戶端 ID 的步驟，請參閱《Google 雲端平台主控台說明》中的[設定 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
  + /