跳到主要内容 跳到补充内容

将数据镜像到云数据仓库

镜像任务使您能够从您的云数据仓库查询存储在您的 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 内可用数据最新快照的元数据。刷新元数据有两种方法:

  1. Qlik-托管:此选项需要激活 Snowflake 仓库,并包括监控和数据预览。若要创建下游转换并监控和安排任务,请选择此选项。Qlik 拥有元数据刷新操作,因此可以手动配置,例如每 30 分钟运行一次。该选项尤其适合多表转换,因为所有表的元数据都会同时更新。虽然您可能会失去一些由 Snowflake 管理的刷新所提供的实时收益,但是您可以保持表之间的一致性。对于多表转换,可根据需要随时触发刷新。Qlik 建议您对排定镜像任务后的下游转换任务设定基于事件的触发。

  2. Snowflake 管理:利用 Snowpipe 基础设施而不需要或激活计算仓库的无服务器操作。如果不需要下游转换,建议使用该选项。刷新间隔在创建 Snowflake 目录集成之时配置。要监控自动刷新的状态,请在 Snowflake 中查询 SYSTEM$AUTO_REFRESH_STATUSQlik 失去流程的所有权,无法监控此等任务。

信息注释Snowflake 项目中的每个镜像任务都可配置自己的刷新机制:如果创建两个镜像任务,一个可以使用 Qlik 管理的刷新,另一个可以使用 Snowflake 管理的刷新。
信息注释如果您尝试查询镜像输出或在转换中使用它,并看到内部服务器错误(请参阅下面的示例),则您的 Iceberg 元数据与外部目录不同步。要解决此问题,请运行镜像任务以刷新 Iceberg 元数据。

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 配置目录集成

创建镜像数据任务

要将数据镜像至您的数据仓库,请执行以下操作:

  1. 打开包含要进行镜像的数据的存储任务的投影项目。

  2. 单击存储任务上的 更多操作。 选择镜像数据并进行配置:

    • 名称:输入镜像任务名称。

    • 描述:可选择描述任务的目的。

    • 数据仓库:选择您的目标数据仓库。

    • 连接

      • 要使用现有的连接,请单击选择打开安全源连接对话框。选择连接所在的空间,然后再选择连接。单击编辑修改连接属性。

      • 要创建新连接,请单击创建连接打开创建连接对话框,并按照说明操作。

    • 数据库:输入要进行镜像的数据的数据库名称。

    • 镜像到 Redshift:

      • 外部模式:输入将在其中创建视图的模式的名称。

        信息注释在 Redshift 中,所有表名和视图名都将转换为小写。
    • 镜像到 Snowflake:

      • Snowflake 外部卷:输入在 Snowflake 中所创建的外部卷的名称。

      • Snowflake 目录集成:输入在 Snowflake 中所创建的目录集成名称。

      • 选择要在 Snowflake 中使用的数据刷新方式:

        • Qlik 管理:如果要创建下游转换,可选择此选项。这需要激活 Snowflake 仓库,并由 Qlik 监控。

        • Snowflake-管理:当您不想执行下游转换时,请选择此选项。Snowflake 仓库不是必需的,因此不受 Qlik 的监控。这在 Snowflake 中进行管理和监控。

  3. 单击确定以创建镜像任务并将其添加到管道中的存储任务。

  4. 单击镜像任务上的 更多操作并选择打开。确保显示的是设计视图。

  5. 要选择可用数据集的子集,请单击选择源数据并移除不需要的数据集。

  6. 单击准备以创建外部对象并镜像数据。

执行转换

如果需要转换数据,可以创建一个 Redshift 或 Snowflake 项目,并使用 Qlik Open Lakehouse 项目中的镜像数据任务作为源。镜像任务源必须与项目使用相同的云数据仓库平台。例如,当您创建 Redshift 项目以执行转换时,您必须使用 Redshift 镜像数据任务作为源。

信息注释要使用现有项目中的数据来创建转换任务,请参阅构建跨项目管道

删除镜像数据任务

删除镜像任务时,镜像任务创建的内部模式和视图将被删除。Redshift 中的外部模式和表不会被删除。如果表从 AWS Glue 中删除(例如,当用户删除存储中的数据集或删除整个存储任务时),此更改将自动反映在 Redshift 外部模式中。该表已删除,无需单独删除。最佳实践是,如果外部模式不再使用,请将其完全删除。

信息注释当镜像任务正在读取存储任务时,无法删除存储任务。

要删除镜像数据任务,可执行以下操作:

  1. 在要删除的镜像数据任务上,单击任务上的 更多操作菜单并选择删除

  2. 在确认对话框中,单击删除

本页面有帮助吗?

如果您发现此页面或其内容有任何问题 – 打字错误、遗漏步骤或技术错误 – 请告诉我们!