前提条件
- 通过共享TPC-DS 标准样例数据库创建DLF Catalog:详情请参见共享样例数据集。
创建 StarRocks 实例并绑定 DLF Catalog
DLF的访问控制是RAM级别的。默认情况下,所有StarRocks用户均不具备DLF的任何权限,因此您必须创建一个和RAM用户同名的内部用户,并为其授予相应的权限。
- 创建RAM用户。
- 使用阿里云账号或RAM管理员登录RAM控制台。
- 创建一个新的RAM用户或选择一个已有RAM用户。创建RAM用户,请参见创建RAM用户并授权。
- 在 RAM 访问控制-身份管理-用户-添加权限中给该 RAM 角色授权
AliyunDLFFullAccess和AliyunOSSReadOnlyAccess。
- 在DLF中为该RAM用户授权以访问共享资源。
- 登录数据湖构建控制台。
- 切换到系统和安全-访问控制-角色,授予上一步所选用户访问权限:super_administrator 或 admin。
例如:RAM用户的用户名为emr,授予该用户权限。注:如找不到该用户,请前往系统和安全-访问控制-用户,点击同步后再操作。
- 创建Serverless StarRocks 3.3.8及以上版本的实例。Serverless StarRocks服务与DLF位于同一VPC下。如已创建低版本的实例,请参见 版本升级。如未创建,请参见创建实例,并绑定已创建的TPC-DS 标准样例数据目录和 RAM 角色。
创建StarRocks账号与授权(可选)
如您使用的是已有的 StarRocks 实例或在创建时没有绑定 DLF,需使用 StarRocks admin RAM 账号创建一个与先前创建的 RAM同名的用户。赋予该用户创建External Catalog以及查看所有Catalog的权限,并将该用户与RAM用户关联。
- 如您的 StarRocks 实例 admin 尚未绑定 RAM 用户,可在安全中心-用户管理中关联 RAM 用户。
- 使用 StarRocks admin 的RAM账号 登录EMR Serverless StarRocks控制台。
- 在实例列表页面,单击已创建实例操作列的连接实例,详情请参见通过EMR StarRocks Manager连接StarRocks实例。
- 指定用户名为admin或StarRocks超级管理员,连接StarRocks实例。实例连接常见问题:查看地域、用户名是否正确。
- 在EMR StarRocks Manager页面的左侧菜单栏,选择安全中心 > 用户管理,单击添加用户。
- 在弹出的对话框中,配置以下信息,单击确定。
- 用户来源:选择RAM用户。
- 用户名:选择 DLF 中授权的RAM用户。
- 密码:自定义。
- 角色:默认public。
- 添加用户成功后,为该用户授权。
- 在用户管理页面,单击目标用户操作列的授权。
- 在权限管理页签,单击添加权限。
- 在添加权限面板中,配置以下参数,单击确定。
- 资源:选择相应资源。
- 权限配置:勾选需要授权的权限。
- 通过 SQL 创建并绑定 DLF 中的 Catalog:
说明:这里仅用于建立与DLF Catalog的映射连接,创建或删除Catalog仅影响映射关系,不会对DLF中的实际数据产生影响。 - 使用配置好的 RAM用户登录StarRocks Manager,创建或查看Catalog,即可访问到DLF外表。
- 在SQL Editor的查询列表页面,单击 图标,创建SQL查询。
- 输入以下SQL,单击运行,创建External Catalog。
CREATE EXTERNAL CATALOG `dlf_samples` PROPERTIES ( 'type' = 'paimon', 'uri' = 'http://cn-hangzhou-vpc.dlf.aliyuncs.com', 'paimon.catalog.type' = 'rest', 'paimon.catalog.warehouse' = 'dlf_samples', 'token.provider' = 'dlf' );
参数说明如下。
参数 |
说明 |
示例 |
type |
必填,StarRocks的Catalog类型,DLF当前只支持 |
paimon |
uri |
||
paimon.catalog.type |
必填,Paimon的Catalog类型,DLF场景填写固定值 |
rest |
paimon.catalog.warehouse |
必填,Paimon的Catalog名称,可从DLF控制台上获取。 |
dlf_samples |
token.provider |
必填,Rest服务提供者,DLF固定填 |
dlf |
说明:此处StarRocks Manager中授权数据库与授权权限的内容只包含StarRocks内表。要想修改DLF数据目录的访问权限,只能在数据湖构建控制台修改对应同名RAM用户的权限。
- (可选)验证用户是否关联成功。
因上一步操作有10~20秒的延迟,您可使用该用户登录StarRocks Manager,在SQL Editor的查询列表页面,单击 图标,创建SQL查询。通过SQL Editor执行以下命令,查看当前用户关联的Ram User ID,不为空时说明关联成功。
show property;
测试TPC-DS 标准样例数据库
完成上述步骤后,使用 与DLF关联的RAM账号 登录EMR Serverless StarRocks控制台。
- 在实例列表页面,单击已创建实例操作列的连接实例,详情请参见通过EMR StarRocks Manager连接StarRocks实例。
- 指定用户名为admin或StarRocks超级管理员,连接StarRocks实例。实例连接常见问题:查看地域、用户名是否正确。
- 在 StarRocks Manager-元数据管理中可查看绑定的 catalog。
通过共享样例数据集,可快速验证数据处理性能、优化查询效率或进行功能验证。
数据库名 |
Scale Factor (SF) |
数据量级 |
适用场景 |
|
1 |
~1 GB |
快速验证、开发测试 |
|
2 |
~2 GB |
中等测试、学习 |
|
10 |
~10 GB |
性能测试、压测 |
|
100 |
~100 GB |
生产级 benchmark、性能对比 |
使用 TPC-DS Query 3 作为性能测试示例、tpcds_paimon_sf100(约 100 GB)的 Paimon 表做性能压测。TPC-DS 是业界标准的决策支持基准,其查询设计复杂、贴近真实分析场景。
Query 3 是 TPC-DS 中经典的 多表关联 + 聚合 + 过滤 + 排序 查询,能有效测试:
- 大表 Join 性能(
customer,customer_address,store_sales) - 分区裁剪(
store_sales按日期分区) - 聚合与排序效率
- I/O 与内存压力
找出过去两年中,在特定州(如 'IL', 'IN', 'KS')购买过商品的客户,按年份和城市统计购买人数,并限制结果前 100 行。
- 在 StarRocks Manager 中的 SQL Editor的查询列表页面,单击 图标,创建SQL查询。
- 输入以下SQL,单击运行,查询结果。
-- TPC-DS Query 3: 客户地域分布分析(性能压测) SELECT dt.d_year, ca.ca_state, ca.ca_city, COUNT(*) AS customer_cnt FROM dlf_samples.tpcds_paimon_sf100.customer c JOIN dlf_samples.tpcds_paimon_sf100.customer_address ca ON c.c_current_addr_sk = ca.ca_address_sk JOIN dlf_samples.tpcds_paimon_sf100.store_sales ss ON c.c_customer_sk = ss.ss_customer_sk JOIN dlf_samples.tpcds_paimon_sf100.date_dim dt ON ss.ss_sold_date_sk = dt.d_date_sk WHERE ca.ca_state IN ('IL', 'IN', 'KS') -- 选择高数据量的州 AND dt.d_year BETWEEN 2000 AND 2002 -- 覆盖多个分区 GROUP BY dt.d_year, ca.ca_state, ca.ca_city ORDER BY dt.d_year, ca.ca_state, ca.ca_city LIMIT 100;
实验结果表明,EMR Serverless StarRocks 查询100 GB 大表 Join 仅需要 6.2 秒!
将数据写入 StarRocks 内表
- 创建 StarRocks 内表:
CREATE DATABASE IF NOT EXISTS sr_demo_db; CREATE TABLE IF NOT EXISTS sr_demo_db.customer_geo_summary ( ca_state STRING, ca_city STRING, d_year INT, customer_cnt BIGINT, update_time DATETIME ) PRIMARY KEY (ca_state, ca_city, d_year) PARTITION BY (d_year) DISTRIBUTED BY HASH(ca_city) BUCKETS 8;
- 执行 INSERT,将数据从 Paimon 外表写入 StarRocks 内表
INSERT INTO sr_demo_db.customer_geo_summary SELECT ca.ca_state, ca.ca_city, COUNT(*) AS customer_cnt, NOW() AS update_time, dt.d_year FROM dlf_samples.tpcds_paimon_sf100.customer c JOIN dlf_samples.tpcds_paimon_sf100.customer_address ca ON c.c_current_addr_sk = ca.ca_address_sk JOIN dlf_samples.tpcds_paimon_sf100.store_sales ss ON c.c_customer_sk = ss.ss_customer_sk JOIN dlf_samples.tpcds_paimon_sf100.date_dim dt ON ss.ss_sold_date_sk = dt.d_date_sk WHERE ca.ca_state IN ('IL', 'IN', 'KS') AND dt.d_year BETWEEN 2000 AND 2002 AND ca.ca_state IS NOT NULL AND ca.ca_city IS NOT NULL AND dt.d_year IS NOT NULL GROUP BY ca.ca_state, ca.ca_city, dt.d_year;
- (可选)验证数据
SELECT * FROM sr_demo_db.customer_geo_summary LIMIT 10; SELECT COUNT(*) FROM sr_demo_db.customer_geo_summary;
使用EMR StarRocks物化视图,自动化构建数仓DWD-ADS
- 创建DWD层EMR-StarRocks物化视图,每隔1小时刷新一次。
--- 使用StarRocks物化视图,自动化构建数据仓库DWD层 --- 说明:此处为了简化逻辑,仅直接将ODS层数据(即customer_geo_summary)转换为DWD层。 -- 删除已存在的物化视图(如果存在) DROP MATERIALIZED VIEW IF EXISTS sr_demo_db.dwd_mv_customer_geo_summary; -- 创建新的物化视图 CREATE MATERIALIZED VIEW IF NOT EXISTS sr_demo_db.dwd_mv_customer_geo_summary DISTRIBUTED BY HASH(ca_city) BUCKETS 8 REFRESH ASYNC EVERY(INTERVAL 1 HOUR) AS SELECT ca_state, ca_city, customer_cnt, update_time, d_year FROM sr_demo_db.customer_geo_summary;
- 校验上面步骤的数据加工结果
-- 校验上面步骤的数据加工结果 SELECT * FROM ( SELECT COUNT(1) AS cnt, 'dwd_mv_customer_geo_summary' AS tb FROM sr_demo_db.dwd_mv_customer_geo_summary ) t;
- 使用EMR-StarRocks物化视图,自动化构建ADS。(以下 3 条 SQL 分开执行)
--- 使用StarRocks物化视图,自动化构建数据仓库ADS层 -- 1. 创建 ADS_MV_CUSTOMER_RETENTION (客户年度汇总) DROP MATERIALIZED VIEW IF EXISTS sr_demo_db.ADS_MV_CUSTOMER_RETENTION; CREATE MATERIALIZED VIEW IF NOT EXISTS sr_demo_db.ADS_MV_CUSTOMER_RETENTION DISTRIBUTED BY HASH(d_year) BUCKETS 4 REFRESH ASYNC EVERY(INTERVAL 1 HOUR) AS SELECT d_year, SUM(customer_cnt) AS total_customers FROM sr_demo_db.dwd_mv_customer_geo_summary GROUP BY d_year; -- 2. ADS_MV_CUSTOMER_GEOGRAPHIC_DISTRIBUTION (客户地理分布 - 按州) DROP MATERIALIZED VIEW IF EXISTS sr_demo_db.ADS_MV_CUSTOMER_GEOGRAPHIC_DISTRIBUTION; CREATE MATERIALIZED VIEW IF NOT EXISTS sr_demo_db.ADS_MV_CUSTOMER_GEOGRAPHIC_DISTRIBUTION DISTRIBUTED BY HASH(ca_state) BUCKETS 8 REFRESH ASYNC EVERY(INTERVAL 1 HOUR) AS SELECT ca_state, SUM(customer_cnt) AS total_customers FROM sr_demo_db.dwd_mv_customer_geo_summary GROUP BY ca_state; -- 3. ADS_MV_CUSTOMER_CITY_DISTRIBUTION (城市分布详情) DROP MATERIALIZED VIEW IF EXISTS sr_demo_db.ADS_MV_CUSTOMER_CITY_DISTRIBUTION; CREATE MATERIALIZED VIEW IF NOT EXISTS sr_demo_db.ADS_MV_CUSTOMER_CITY_DISTRIBUTION DISTRIBUTED BY HASH(ca_city) BUCKETS 8 REFRESH ASYNC EVERY(INTERVAL 1 HOUR) AS SELECT ca_city, SUM(customer_cnt) AS total_customers FROM sr_demo_db.dwd_mv_customer_geo_summary GROUP BY ca_city;
- 校验 ADS 层物化视图的数据加工结果
-- 校验上面步骤的数据加工结果 SELECT * FROM ( SELECT COUNT(1) AS row_count, 'ADS_MV_CUSTOMER_RETENTION' AS tb FROM sr_demo_db.ADS_MV_CUSTOMER_RETENTION UNION ALL SELECT COUNT(1) AS row_count, 'ADS_MV_CUSTOMER_GEOGRAPHIC_DISTRIBUTION' AS tb FROM sr_demo_db.ADS_MV_CUSTOMER_GEOGRAPHIC_DISTRIBUTION UNION ALL SELECT COUNT(1) AS row_count, 'ADS_MV_CUSTOMER_CITY_DISTRIBUTION' AS tb FROM sr_demo_db.ADS_MV_CUSTOMER_CITY_DISTRIBUTION ) t;
(可选)通过Quick BI进行报表分析和展示
通过Quick BI可以直接查询StarRocks中的数据,进行报表页面展示。
- 打开Quick BI控制台:https://bi.aliyun.com/workspace/dashboard。
- 配置好StarRocks数据源。参考:通过Quick BI连接StarRocks实例。
- 创建数据集(Dataset)。点击 【数据集】> 【新建数据集】> 选择刚创建的数据源。
- 数据集 1:客户地理分布(按州)
ADS_客户州分布
SELECT ca_state AS 州, total_customers AS 客户数 FROM sr_demo_db.ADS_MV_CUSTOMER_GEOGRAPHIC_DISTRIBUTION WHERE ca_state IS NOT NULL ORDER BY total_customers DESC;
- 数据集 2: 客户城市分布详情
ADS_客户城市分布
SELECT ca_city AS 城市, total_customers AS 客户数 FROM sr_demo_db.ADS_MV_CUSTOMER_CITY_DISTRIBUTION WHERE ca_city IS NOT NULL ORDER BY total_customers DESC
- 设计报表
- 点击 【仪表板】> 【新建仪表板】。
- 选择 空白模板。
- 数据集拖入画布,分别配置图表。
相关文档: