将数据镜像到云数据仓库
镜像任务使您能够从您的云数据仓库查询存储在您的 Qlik Open Lakehouse 中的数据。数据反映在您的仓库中,没有进行复制。镜像表可确保将存储和工程成本降至最低,并且保持单一真实源。
将数据登录到 Qlik Open Lakehouse 后,您可以使用镜像表将数据镜像到您的云数据仓库。可以使用本机支持 Iceberg 的查询引擎(如 Amazon Athena)查询 Iceberg 中的数据。不过,当您想实施开放式 Iceberg 湖空间架构并继续使用您的数据仓库查询引擎时,镜像表是理想的选择。镜像数据任务通过将 Iceberg 表声明为您的数据仓库中的外部表和视图,自动化了访问 Iceberg 表的过程。数据仓库将 Iceberg 表称作外部视图,因为它并不管理该表,只是从中读取数据。外部表和视图允许您在您的数据仓库中查询 Iceberg 数据,而无需将数据或表的管理迁移到您的数据仓库中。
镜像任务执行必要的 DDL 语句,以创建外部表和视图。表(模式)显示在数据仓库中,以及更改表和历史表,但如果查看表定义,它会显示为在外部表之上创建的视图。数据使用者可以查询视图,就像数据存储在他们的数据仓库环境中一样。镜像数据可提供高性能,因为 Qlik 会继续管理和优化数据。
镜像到多个数据仓库
单个数据集可以镜像到多个云数据仓库。下图演示了 Qlik Open Lakehouse 管道项目如何可用于将数据镜像到 Amazon Redshift 和 Snowflake:
-
管道使用连接 MySQL QCDI-BETA 从 MySQL 数据库摄取数据。
-
Lake 登陆任务 EnergyGen_Lake_landing 将原始数据摄取到 Amazon S3 存储段。
-
接下来,存储任务 EnergyGen_Storage 将数据复制到 S3 位置,以 Apache Iceberg 格式存储数据。
-
镜像数据任务 Redshift Mirror 创建必要的视图,以使数据能够从 Redshift 查询,并自动刷新数据。
-
转换任务 Redshift_Energygen_Silver 用于转换和使用 Redshift 中的镜像数据。
-
第二个镜像数据任务Snowflake Mirror已添加,用于创建必要的视图,以便可以从Snowflake查询数据。该镜像任务使用Qlik 管理的刷新机制,该机制允许下游转换。
-
转换任务Snowflake_Energygen_Data_Products用于转换和使用Snowflake中的数据。
刷新机制
可用的刷新机制取决于您的云数据仓库提供商,详情如下。
Redshift
镜像到 Redshift 的数据会自动刷新,无需安排或运行任务。Redshift 中所有表和视图名称都转换为小写,因为 Qlik Open Lakehouse 不支持区分大小写的对象名称(数据库、架构、表或列)。
Snowflake
Snowflake 指向反映 Iceberg 内可用数据最新快照的元数据。刷新元数据有两种方法:
-
Qlik-托管:此选项需要激活 Snowflake 仓库,并包括监控和数据预览。若要创建下游转换并监控和安排任务,请选择此选项。Qlik 拥有元数据刷新操作,因此可以手动配置,例如每 30 分钟运行一次。该选项尤其适合多表转换,因为所有表的元数据都会同时更新。虽然您可能会失去一些由 Snowflake 管理的刷新所提供的实时收益,但是您可以保持表之间的一致性。对于多表转换,可根据需要随时触发刷新。Qlik 建议您对排定镜像任务后的下游转换任务设定基于事件的触发。
-
Snowflake 管理:利用 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.
先决条件
以下要求适用于所有受支持的数据仓库目标:
-
只有在 Qlik Open Lakehouse 项目中创建了存储任务后,才能添加镜像数据任务。
-
一个存储任务可以有多个镜像数据任务,每个任务都针对不同的数据仓库。
-
一个镜像数据任务只能与一个存储任务相关联。
-
要执行转换,请创建数据仓库项目,并使用镜像数据任务作为源。项目和镜像任务必须使用相同的数据仓库平台,例如 Redshift。
要镜像您的数据,请配置目标数据仓库的设置。
Redshift
-
连接至您要镜像数据的数据仓库数据库的连接。可选择在创建镜像任务时创建新的连接。有关更多信息,请参阅Amazon Redshift。
-
由 Redshift 承担的 IAM 角色,具有 Glue Data Catalog 读取权限。以下脚本提供访问您的目录所需的必要权限。请确保将 <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" } ] }信息注释有关更多信息,请参阅 IAM policies for Amazon Redshift Spectrum。 -
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 数据目录集成。这使 Snowflake 能够连接到对象存储中以 Iceberg 开放表格式进行保存的数据。要配置目录集成,请参见为 AWS Glue 配置目录集成。
创建镜像数据任务
要将数据镜像至您的数据仓库,请执行以下操作:
-
打开包含要进行镜像的数据的存储任务的投影项目。
-
单击存储任务上的
更多操作。 选择镜像数据并进行配置:
-
名称:输入镜像任务名称。
-
描述:可选择描述任务的目的。
-
数据仓库:选择您的目标数据仓库。
-
连接:
-
要使用现有的连接,请单击选择打开安全源连接对话框。选择连接所在的空间,然后再选择连接。单击编辑修改连接属性。
-
要创建新连接,请单击创建连接打开创建连接对话框,并按照说明操作。
-
-
数据库:输入要进行镜像的数据的数据库名称。
-
镜像到 Redshift:
-
外部模式:输入将在其中创建视图的模式的名称。
信息注释在 Redshift 中,所有表名和视图名都将转换为小写。
-
-
镜像到 Snowflake:
-
Snowflake 外部卷:输入在 Snowflake 中所创建的外部卷的名称。
-
Snowflake 目录集成:输入在 Snowflake 中所创建的目录集成名称。
-
选择要在 Snowflake 中使用的数据刷新方式:
-
Qlik 管理:如果要创建下游转换,可选择此选项。这需要激活 Snowflake 仓库,并由 Qlik 监控。
-
Snowflake-管理:当您不想执行下游转换时,请选择此选项。Snowflake 仓库不是必需的,因此不受 Qlik 的监控。这在 Snowflake 中进行管理和监控。
-
-
-
单击确定以创建镜像任务并将其添加到管道中的存储任务。
-
单击镜像任务上的
更多操作并选择打开。确保显示的是设计视图。
-
要选择可用数据集的子集,请单击选择源数据并移除不需要的数据集。
-
单击准备以创建外部对象并镜像数据。
执行转换
如果需要转换数据,可以创建一个 Redshift 或 Snowflake 项目,并使用 Qlik Open Lakehouse 项目中的镜像数据任务作为源。镜像任务源必须与项目使用相同的云数据仓库平台。例如,当您创建 Redshift 项目以执行转换时,您必须使用 Redshift 镜像数据任务作为源。
删除镜像数据任务
删除镜像任务时,镜像任务创建的内部模式和视图将被删除。Redshift 中的外部模式和表不会被删除。如果表从 AWS Glue 中删除(例如,当用户删除存储中的数据集或删除整个存储任务时),此更改将自动反映在 Redshift 外部模式中。该表已删除,无需单独删除。最佳实践是,如果外部模式不再使用,请将其完全删除。
要删除镜像数据任务,可执行以下操作:
-
在要删除的镜像数据任务上,单击任务上的
更多操作菜单并选择删除。 -
在确认对话框中,单击删除。