基于阿里云数据湖构建(Data Lake Formation,DLF)和对象存储(Object Storage Service,OSS)推出的Hologres数据湖加速服务,提供了灵活的数据访问和分析能力以及高效的数据处理能力,显著加快了对OSS数据湖的查询和分析过程。
背景信息
企业数字化转型不断深入,数据量急剧增长,传统数据分析在成本、规模、数据多样性等方面面临很大挑战。Hologres联合DLF、OSS推出湖仓一体架构的数据湖加速服务,助力企业实现海量数据的低成本存储、统一的元数据管理和高效的数据分析和洞察。
Hologres通过与DLF、OSS无缝集成,以外部表的方式,无需移动数据(外表只做字段映射,不真正存储数据),就能直接加速读写存储于OSS上的Hudi、Delta、Paimon、ORC、Parquet、CSV、SequenceFile等格式类型的数据,降低开发运维成本,打破数据孤岛,实现业务洞察。Hologres支持独享实例(资源独占)和共享集群 Serverless (按使用付费)两种模式,详见购买Hologres。
实时数据湖涉及的阿里云服务介绍如下:
服务 | 介绍 | 相关链接 |
阿里云数据湖构建(Data Lake Formation,DLF) | 是一款全托管的快速帮助用户构建云上数据湖及Lakehouse的服务,产品提供了云上数据湖统一的元数据管理、统一的权限与安全管理、便捷的数据入湖能力以及一键式数据探索能力。 | |
阿里云对象存储(Object Storage Service,OSS) | DLF将OSS作为云上数据湖的统一存储,OSS是一款海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件,可提供12个9的数据持久性,已成为湖数据存储的事实标准。 | |
OSS-HDFS服务(又名JindoFS)是云原生数据湖存储,相比原生OSS存储,OSS-HDFS与Hadoop生态计算引擎无缝集成,在典型的基于Hive和Spark的离线ETL场景拥有更好的表现,在完全兼容HDFS文件系统接口的同时,提供充分的POSIX能力支持,可以更好地满足大数据和AI等领域的数据湖计算场景。 |
注意事项
Hologres共享集群不存储数据,仅支持外表查询OSS数据湖。
准备工作
本文以上海地域为例开通OSS、DLF和Hologres服务。
开通OSS服务并准备测试数据。
打开OSS开通页面,按照界面指引完成开通操作。
上传tpch_10g_orc_3.zip测试数据至Bucket目录。
说明测试数据文件上传后,若存在
.DS_Store
等文件需手动删除。考虑到下载速度,这里仅包含本文需要的nation_orc、supplier_orc、partsupp_orc数据表。
开通DLF服务并导入OSS测试数据。
开通Hologres服务并购买Hologres实例。具体操作,请参见购买Hologres。
说明若您是新用户可以通过阿里云免费试用页面,申请免费试用Hologres。试用详情,请参见查询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账号授权详情,请参见授权服务账号。
执行以下语句,创建
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' group by ps_partkey having sum(ps_supplycost * ps_availqty) > ( select sum(ps_supplycost * ps_availqty) * 0.000001 from partsupp_orc, supplier_orc, nation_orc where ps_suppkey = s_suppkey and s_nationkey = n_nationkey and RTRIM(n_name) = 'EGYPT' ) order by value desc;
步骤三:(可选)通过Hologres内部表查询OSS数据湖
Hologres内部表查询是将OSS数据湖数据导入至Hologres中,数据将在Hologres中存储,可获得更好的查询性能和更高的数据处理能力。关于存储费用详情介绍,请参见计费概述。
在Hologres中创建与外部表相同表结构的内部表,示例如下。
-- 创建nation表 DROP TABLE IF EXISTS NATION; BEGIN; CREATE TABLE NATION ( N_NATIONKEY int NOT NULL PRIMARY KEY, N_NAME text NOT NULL, N_REGIONKEY int NOT NULL, N_COMMENT text NOT NULL ); 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表 DROP TABLE IF EXISTS SUPPLIER; BEGIN; CREATE TABLE SUPPLIER ( S_SUPPKEY int NOT NULL PRIMARY KEY, S_NAME text NOT NULL, S_ADDRESS text NOT NULL, S_NATIONKEY int NOT NULL, S_PHONE text NOT NULL, S_ACCTBAL DECIMAL(15, 2) NOT NULL, S_COMMENT text NOT NULL ); 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表 DROP TABLE IF EXISTS PARTSUPP; BEGIN; CREATE TABLE PARTSUPP ( PS_PARTKEY int NOT NULL, PS_SUPPKEY int NOT NULL, PS_AVAILQTY int NOT NULL, PS_SUPPLYCOST DECIMAL(15, 2) NOT NULL, PS_COMMENT text NOT NULL, 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外表数据导入内表 INSERT INTO nation SELECT * FROM nation_orc; INSERT INTO supplier SELECT * FROM supplier_orc; INSERT INTO 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' group by ps_partkey having sum(ps_supplycost * ps_availqty) > ( select sum(ps_supplycost * ps_availqty) * 0.000001 from partsupp, supplier, nation where ps_suppkey = s_suppkey and s_nationkey = n_nationkey and RTRIM(n_name) = 'EGYPT' ) order by value desc;
常见问题
创建Hologres外表时,出现ERROR: babysitter not ready,req:name:"HiveAccess"
。
问题原因:未开启数据湖加速。
解决方法:访问Hologres实例列表,单击目标实例操作列中的数据湖加速并确认,开启数据湖加速功能。
相关文档
以上为示例教程,关于数据湖功能的完整介绍,请参见OSS数据湖加速。