跳到主要内容
版本:5.x-preview

集成 Microsoft OneLake

OneLake 是 Microsoft Fabric 提供的统一且开放的 SaaS 数据湖,为企业提供一个逻辑上的集中数据存储位置。数据以 Parquet 格式存储,并可同时承载 Delta Lake 与 Iceberg 的元数据。这种设计使 OneLake 能在不进行数据复制或迁移的前提下,被多种分析引擎直接访问,从而简化数据管理与治理。

通过 Apache Doris 的 Iceberg Rest Catalog,可以直接访问 OneLake 中的数据,无需复制或迁移数据即可在 Doris 中执行查询与分析。借助这一能力,可以在单一数据湖中构建端到端的分析流程,实现高效的数据分析、共享和复用,发挥 OneLake 的统一存储优势与 Doris 的计算能力。

在技术层面,Doris 通过 OneLake 提供的开放表标准与底层 Parquet 数据文件,使用标准化接口读取元数据与数据文件,从而兼容多种分析场景。集成后的架构保持了数据湖的统一管理能力,使得治理、访问控制与安全策略能够集中应用,提升整个平台的可靠性与可维护性。

本文将介绍如何使用 Doris 访问 OneLake,并给出完整的环境准备与示例查询流程。

需要 Doris 3.1.4 版本。

Onelake 环境准备​

下面先完成 OneLake(Fabric)侧的数据准备与认证配置,然后演示在 Doris 中创建 Iceberg Rest Catalog 并进行查询。

导入数据​

  1. 打开 Fabric 控制台,新建一个 WorkSpace(建议不要使用默认 WorkSpace,因为部分设置项可能受限)。

    onelake1

  2. 进入创建好的 WorkSpace,选择 New Item -> Lakehouse,创建一个 Lakehouse。

    onelake2

  3. 进入 WorkSpace Setting,打开页面中的相关开关(以便启用 Lakehouse 的一些功能)。

    onelake3

将本地文件上传到 OneLake​

为便于演示,此处采用本地 CSV 文件直接上传,以下是示例文件:

  1. 进入 WorkSpace 的 Files 页面,点击 Upload -> Upload Files,选择要上传的 CSV 文件。

    onelake4

  2. 选择上传后的文件,点击 Load Tables -> New table(如果目标表已存在,也可以选择导入到现有表)。

  3. 等待数据导入完成,进入 Tables 查看表及数据信息。

    onelake5

认证信息配置​

要让 Doris 通过 Iceberg Rest Catalog 访问 OneLake,需在 Azure 中为 Fabric 的访问配置应用注册与权限:

  1. 打开 Azure 门户,进入 App registrations,点击 New registration,新建应用并记录以下信息以便后续配置:应用 ID、租户 ID 等。

    onelake6

    onelake7

  2. 在新建应用的 API Permissions 中,添加对 Azure Storage 的相应权限(根据最小权限原则选择所需权限)。

    onelake8

  3. 在 Certificates & secrets 中创建客户端密钥(Secret),并将生成的值妥善保存——此值离开页面后将无法再次查看。

    onelake9

  4. 回到 Fabric 的 WorkSpace 界面,进入 Manage Access,使用应用的 DisplayName 添加该应用为 WorkSpace 的访问主体。

    onelake10

至此,OneLake 侧的数据准备和认证配置完成。

在 Doris 中接入 OneLake​

接下来示例如何在 Doris 中创建 Iceberg Rest Catalog 并访问 OneLake 中的表。

创建 Catalog​

Doris> CREATE CATALOG onelake_doris PROPERTIES (
'type' = 'iceberg',
'iceberg.catalog.type' = 'rest',
'uri'='https://onelake.table.fabric.microsoft.com/iceberg',
'warehouse'='<workerspace_id>/<data_item_id>',
'iceberg.rest.security.type'='oauth2',
'iceberg.rest.oauth2.server-uri'='https://login.microsoftonline.com/<talent_id>/oauth2/v2.0/token',
'iceberg.rest.oauth2.credential'='<oauth2.client_id>:'<oauth2.client_secret>,
'iceberg.rest.oauth2.scope'='https://storage.azure.com/.default',
'fs.azure.support'='true',
'azure.endpoint'='https://onelake.dfs.fabric.microsoft.com',
'azure.auth_type'='OAuth2',
'azure.oauth2_account_host'='onelake.dfs.fabric.microsoft.com',
'azure.oauth2_server_uri'='https://login.microsoftonline.com/<talent_id>/oauth2/v2.0/token',
'azure.oauth2_client_id'='<oauth2.client_id>',
'azure.oauth2_client_secret'='<oauth2.client_secret>'
);
  • 创建 Iceberg Rest Catalog 时需要填写的参数中,WORKSPACE_ID 与 DATA_ITEM_ID 可在 Lakehouse 页面对应链接中获取,格式类似:

    https://app.fabric.microsoft.com/groups/<WORKSPACE_ID>/lakehouses/<DATA_ITEM_ID>

  • 其余参数可对应之前在 Azure App registration 中获得的信息(如 client id、client secret、tenant 等)。

  • 对于 OneLake,iceberg.rest.oauth2.scope、uri、azure.oauth2_account_host、azure.endpoint 等通常为固定值,请参考官方文档或示例配置填写。

