# Azure Cloud Storage 预览

Azure Cloud Storage 是 Microsoft 针对非结构化数据（包括文本、二进制文件、媒体、日志和应用程序备份）的托管对象存储服务。它支持热、冷和归档访问层，提供异地冗余复制，并与 Microsoft Entra ID（以前称为 Azure Active Directory）集成以实现安全的访问控制。

Qlik Talend Cloud 使用对目标存储帐户容器具有读取访问权限的 Microsoft Entra ID 应用程序（服务主体）连接到 Azure Cloud Storage。该连接器从指定的容器中检索文件，通过对文件内容进行采样自动发现模式，并根据文件修改时间戳执行增量数据复制。

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/SourcesConnections/Connecting-Azure-Cloud-Storage.htm)

#### 特性快照

对这个连接器进行高级查看，包括有用的链接和支持的特性。

| 特性/功能 | 支持详情 |
| --- | --- |
| 支持的 Qlik Talend Data Integration 项目 | 仅 [Replication 项目](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Replicating/data-replication-task.htm)。不支持数据管道项目。 |
| [目标更新方法](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/SourcesConnections/Change-processing.htm) | 复制任务：<br><br><ul><li><p>应用更改</p></li><li><p>存储更改</p></li></ul><br><br>在数据湖任务中登陆数据：<br><br><ul><li><p>更改数据捕获 (CDC)</p></li></ul> |
| [连接到 SaaS 应用程序](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Landing/connecting-web-applications.htm#Managing) | 无需手动生成元数据。 |
| [自动模式演进](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Replicating/replicating-settings.htm#Schema) | 只支持更改列数据类型操作。 |
| 复制 LOB 列（NCLOB、CLOB 和 BLOB） | 不支持 |
| 已计划 CDC | 必填字段。这就是目标与源的更改保持同步的方式。<br><br>有关复制任务，请参阅[计划任务](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Replicating/replicating-settings.htm#Scheduli2)<br><br>有关湖登陆任务，请参阅[为湖登陆任务调度 CDC](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Replicating/landing-datalakes-settings.htm#Scheduli2) |
| 通知 | 部分支持<br><br>[设置操作更改通知](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Introduction/Notifications.htm) |
| 监视 | 仅 CDC，因为满负载与此连接器无关。<br><br>[监视单个数据任务](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Introduction/Monitoring-data-tasks.htm) |
| JSON 列有效载荷的自动解密 | 不支持不会自动在目标上删除源数据集中的 JSON 列有效负载。 |

## 准备身份验证

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

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

要设置您的 Azure Cloud Storage 帐户，您需要：

* 具有 Azure Storage 帐户的 Azure 订阅。
* 存储帐户中包含要复制的文件的 blob 容器。
* 具有客户端密码的 Microsoft Entra ID 应用程序注册。
* 分配给应用程序服务主体的 Storage Blob Data Reader 角色，范围限定为存储帐户或特定容器。这是建议用于只读访问的最低权限角色。

要注册 Microsoft Entra ID 应用程序并检索您的凭据：

1. 登录您的 [Azure](https://portal.azure.com/) 帐户。
2. 导航到 Microsoft Entra ID &gt; 应用注册 &gt; 新注册。
3. 输入您的应用程序的以下信息：
   * 名称：输入名称，例如 QlikDataIntegration。
   * 支持的帐户类型：选择 仅此组织目录中的帐户。
4. 单击 注册。
5. 在应用程序 概述 页面上，复制 应用程序(客户端) ID 和 目录(租户) ID，并将它们保存到安全文件中。
6. 导航到 证书和密码 &gt; 客户端密码 &gt; 新客户端密码。
7. 输入描述并选择客户端密码的过期时间。
8. 单击 添加。
9. 复制您的客户端密码值并将其保存到安全文件中。
10. 在 Azure 门户中，打开您的存储帐户，然后导航到 访问控制 (IAM) &gt; 添加 &gt; 添加角色分配。
11. 选择 Storage Blob Data Reader 角色，并将此角色分配给您刚刚注册的应用程序。
12. 单击 保存。

### 支持的文件格式

* 带分隔符的文本文件：`.csv`、`.tsv`、`.psv`、`.txt`（具有可配置的分隔符）
* JSON Lines：`.jsonl`
* Parquet：`.parquet`
* Avro：`.avro`
* Excel：`.xlsx`（支持每个工作簿有多个工作表；每个工作表的行都会被复制，并且工作表名称会附加到 `_sdc_source_file` 列）
* Gzip 压缩文件：`.gz`（包含上述任何格式）

## 创建连接

有关更多信息，请参阅[连接到 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 数据网关 - 数据移动](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/replication-gateway.htm)。 |
| 开始日期 | 按格式 `MM/DD/YYYY` 输入必须将数据从源复制到目标的日期。 |
| 存储帐户名称 | Azure Storage 帐户的名称，例如 mystorageaccount，不带 `https://` 或 `.blob.core.windows.net`。 |
| 容器名称 | Blob 容器名称，例如 my-container。 |
| 租户 ID | 租户 ID。 |
| 表 | 表配置决定了读取哪些文件以及如何解释其内容。每个表定义都包含文件搜索模式、表名称以及用于自定义文件处理的可选设置。 |
| 客户端 ID | 客户端 ID。 |
| 客户端密码 | 客户端密码。 |

### 表配置

表配置中的每个条目代表一个从容器中的文件派生的逻辑表。可以为每个表配置以下属性：

| 属性 | 必需或可选 | 描述 |
| --- | --- | --- |
| 表名称 | 必需 | 指定逻辑表的名称（例如，`my_orders_csv`）。这将成为 Qlik Talend Cloud 中的数据流名称。 |
| 搜索模式 | 必需 | 提供用于匹配文件名的正则表达式（例如，`.*\.csv$` 匹配所有 CSV 文件）。如果提供了指定目录，则将其应用于容器或指定目录中的文件名。 |
| 目录 | 可选 | 在容器内输入文件夹路径前缀以缩小文件搜索范围（例如，`exports/orders/`）。通过限制扫描的文件来提高性能。这不是正则表达式。 |
| 主键 | 可选 | 定义用作主键的逗号分隔列名列表（例如，`id` 或 `id,date`）。对于 CSV 文件，使用标题字段名称；对于 JSONL 文件，使用顶级对象键。留空以使用全表复制。填充以启用基于文件修改时间的增量复制。 |
| 指定日期时间字段 | 可选 | 列出要视为日期时间字段的列名（以逗号分隔），即使在模式发现期间未自动检测到（例如，`created_at`、`updated_at`）。 |
| 分隔符 | 可选 | 指示带分隔符的文本文件的字段分隔符。默认值为 `,`（逗号）。对于 TSV 文件使用 `\t`，对于 PSV 文件使用 `\|`。如果未指定，则根据文件扩展名自动检测分隔符。 |

* 将 `.jsonl` 和 `.csv` 文件配置为单独的表，以确保准确的模式处理和数据一致性。
* 确保所有匹配搜索模式的 `.csv` 文件都包含具有相同列名和顺序的一致标题行。
* 在为每个表定义的所有 `.jsonl` 文件中使用一致的对象属性键。键名和结构应保持一致，以实现可靠的模式检测。

### 复制的表

表在您提供的表配置中定义。每个表对应于 blob 容器中与指定搜索模式以及（如果适用）目录前缀匹配的一组文件。连接器通过对每个表最多五个文件进行采样、读取每第五行并分析每个文件最多 1,000 条记录来发现表模式。

配置主键后，复制将使用基于文件修改时间戳的增量方法。在每次提取期间，将处理在上次同步书签之后修改的文件。如果未指定主键，则在每次运行时都会完全复制整个表。

默认情况下，以下系统列将添加到每个表中：

| 列 | 描述 |
| --- | --- |
| `_sdc_source_container` | 记录来源的 Azure blob 容器的名称。 |
| `_sdc_source_file` | 包含记录的文件的完整路径。对于 Excel 文件，将附加工作表名称（例如，`exports/q1.xlsx/Sheet1`）。 |
| `_sdc_source_lineno` | 文件内记录的行号。 |
| `_sdc_extra` | 解析出的与发现的模式不匹配的额外字段（仅限 `.jsonl` 文件）。 |

## 限制和注意事项

* 存储帐户名称作为裸名称提供，而不是 URL。
* 支持 Gzip 压缩文件（`.gz`）。连接器从 gzip 标头读取原始文件名以确定内部文件格式。使用 `--no-name`（标头中没有文件名）创建的 Gzip 文件将被跳过。
* 将检查具有 `.csv`、`.txt`、`.tsv`、`.psv` 或 `.jsonl` 扩展名的文件的 gzip 魔术字节，并透明地解压缩，即使该文件没有 `.gz` 扩展名也是如此。
* 不支持嵌套压缩（例如，一个 `.gz` 文件在另一个 `.gz` 文件内），并且会被跳过。
* 搜索模式 字段使用正则表达式语法，而不是 glob 模式（例如，使用 `.*\.csv$` 而不是 `*.csv`）。
* 没有可识别扩展名的文件将被跳过，并发出警告。
* 连接器包含内置的重试逻辑，针对 Azure API 速率限制 (HTTP 429) 和瞬态服务器错误（HTTP 500、502、503、504）采用指数退避，最多尝试五次。
* 文件编码应为 UTF-8。