5分钟快速使用Hologres实时湖仓能力,无需移动数据,直接加速读取存储于数据湖OSS上的Hudi、Delta、Paimon等格式类型的数据
活动地址:https://developer.aliyun.com/topic/hologres/dlf
准备工作
本文以上海地域为例开通OSS、DLF和Hologres服务。
- 开通OSS服务并准备测试数据。
- 打开OSS开通页面,按照界面指引完成开通操作。说明
- 若您是新用户,可以免费试用OSS。
- 上传tpch_10g_orc_3.zip测试数据至Bucket目录。
- 测试数据文件上传后,若存在
.DS_Store
等文件需手动删除。 - 考虑到下载速度,这里仅包含本文需要的nation_orc、supplier_orc、partsupp_orc数据表。
- 开通DLF服务并导入OSS测试数据。
- 访问开通DLF页面,您也可以单击免费开通,免费试用DLF产品。
- 登录数据湖管理控制台,在元数据管理页面,单击新建数据库。具体操作,请参见创建元数据库。
本文以创建mydatabase
数据库为例。 - 在元数据抽取页面,创建元数据抽取任务,将OSS测试数据导入。具体操作,请参见元数据抽取。
抽取完成后,您可以在元数据管理页面的数据表页签查看。
参数配置 |
字段描述 |
抽取任务名称 |
元数据抽取任务的名称,输入为中英文数字和(_)。 |
OSS路径 |
指定待抽取数据的OSS目录。 |
解析格式 |
支持json、csv、parquet、orc、hudi、delta、avro中某一类格式进行抽取,或采用自动识别模式会对数据文件自动解析。 |
目标数据库 |
抽取获取的元数据存储的元数据库位置。 |
- 开通Hologres服务并购买Hologres实例。具体操作,请参见购买Hologres。
若您是新用户可以申请免费试用Hologres,为保证使用体验,免费试用请选择32C配置,若您没有免费试用规格,可以购买Hologres按量付费
步骤一:配置环境
- 在Hologres实例中开启数据湖加速功能。
访问Hologres实例列表,单击目标实例操作列中的数据湖加速并确认,开启数据湖加速功能后,Hologres实例将重启。 - 登录Hologres实例,创建数据库。具体操作,请参见连接HoloWeb。
- (可选)创建Extension。本文以
dlf_fdw
为例。
说明
Hologres V2.1版本已默认创建,您无需进行此操作。您可以访问Hologres实例列表,在实例详情页面确认您的实例版本。
CREATE EXTENSION IF NOT EXISTS dlf_fdw;
说明
使用Superuser在SQL编辑器-HoloWeb中执行上述语句创建Extension,该操作针对整个DB生效,一个DB只需执行一次。关于Hologres账号授权详情,请参见授权服务账号。
- 在SQL编辑器-HoloWeb,执行以下语句,创建
dlf_server
外部服务器并配置Endpoint信息,确保Hologres、DLF和OSS之间的正常访问。关于更多的创建方式和相关参数介绍详情,请参见创建外部服务器。
--创建外部服务器,以上海reigon为例CREATE SERVER IF NOT EXISTS dlf_server FOREIGN data wrapper dlf_fdw options ( dlf_region 'cn-shanghai', dlf_endpoint 'dlf-share.cn-shanghai.aliyuncs.com', oss_endpoint 'oss-cn-shanghai-internal.aliyuncs.com');
步骤二:通过Hologres外部表查询OSS数据湖
Hologres外部表保存与OSS数据湖数据的映射关系,数据在OSS数据湖中存储,不占用Hologres存储空间,查询性能一般在秒级至分钟级。
- 创建Hologres外部表,并将OSS数据湖数据映射至Hologres外部表。
IMPORT FOREIGN SCHEMA mydatabase LIMIT TO ----本文以mydatabase为例,创建时需替换为您在DLF元数据管理中的自定义的数据库名称( nation_orc, supplier_orc, partsupp_orc )FROM SERVER dlf_server INTO public options (if_table_exist 'update');
- 数据查询。
创建外部表成功后,可以直接查询外部表读取OSS中的数据。示例语句如下。
--TPCH Q11查询语句select ps_partkey, sum(ps_supplycost * ps_availqty)as value from partsupp_orc, supplier_orc, nation_orc where ps_suppkey = s_suppkey and s_nationkey = n_nationkey and RTRIM(n_name)='EGYPT'groupby ps_partkey having sum(ps_supplycost * ps_availqty)>(select sum(ps_supplycost * ps_availqty)*0.000001from partsupp_orc, supplier_orc, nation_orc where ps_suppkey = s_suppkey and s_nationkey = n_nationkey and RTRIM(n_name)='EGYPT')orderby value desc;
步骤三:通过Hologres内部表查询OSS数据湖
Hologres内部表查询是将OSS数据湖数据导入至Hologres中,数据将在Hologres中存储,可获得更好的查询性能和更高的数据处理能力。关于存储费用详情介绍,请参见计费概述。
- 在Hologres中创建与外部表相同表结构的内部表,示例如下。
-- 创建nation表DROPTABLE IF EXISTS NATION;BEGIN;CREATETABLE NATION ( N_NATIONKEY intNOTNULL PRIMARY KEY, N_NAME textNOTNULL, N_REGIONKEY intNOTNULL, N_COMMENT textNOTNULL);CALL set_table_property ('NATION','distribution_key','N_NATIONKEY');CALL set_table_property ('NATION','bitmap_columns','');CALL set_table_property ('NATION','dictionary_encoding_columns','');COMMIT;-- 创建supplier表DROPTABLE IF EXISTS SUPPLIER;BEGIN;CREATETABLE SUPPLIER ( S_SUPPKEY intNOTNULL PRIMARY KEY, S_NAME textNOTNULL, S_ADDRESS textNOTNULL, S_NATIONKEY intNOTNULL, S_PHONE textNOTNULL, S_ACCTBAL DECIMAL(15,2)NOTNULL, S_COMMENT textNOTNULL);CALL set_table_property ('SUPPLIER','distribution_key','S_SUPPKEY');CALL set_table_property ('SUPPLIER','bitmap_columns','S_NATIONKEY');CALL set_table_property ('SUPPLIER','dictionary_encoding_columns','');COMMIT;-- 创建partsupp表DROPTABLE IF EXISTS PARTSUPP;BEGIN;CREATETABLE PARTSUPP ( PS_PARTKEY intNOTNULL, PS_SUPPKEY intNOTNULL, PS_AVAILQTY intNOTNULL, PS_SUPPLYCOST DECIMAL(15,2)NOTNULL, PS_COMMENT textNOTNULL, PRIMARY KEY (PS_PARTKEY, PS_SUPPKEY));CALL set_table_property ('PARTSUPP','distribution_key','PS_PARTKEY');CALL set_table_property ('PARTSUPP','bitmap_columns','ps_availqty');CALL set_table_property ('PARTSUPP','dictionary_encoding_columns','');COMMIT;
- 同步Hologres外部表数据至Hologres内部表。
---将Hologres外表数据导入内表INSERTINTO nation SELECT*FROM nation_orc;INSERTINTO supplier SELECT*FROM supplier_orc;INSERTINTO partsupp SELECT*FROM partsupp_orc;
- 查询Hologres内部表数据。
--TPCH Q11查询语句select ps_partkey, sum(ps_supplycost * ps_availqty)as value from partsupp, supplier, nation where ps_suppkey = s_suppkey and s_nationkey = n_nationkey and RTRIM(n_name)='EGYPT'groupby ps_partkey having sum(ps_supplycost * ps_availqty)>(select sum(ps_supplycost * ps_availqty)*0.000001from partsupp, supplier, nation where ps_suppkey = s_suppkey and s_nationkey = n_nationkey and RTRIM(n_name)='EGYPT')orderby value desc;
晒出结果:
一等奖、二等奖、参与奖:
将内表查询或外表查询的运行日志截图晒出。
外表查询速度:
内表查询速度:
分享作品参与点赞排行
- 请使用提交作品账号开通产品并参与挑战,后台会校验产品开通及SQL运行情况。
- 请上传原创数据表及截图,若为抄袭则取消资格;若发现有刷赞行为,立即撤销作品,取消参赛资格。
挑战奖:
基于已有的外表和内表,分别运行2条同样的自定义SQL,附上外表SQL语句、运行日志、运行结果、内表SQL语句、运行日志、运行结果,6个部分合并1张截图上传。
- SQL需要涉及多表查询,单表SQL不支持参与挑战
- 获奖名单按照作品提交时间排序
- 为保证SQL原创性,同样SQL只取第一位
- 挑战奖优先,不与一等奖、二等奖重复获取
挑战奖作品示例:
挑战奖:小米充电宝15个,非教程代码执行SQL,完成运行速度对比
一等奖:LAMY钢笔1个,作品点赞数位列第1名,且点赞数≥20个
二等奖:小米背包20个,作品点赞数位列第2-21名,且点赞数≥10个
参与奖:社区积分,每位参赛者可获得社区100积分
MaxCompute湖仓一体
数据仓库MaxCompute也可以基于本实验同一份OSS数据和DLF抽取的元数据进行 湖数据查询和湖数据入仓 等湖仓一体实践,模拟真实业务中高价值湖数据入仓进行处理加工、联合仓内数据建模等操作,具体请参考MaxCompute湖仓一体
MaxCompute 是企业级 SaaS 模式云数据仓库,以 Serverless 架构提供快速、全托管的在线数据仓库服务,消除了传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您可以经济并高效的分析处理海量数据。数以万计的企业正基于 MaxCompute 进行数据计算与分析,将数据高效转换为业务洞察。更多介绍请查看MaxCompute官网