配置完成后即可在 Doris 中使用 SQL 对 OneLake 中的 Iceberg 表进行查询。

基础查询分析​

下面给出若干常见的业务分析示例,帮助理解如何结合 OneLake 与 Doris 进行数据分析:

Doris> switch onelake_doris;
Query OK, 0 rows affected

Doris> use dbo;
Database changed

Doris> show tables;
+----------------+
| Tables_in_dbo |
+----------------+
| customer_order |
+----------------+
1 row in set
  • 查询最近三天的新订单

    便于运营或销售快速掌握近期销售情况,例如发现新下单、待处理或已完成支付的订单,便于安排发货或优先处理待处理订单。

    Doris> SELECT order_id, customer_name, product_name, total_price, status
    -> FROM customer_order
    -> WHERE order_date >= DATE_SUB(NOW(), INTERVAL 3 DAY)
    -> ORDER BY order_date DESC;

    +----------------+---------------+---------------------+-------------+-----------+
    | order_id | customer_name | product_name | total_price | status |
    +----------------+---------------+---------------------+-------------+-----------+
    | ORD20251112002 | Bob Li | Smart Watch | 1128 | Completed |
    | ORD20251112001 | Alice Zhang | Wireless Headphones | 499 | Completed |
    | ORD20251112003 | Chen Wei | Bluetooth Speaker | 299 | Pending |
    +----------------+---------------+---------------------+-------------+-----------+
    3 rows in set
  • 按城市统计销售表现

    统计各城市的总销售额和订单数,帮助销售/市场判断区域表现并调整营销或库存策略。

    Doris> SELECT city,
    -> SUM(total_price) AS total_sales,
    -> COUNT(*) AS order_count
    -> FROM customer_order
    -> WHERE status = 'Completed'
    -> GROUP BY city
    -> ORDER BY total_sales DESC;

    +----------+-------------+-------------+
    | city | total_sales | order_count |
    +----------+-------------+-------------+
    | Beijing | 1128 | 1 |
    | Shanghai | 499 | 1 |
    | Shenzhen | 387 | 1 |
    +----------+-------------+-------------+
    3 rows in set
  • 分析不同支付方式的退款率

    帮助财务与风控发现潜在问题(例如某支付渠道退款率异常),进而优化支付流程或对特定渠道加强监控。

    Doris> SELECT payment_method,
    -> SUM(CASE WHEN status = 'Refunded' THEN 1 ELSE 0 END) * 100.0 / COUNT(*) AS refund_rate_percent
    -> FROM customer_order
    -> GROUP BY payment_method
    -> ORDER BY refund_rate_percent DESC;

    +----------------+---------------------+
    | payment_method | refund_rate_percent |
    +----------------+---------------------+
    | Credit Card | 50.00000 |
    | WeChat Pay | 0.00000 |
    | Alipay | 0.00000 |
    | UnionPay | 0.00000 |
    +----------------+---------------------+
    4 rows in set
  • 跨系统用户行为对比

    若系统同时保留了旧系统(例如 Hive)与 OneLake 上的新系统数据,可以查询两个系统中都有行为记录的用户,并分析他们在新系统的消费行为,从而评估迁移与业务影响。

    -- "hive_catalog" is a Hive Catalog created in Doris 
    Doris> SELECT
    -> a.customer_id,
    -> COUNT(DISTINCT b.order_id) AS new_order_count,
    -> SUM(b.total_price) AS new_total_amount
    -> FROM hive_catalog.order_db.hive_customer_order a
    -> JOIN onelake_doris.dbo.customer_order b
    -> ON a.customer_id = b.customer_id
    -> GROUP BY a.customer_id
    -> ORDER BY new_total_amount DESC
    -> LIMIT 100;

    +-------------+-----------------+------------------+
    | customer_id | new_order_count | new_total_amount |
    +-------------+-----------------+------------------+
    | CUST1002 | 1 | 1128 |
    | CUST1001 | 1 | 499 |
    | CUST1004 | 1 | 387 |
    | CUST1003 | 1 | 299 |
    | CUST1005 | 1 | 189 |
    +-------------+-----------------+------------------+
    5 rows in set

快照和时间旅行​

Doris> select * from customer_order$snapshots;
+----------------------------+---------------------+-----------+-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| committed_at | snapshot_id | parent_id | operation | manifest_list | summary |
+----------------------------+---------------------+-----------+-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 2025-11-12 17:21:06.692000 | 7623467350518045470 | NULL | overwrite | abfss://181a804a-ea52-4579-81a4-4de243e14c8e@onelake.dfs.fabric.microsoft.com/ad29a0e3-772f-458c-9dfa-4ff609443c13/Tables/customer_order/metadata/snap-7623467350518045470-1-0e16b9d6-bc0d-4689-9952-085abd1b5f4e.avro | {"XTABLE_METADATA":"{"lastInstantSynced":"2025-11-12T09:02:06Z","instantsToConsiderForNextSync":[],"version":0,"sourceTableFormat":"DELTA","sourceIdentifier":"1"}", "added-data-files":"1", "added-records":"5", "added-files-size":"9434", "changed-partition-count":"1", "total-records":"5", "total-files-size":"9434", "total-data-files":"1", "total-delete-files":"0", "total-position-deletes":"0", "total-equality-deletes":"0"} |
+----------------------------+---------------------+-----------+-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set

Doris> SELECT * FROM customer_order FOR VERSION AS OF 7623467350518045470;
+----------------+-------------+---------------+-------------------------+-------------+---------+-----------+----------------------------+------------+---------------------+-----------------+----------+------------+-------------+----------------+-----------+
| order_id | customer_id | customer_name | email | phone | country | city | order_date | product_id | product_name | category | quantity | unit_price | total_price | payment_method | status |
+----------------+-------------+---------------+-------------------------+-------------+---------+-----------+----------------------------+------------+---------------------+-----------------+----------+------------+-------------+----------------+-----------+
| ORD20251112001 | CUST1001 | Alice Zhang | alice.zhang@example.com | 13812345678 | China | Shanghai | 2025-11-10 22:23:00.000000 | PROD-A100 | Wireless Headphones | Electronics | 1 | 499 | 499 | Credit Card | Completed |
| ORD20251112002 | CUST1002 | Bob Li | bob.li@example.com | 13987654321 | China | Beijing | 2025-11-11 17:12:00.000000 | PROD-B200 | Smart Watch | Wearables | 2 | 799 | 1128 | WeChat Pay | Completed |
| ORD20251112003 | CUST1003 | Chen Wei | chen.wei@example.com | 13755553333 | China | Guangzhou | 2025-11-10 03:40:00.000000 | PROD-C300 | Bluetooth Speaker | Audio | 1 | 19 | 299 | Alipay | Pending |
| ORD20251112004 | CUST1004 | David Wang | david.wang@example.com | 13666668888 | China | Shenzhen | 2025-11-08 19:15:00.000000 | PROD-D400 | Laptop Stand | Office Supplies | 3 | 129 | 387 | UnionPay | Completed |
| ORD20251112005 | CUST1005 | Emily Sun | emily.sun@example.com | 13577779999 | China | Chengdu | 2025-11-08 00:45:00.000000 | PROD-E500 | USB-C Hub | Accessories | 1 | 189 | 189 | Credit Card | Refunded |
+----------------+-------------+---------------+-------------------------+-------------+---------+-----------+----------------------------+------------+---------------------+-----------------+----------+------------+-------------+----------------+-----------+
5 rows in set

总结​

通过本文的介绍,我们展示了如何将 Apache Doris 与 Microsoft OneLake 无缝集成,实现统一数据湖架构下的高效分析。这种集成方案具有以下核心优势:

  • 零数据迁移:直接访问 OneLake 中的数据,无需复制或移动数据

  • 统一管理:保持数据湖的集中治理和安全策略

  • 标准兼容:基于 Iceberg 开放表格式,确保跨平台互操作性

  • 灵活分析:结合 Doris 强大的 OLAP 能力和 OneLake 的存储优势

无论是实时业务监控、跨系统数据对比,还是复杂的多维分析,这种架构都能为企业提供强大且灵活的数据分析能力。随着数据湖技术的不断发展,Doris 与 OneLake 的集成将为企业数字化转型提供更加坚实的数据基础设施支撑。

下一步,您可以根据实际业务需求,参考本文的配置步骤搭建自己的分析环境,并探索更多高级分析场景。