写点什么

5 分钟使用 Hologres 实时湖仓加速分析挑战赛来袭

  • 2024-01-08
    陕西
  • 本文字数:3625 字

    阅读完需:约 12 分钟

活动简介

5 分钟快速使用 Hologres 实时湖仓能力,加速分析数据湖 OSS 上 Hudi、Delta、Paimon、ORC 等格式数据,赢取精美礼品


活动入口: https://developer.aliyun.com/topic/hologres/dlf 或点击文末【阅读全文】参与挑战

活动时间

2024 年 1 月 4 日 -2023 年 1 月 30 日

活动奖品

  • 挑战奖: 小米充电宝 15 个,非教程代码执行 SQL,完成运行速度对比

  • 一等奖: LAMY 钢笔 1 个,作品点赞数位列第 1 名,且点赞数≥20 个

  • 二等奖: 小米背包 20 个,作品点赞数位列第 2-21 名,且点赞数≥10 个

  • 参与奖: 社区积分,每位参赛者可获得社区 100 积分


准备工作

本文以上海地域为例开通 OSS、DLF 和 Hologres 服务。

  1. 开通 OSS 服务并准备测试数据。

a.打开OSS开通页面,按照界面指引完成开通操作。说明

b.登录OSS管理控制台,创建存储空间(Bucket)。具体操作,请参见控制台快速入门



a. 上传tpch_10g_orc_3.zip测试数据至 Bucket 目录。


  • 测试数据文件上传后,若存在 .DS_Store等文件需手动删除。

  • 考虑到下载速度,这里仅包含本文需要的 nation_orc、supplier_orc、partsupp_orc 数据表。





  1. 开通 DLF 服务并导入 OSS 测试数据。

a. 访问开通DLF页面,您也可以单击免费开通,免费试用 DLF 产品。

b. 登录数据湖管理控制台,在元数据管理页面,单击新建数据库。具体操作,请参见创建元数据库

  1. 本文以创建mydatabase数据库为例。

c. 在元数据抽取页面,创建元数据抽取任务,将 OSS 测试数据导入。具体操作,请参见元数据抽取

  1. 抽取完成后,您可以在元数据管理页面的数据表页签查看。



  1. 开通 Hologres 服务并购买 Hologres 实例。具体操作,请参见购买Hologres

  2. 若您是新用户可以申请免费试用Hologres为保证使用体验,免费试用请 选择 32C 配置, 若您没有免费试用规格,可以购买Hologres按量付费


步骤一:配置环境

  1. 在 Hologres 实例中开启数据湖加速功能。

  2. 访问Hologres实例列表,单击目标实例操作列中的数据湖加速并确认,开启数据湖加速功能后,Hologres 实例将重启。



2. 登录 Hologres 实例,创建数据库。具体操作,请参见连接HoloWeb




  1. (可选)创建 Extension。本文以dlf_fdw为例。

  2. 说明

  3. Hologres V2.1 版本已默认创建,您无需进行此操作。您可以访问Hologres实例列表,在实例详情页面确认您的实例版本。


CREATE EXTENSION IF NOT EXISTS dlf_fdw;
复制代码


说明


使用 Superuser 在SQL编辑器-HoloWeb中执行上述语句创建 Extension,该操作针对整个 DB 生效,一个 DB 只需执行一次。关于 Hologres 账号授权详情,请参见授权服务账号


  1. 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 存储空间,查询性能一般在秒级至分钟级。


  1. 创建 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');
复制代码


  1. 数据查询。

  2. 创建外部表成功后,可以直接查询外部表读取 OSS 中的数据。示例语句如下。


--TPCH Q11查询语句select        ps_partkey,        sum(ps_supplycost * ps_availqty) as valuefrom        partsupp_orc,        supplier_orc,        nation_orcwhere        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 中存储,可获得更好的查询性能和更高的数据处理能力。关于存储费用详情介绍,请参见计费概述


  1. 在 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;
复制代码


  1. 同步 Hologres 外部表数据至 Hologres 内部表。


---将Hologres外表数据导入内表INSERT INTO nation SELECT * FROM nation_orc;INSERT INTO supplier SELECT * FROM supplier_orc;INSERT INTO partsupp SELECT * FROM partsupp_orc;
复制代码


  1. 查询 Hologres 内部表数据。


--TPCH Q11查询语句select        ps_partkey,        sum(ps_supplycost * ps_availqty) as valuefrom        partsupp,        supplier,        nationwhere        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;
复制代码

晒出结果:

一等奖、二等奖、参与奖:


将内表查询或外表查询的运行日志截图晒出。


外表查询速度:





内表查询速度:



分享作品参与点赞排行

  • 请使用提交作品账号开通产品并参与挑战,后台会校验产品开通及 SQL 运行情况。

  • 请上传原创数据表及截图,若为抄袭则取消资格;若发现有刷赞行为,立即撤销作品,取消参赛资格。

挑战奖:

基于已有的外表和内表,分别运行 2 条同样的自定义 SQL,附上外表 SQL 语句、运行日志、运行结果、内表 SQL 语句、运行日志、运行结果,6 个部分合并 1 张截图上传。

  • SQL 需要涉及多表查询,单表 SQL 不支持参与挑战

  • 获奖名单按照作品提交时间排序

  • 为保证 SQL 原创性,同样 SQL 只取第一位

  • 挑战奖优先,不与一等奖、二等奖重复获取


挑战奖作品示例:



发布于: 刚刚阅读数: 5
用户头像

还未添加个人签名 2020-10-15 加入

分享阿里云计算平台的大数据和AI方向的技术创新和趋势、实战案例、经验总结。

评论

发布
暂无评论
5分钟使用Hologres实时湖仓加速分析挑战赛来袭_阿里云大数据AI技术_InfoQ写作社区