将数据镜像到云数据仓库
镜像任务使您能够从云数据仓库查询存储在 Qlik Open Lakehouse 中的数据。数据会反映在您的仓库中,而不会产生重复。镜像表可确保将存储和工程成本降至最低,并维护单一事实来源。
将数据载入 Qlik Open Lakehouse 后,您可以使用镜像表将数据镜像到云数据仓库。可以使用原生支持 Iceberg 的查询引擎(例如 Amazon Athena)查询 Iceberg 中的数据。但是,当您想要实施开放的 Iceberg 湖仓一体架构并继续使用数据仓库查询引擎时,镜像表是理想的选择。镜像数据任务通过在数据仓库中将 Iceberg 表声明为外部表和视图,自动执行使其可访问的过程。数据仓库将 Iceberg 表称为外部视图,因为它不管理该表,只从中读取数据。外部表和视图允许您在数据仓库中查询 Iceberg 数据,而无需将数据或表的管理迁移到数据仓库。
镜像任务执行必要的 DDL 语句以创建外部表和视图。 表(模式)与更改和历史记录表一起显示在数据仓库中,但如果您查看表定义,它会显示为在外部表之上创建的视图。数据使用者可以像数据存储在其数据仓库环境中一样查询视图。镜像数据提供高性能,因为 Qlik 会继续管理和优化数据。
支持以下数据仓库:
-
Amazon Redshift
-
Databricks
-
Snowflake
镜像到多个数据仓库
单个数据集可以镜像到多个云数据仓库。下图演示了如何使用 Qlik Open Lakehouse 管道项目将数据镜像到 Amazon Redshift 和 Snowflake:
-
管道使用连接 MySQL QCDI-BETA 从 MySQL 数据库摄取数据。
-
数据湖登陆任务 EnergyGen_Lake_landing 将原始数据摄取到 Amazon S3 存储段。
-
接下来,存储任务 EnergyGen_Storage 将数据复制到 S3 位置,以 Apache Iceberg 格式存储数据。
-
镜像数据任务 Redshift Mirror 创建必要的视图以允许从 Amazon Redshift 查询数据,并自动刷新数据。
-
转换任务 Redshift_Energygen_Silver 用于在 Amazon Redshift 中转换和使用镜像数据。
-
添加了第二个镜像数据任务 Snowflake Mirror,以创建必要的视图从而允许从 Snowflake 查询数据。镜像任务使用 Qlik-managed 刷新机制,该机制允许下游转换。
-
转换任务 Snowflake_Energygen_Data_Products 用于在 Snowflake 中转换和使用数据。
刷新机制
可供您使用的刷新机制取决于您的云数据仓库提供商,详情如下。
Amazon Redshift
镜像到 Amazon Redshift 的数据会自动刷新,无需计划或运行任务。在 Amazon Redshift 中,所有表和视图名称都会转换为小写,因为 Qlik Open Lakehouse 不支持区分大小写的对象名称(数据库、模式、表或列)。
Snowflake
Snowflake 指向反映 Iceberg 中可用数据最新快照的元数据。有两种方法可以刷新元数据:
-
Qlik-managed:此选项需要激活的 Snowflake 仓库,并包括监控和数据预览。当您想要创建下游转换以及监控和计划任务时,请选择此选项。Qlik 拥有元数据刷新操作,因此您可以手动配置它,例如,每 30 分钟运行一次。此选项与多表转换特别相关,因为所有表的元数据会同时更新。虽然您可能会失去 Snowflake 托管刷新提供的一些实时增益,但您可以保持表之间的一致性。对于多表转换,您可以根据需要频繁触发刷新。Qlik 建议您在计划的镜像任务之后的下游转换任务上设置基于事件的触发。
-
Snowflake-managed:一种无服务器操作,利用 Snowpipe 基础架构,无需或激活计算仓库。当您不需要下游转换时,建议使用此选项。在创建 Snowflake 目录集成时配置刷新间隔。要监控自动刷新的状态,请在 Snowflake 中查询 SYSTEM$AUTO_REFRESH_STATUS。Qlik 会失去对该过程的所有权,并且无法监控此类任务。
The parquet file 'tg_open_lakehouse/bronze/sales/tables/tg_sales_ingestion_bronze__internal.order_details__internal/data/hdr__scd_partition=asset_state/2025_09_12_00_37_asset_state_apply-4bcbb2eb-4ad3-4d88-bea6-ea611576624e.parquet' for table 'OPENLAKEHOUSE."snowflake_mirror__internal"."ext__order_details"' was inaccessible.
Databricks
Databricks 外部目录直接从 AWS Glue 读取 Iceberg 元数据。运行镜像任务后,最新的数据快照可在 Databricks 中查询,无需额外的刷新步骤。
先决条件
以下要求适用于所有支持的数据仓库目标:
-
只有在 Qlik Open Lakehouse 项目中创建了存储任务后,才能添加镜像数据任务。
-
一个存储任务可以有多个镜像数据任务,每个任务针对不同的数据仓库。
-
一个镜像数据任务只能与一个存储任务关联。
-
要执行转换,请创建一个数据仓库项目并使用镜像数据任务作为源。项目和镜像任务必须使用相同的数据仓库平台,例如 Redshift。
要镜像您的数据,请配置目标数据仓库的设置。
Amazon Redshift
-
与要将数据镜像到的数据仓库数据库的连接。或者,您可以在创建镜像任务期间创建新连接。有关详细信息,请参阅 Amazon Redshift。
-
Redshift 承担的具有 Glue Data Catalog 读取权限的 IAM 角色。以下脚本提供了访问目录所需的权限。确保将 <ICEBERG_BUCKET_NAME> 替换为您的存储段名称:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetDatabases", "glue:GetTable", "glue:GetTables", "glue:GetPartition", "glue:GetPartitions" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::<ICEBERG_BUCKET_NAME>", "arn:aws:s3:::<ICEBERG_BUCKET_NAME>/*" ] } }此角色需要以下信任关系:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift-serverless.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }信息注释有关详细信息,请参阅 Amazon Redshift Spectrum 的 IAM 策略。 -
Redshift 中指向存储任务数据库的外部模式。您必须通过执行 CREATE EXTERNAL SCHEMA 命令并指向源 Iceberg 存储任务内部数据库来创建外部 Redshift 模式。外部使用者应从镜像任务模式使用视图中进行使用。要创建外部模式,请使用以下语法,确保 DATABASE 属性是存储任务创建的数据库:
CREATE EXTERNAL SCHEMA <local_schema_name>
FROM DATA CATALOG
DATABASE '<database_name>'
IAM_ROLE 'arn:aws:iam::<AWS account-id>:role/<role-name>'
REGION '<aws-region>'
Snowflake
-
与要将数据镜像到的数据仓库数据库的连接。或者,您可以在创建镜像任务期间创建新连接。有关详细信息,请参阅 Snowflake。
-
Snowflake 外部卷。这授予 Snowflake 对您的 S3 位置的受限访问权限。要配置卷,请参阅 为 Amazon S3 配置外部卷。
-
AWS Glue Data Catalog 集成。这使 Snowflake 能够连接到对象存储中以 Iceberg 开放表格式保存的数据。要配置目录集成,请参阅 为 AWS Glue 配置目录集成。
Databricks
-
与要将数据镜像到的 Databricks 工作区的连接。或者,您可以在创建镜像任务期间创建新连接。有关详细信息,请参阅 Databricks。
-
在创建镜像任务之前,必须在 AWS 和 Databricks 中配置以下对象:
-
AWS 中的 Glue 连接。这使 Databricks 能够通过 AWS Glue Data Catalog 联合元数据查询。有关详细信息,请参阅 AWS Glue > 连接到数据。
-
Databricks Unity Catalog 中与 AWS 链接的服务凭据。这授予 Databricks 访问 AWS 服务所需的权限。有关详细信息,请参阅 Databricks > 创建服务凭据。
-
Databricks Unity Catalog 中指向您的 S3 存储段的外部位置。这授权 Databricks 读取由存储任务管理的 S3 路径处的 Iceberg 数据。有关详细信息,请参阅 Databricks > 外部位置。
-
Databricks Unity Catalog 中的外部目录。这会将 AWS Glue 中注册的 Iceberg 表公开为 Databricks 中的可查询表。有关详细信息,请参阅 Databricks > 外部目录。
-
创建镜像数据任务
要将数据镜像到数据仓库,请执行以下操作:
-
打开包含要镜像的数据的存储任务的项目。
-
单击存储任务上的
更多操作。选择 镜像数据,并对其进行配置:
-
名称:输入镜像任务的名称。
-
描述:或者,描述任务的用途。
-
数据仓库:选择目标数据仓库。
-
连接:
-
要使用现有连接,请单击 选择 以打开 安全源连接 对话框。选择连接所在的 空间,然后选择连接。单击 编辑 以修改连接属性。
-
要创建新连接,请单击 创建连接 以打开 创建连接 对话框并按照说明进行操作。
-
-
数据库:输入要将数据镜像到的数据库的名称。
-
要镜像到 Amazon Redshift:
-
外部模式:输入将在其中创建视图的模式的名称。
信息注释在 Amazon Redshift 中,所有表和视图名称都会转换为小写。
-
-
要镜像到 Snowflake:
-
Snowflake 外部卷:输入在 Snowflake 中创建的外部卷的名称。
-
Snowflake 目录集成:输入在 Snowflake 中创建的目录集成的名称。
-
选择您希望在 Snowflake 中刷新数据的方式:
-
Qlik-managed:如果您想要创建下游转换,请选择此选项。这需要激活的 Snowflake 仓库,并由 Qlik 监控。
-
Snowflake-managed:当您不想执行下游转换时,请选择此选项。不需要 Snowflake 仓库,因此不受 Qlik 监控。这在 Snowflake 中进行管理和监控。
-
-
-
要镜像到 Databricks:
-
Databricks 目录:输入 Databricks Unity Catalog 的名称。这通常是 hive_metastore。
-
Databricks 外部目录:输入连接到 AWS Glue 的 Databricks 外部目录的名称。
-
-
单击 确定 以创建镜像任务并将其添加到管道中的存储任务。
-
单击镜像任务上的
更多操作,然后选择 打开。确保您显示的是 设计 视图。
-
要选择可用数据集的子集,请单击 选择源数据 并删除任何不需要的数据集。
-
单击 准备 以创建外部对象并镜像数据。
执行转换
如果您需要转换数据,您可以创建一个 Redshift、Snowflake 或 Databricks 项目,并使用 Qlik Open Lakehouse 项目中的镜像数据任务作为源。镜像任务源必须与项目是相同的云数据仓库平台。例如,当您创建 Amazon Redshift 项目以执行转换时,您必须使用 Amazon Redshift 镜像数据任务作为源。
查看任务信息
点击菜单栏上的 以查看任务信息,例如:
-
所有者
-
空间
-
数据平台
-
项目 ID
-
数据任务运行时 ID
删除镜像数据任务
删除镜像任务时,将删除由镜像任务创建的内部模式和视图。Redshift 中的外部模式和表不会被删除。如果从 AWS Glue 中删除了表,例如,当用户在存储中删除数据集或删除整个存储任务时,该更改会自动反映在 Redshift 外部模式中。该表将被移除,不需要单独删除。作为最佳实践,如果不再使用外部模式,请将其完全删除。
要删除镜像数据任务,请执行以下操作:
-
在要删除的镜像数据任务上,单击任务上的
更多操作 菜单,然后选择 删除。 -
在确认对话框中,单击 删除。