# Amazon S3

Amazon Simple Storage Service (Amazon S3) 是一种对象存储服务，具有业界领先的可扩展性、数据可用性、安全性和性能。

## 准备身份验证

要访问您的 数据，您需要使用您的帐户凭据对连接进行身份验证。

信息注释请确保您使用的帐户对要获取的表具有读取权限。

要连接Amazon S3 ，您需要 AWS Identity Access Management (IAM) 中允许您创建策略、创建角色并将策略附加至角色的权限。这是向您的 S3 存储段授予授权所必需的：

* [创建 IAM 策略](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/SourcesConnections/Connecting-Amazon-S3.htm#Creating)。
* [创建 IAM 角色](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/SourcesConnections/Connecting-Amazon-S3.htm#Creating2)。

### 创建 IAM 策略

[IAM 策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json)是一种基于 JSON 的访问策略语言，用于管理存储段资源的权限。

亚马逊 S3 权限

| 权限名称 | 运算 | 描述 |
| --- | --- | --- |
| **s3:GetObject** | **[GET 对象](http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html)** | 允许从 Amazon S3 检索对象。 |
| **s3:GetObject** | **[HEAD 对象](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectHEAD.html)** | 允许检索对象的元数据，而不返回对象本身。 |
| **s3:ListBucket** | **[GET 存储段（列表对象）](http://docs.aws.amazon.com/AmazonS3/latest/API/v2-RESTBucketGET.html)** | 允许返回存储段中的部分或全部（最多 1000 个）对象。 |
| **s3:ListBucket** | **[HEAD 存储段](http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketHEAD.html)** | 用于确定存储段是否存在并允许访问。 |

创建 IAM 策略：

1. 在 AWS 中，[导航至 IAM 服务](https://console.aws.amazon.com/iam/home#/home)，方法是单击**服务**菜单并键入IAM。
2. 显示结果后，单击 IAM。
3. 单击页面左侧菜单中的策略。
4. 单击创建策略。
5. 在创建策略页面，单击JSON选项卡。
6. 选择文本字段中的所有内容并删除。
7. 在文本字段中，粘贴以下 JSON，并用您的存储段名称替换 `MyBucketName`
   ```
   {
       "Version": "2012-10-17",
       "Statement": [
           {
               "Sid": "",
               "Effect": "Allow",
               "Action": [
               "s3:GetObject",
               "s3:ListBucket"
               ],
               "Resource": [
               "arn:aws:s3:::MyBucketName",
               "arn:aws:s3:::MyBucketName/*"
               ]
           }
       ]
   }
   ```
8. 单击审查策略。
9. 在审查策略页面，为策略命名。例如：`qlik_amazon_s3`。
10. 单击创建策略。

### 创建 IAM 角色

信息注释

要完成此步骤，您需要以下 AWS IAM 权限：`CreateRole` 和 `AttachRolePolicy`。有关更多信息，请参阅[亚马逊的文档](https://docs.aws.amazon.com/IAM/latest/APIReference/API_Operations.html)。

如果要创建多个 Amazon S3 集成，则需要为连接的每个集成完成此步骤。

1. 在 AWS 中，导航至 [IAM 角色](https://console.aws.amazon.com/iam/home#/roles)页面。
2. 单击创建角色。
3. 在创建角色页面：
   1. 在选择受信任实体类型部分，单击另一个 AWS 帐户选项。

   2. 在帐户 ID 字段中，粘贴 `338144066592`。

   3. 在选项部分，选择要求外部 ID 复选框。

   4. 在显示的外部 ID字段中，粘贴 `qlik_connection_<tenant-id>` 并用您的租户 ID 替换 `<tenant-id>` 。

      要查找您的租户 ID，请参阅[查找租户信息](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Admin/qcs-account-information.htm)。

   5. 单击下一步：权限。
4. 在附加权限页面：
   1. 搜索在[创建 IAM 策略](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/SourcesConnections/Connecting-Amazon-S3.htm#Creating)中创建的策略。
   2. 找到位置后，在表格中勾选其旁边的框。
   3. 单击下一步：标签
5. 如果要输入任何标签，请在添加标签页面输入。否则，请单击下一步：审查。
6. 在审查页面上：
   1. 在角色名称字段中，粘贴 `qlik_s3_<tenant-id>` 并用您的租户 ID 替换 `<tenant-id>`。

      要查找您的租户 ID，请参阅[查找租户信息](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Admin/qcs-account-information.htm)。

   2. 在角色描述字段中输入描述。例如：`Qlik role for Amazon S3 integration.`

   3. 单击创建角色。

### 定义搜索模式

搜索模式字段定义了 Qlik 在选择和复制文件时应使用的搜索条件。该字段接受正则表达式，可用于包含单个文件或多个文件。

创建搜索模式时，请注意：

* 当为单个表包含多个文件时，每个文件应具有相同的标题行值。
* 句点 (`.`) 等特殊字符在正则表达式中具有特殊含义。为了完全匹配，需要对它们进行转义。例如：`.\`
* Qlik 对于正则表达式使用 Python，其语法可能与其他类型不同。在保存集成之前，请尝试使用 [PyRegex](http://www.pyregex.com/) 测试您的表达式。
* Parquet (`.parquet`) 和 Arvo (`.arvo`) 搜索模式也受支持。
* 搜索模式应考虑文件中数据的更新方式。请看这些例子：

| **场景** | 单个文件，定期更新 | 多个文件，每天生成 |
| --- | --- | --- |
| **如何进行更新** | 一个 JSONL 文件会定期用新的和已更新的客户数据更新。 | 每天都会创建一个新的 CSV 文件，其中包含新的和更新的客户数据。旧文件在创建后永不会更新。 |
| **文件名** | `customers.jsonl` | `customers-[STRING].csv`，其中 `[STRING]` 是一个唯一的随机字符串 |
| **搜索模式** | 因为文件永远只会有一个，您可以在 S3 存储段中输入文件的准确名称：<br><br>```<br>customers\.jsonl<br>```<br><br>`customers\.jsonl`customers\.\.jsonl | 为确保识别出新的和更新的文件，您需要输入一个搜索模式，匹配以 `customers` 开头的所有文件，而不用考虑文件名中的字符串是什么：<br><br>```<br>(customers-).*\.csv<br>```<br><br>`(customers-).*\.csv`((customers-)).\*\*\.\.csv |
| **精确匹配** | `customer.jsonl`， | <ul> <li><code>customers-reQDSwNG6U.csv</code> </li> <li><code>customers-xaPTXfN4tD.csv</code> </li> <li><code>customers-MBJMhCbNCp.csv</code> </li> <li>等。</li> </ul> |

### 文件要求

| 第一行标题（仅限 CSV 文件） | <ul> <li>每个文件都必须有一个包含列名的首行标题。搜索模式应考虑文件中数据的更新方式。</li> <li>如果表中包含多个文件，则这些文件应具有相同的第一行标题值。<span>Amazon S3</span> 集成允许您将多个文件映射到单个目标表。表头行值用于确定表的模式。为了获得最佳结果，每个文件都应该具有相同的标题行值。<p>这与配置多个表不同。有关示例，请参阅<a href="https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/SourcesConnections/Connecting-Amazon-S3.htm#Defining">定义搜索模式</a>。</p></li> </ul> |
| --- | --- |
| 文件类型 | <ul> <li>CSV (<code>.csv</code>)</li> <li>文本 (<code>.txt</code>)</li> <li>JSONL (<code>.jsonl</code>)</li> <li>Parquet (<code>.parquet</code>)</li> <li>Arvo (<code>.arvo</code>)<p>Avro 文件必须含有架构才能受支持。</p></li> </ul> |
| 压缩类型 | 必须正确压缩这些文件，否则在解压时会出现错误。<br><br><ul> <li>gzip 压缩文件 (<code>.gz</code>)</li> </ul> |
| 分隔符（仅限 CSV 文件） | <ul> <li>逗号 (<code>,</code>)</li> <li>制表符 (<code>/t</code>)</li> <li>管道 (<code>\|</code>)</li> <li>分号 (<code>;</code>)</li> </ul> |
| 字符编码 | UTF-8（仅 `.csv`、`.txt` 和 `.jsonl`）<br><br>信息注释`.parquet` 和 `.arvo` 文件为原始二进制文件。 |

## 创建连接

有关更多信息，请参阅[连接到 SaaS 应用程序](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Landing/connecting-web-applications.htm)。

1. 填写所需的连接属性。

2. 在连接名称中提供连接的名称。

3. 选择打开连接元数据以定义创建连接时的元数据。

4. 单击创建。

连接设置

| 设置 | 描述 |
| --- | --- |
| 数据网关 | 如果您的用例需要，请选择一个 数据移动网关。<br><br>信息注释<br><br>此字段不适用于 Qlik Talend Cloud Starter 订阅，因为它不支持 数据移动网关。如果您有另一个订阅层并且不想使用 数据移动网关，请选择无。<br><br>有关 数据移动网关 的优势和需要它的用例的信息，请参阅[Qlik Data Gateway - Data Movement](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/replication-gateway.htm)。 |
| 开始日期 | 按格式 `MM/DD/YYYY` 输入必须将数据从源复制到目标的日期。 |
| S3 存储段 | S3 存储段的名称。 |
| AWS 帐户 ID | 存储桶所在帐户的 AWS 帐户 ID。<br><br>您可以在 AWS 管理控制台的“帐户详细信息”下找到您的 AWS 帐户 ID。 |
| 搜索模式 | 输入要包含在表格中的文件。您可以输入单个文件名或正则表达式。<br><br>示例：`users\*.csv``products\*.jsonl`。 |
| 目录 | 限制在此目录路径中的搜索。定义后，将只搜索此位置的文件，并选择与搜索模式匹配的文件。不能使用正则表达式。<br><br>例如：csv-exports-folder 或 employee\_jsonl\_exports。 |
| 表格配置<br><br>通过指定要包含的文件来配置表格。<br><br>您可以配置多个表格。 |  |
| 表格名称 | 表格名称。<br><br>每个目标都有自己的表命名规则。例如，Amazon Redshift 表名不能超过 127 个字符。 |
| 主键 | 输入主键以标识唯一的行或记录。当您输入多个键时，请使用逗号分隔值。<br><br><ul><li>对于 CSV 文件，请输入标题字段或列名。</li><li>对于 JSONL 文件，请输入属性名或对象键。</li></ul><br><br>例如：id、name。 |
| 指定日期时间字段 | 在表中输入必须显示为日期时间而不是字符串的值。<br><br>例如：created\_at、modified\_at。 |
| 分隔符 | 从下拉列表中选择分隔符。 |