5分钟快速使用Hologres实时湖仓能力,加速分析数据湖OSS上Hudi、Delta、Paimon、ORC等格式数据,赢取精美礼品
活动入口:Hologres实时湖仓分析挑战赛-阿里云开发者社区 或点击文末【阅读全文】参与挑战
2024年1月4日-2023年1月30日
本文以上海地域为例开通OSS、DLF和Hologres服务。
.DS_Store
等文件需手动删除。 参数配置 | 字段描述 |
抽取任务名称 | 元数据抽取任务的名称,输入为中英文数字和(_)。 |
OSS路径 | 指定待抽取数据的OSS目录。 |
解析格式 | 支持json、csv、parquet、orc、hudi、delta、avro中某一类格式进行抽取,或采用自动识别模式会对数据文件自动解析。 |
目标数据库 | 抽取获取的元数据存储的元数据库位置。 |
dlf_fdw
为例。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数据湖数据的映射关系,数据在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');
--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中,数据将在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外表数据导入内表
INSERT INTO nation SELECT * FROM nation_orc;
INSERT INTO supplier SELECT * FROM supplier_orc;
INSERT INTO partsupp SELECT * FROM partsupp_orc;
--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;
一等奖、二等奖、参与奖:
将内表查询或外表查询的运行日志截图晒出。
外表查询速度:
内表查询速度:
分享作品参与点赞排行
挑战奖:
基于已有的外表和内表,分别运行2条同样的自定义SQL,附上外表SQL语句、运行日志、运行结果、内表SQL语句、运行日志、运行结果,6个部分合并1张截图上传。
挑战奖作品示例: