MaxCompute、DLF和OSS是阿里云提供的一体化解决方案,可以实现数据湖查询和湖数据入仓。通过配置DLF,将数据从OSS导入到MaxCompute中,并使用MaxCompute进行数据湖查询。该方案可以方便地进行数据分析和处理,并保证数据的可靠性和安全性。
前提条件
已开通OSS服务,并准备测试数据。
在OSS管理控制台创建存储空间(Bucket),详情请参见OSS控制台快速入门。
下载湖仓一体测试数据测试数据,解压后上传至已创建的Bucket目录。
已开通DLF服务,并导入OSS测试数据。
已创建MaxCompute项目,详情请参见创建MaxCompute项目。
已创建DataWorks工作空间,并绑定MaxCompute数据源。
创建DataWorks工作空间详情请参见创建并管理工作空间,绑定MaxCompute数据源请参见绑定MaxCompute引擎。
使用限制
仅华东1(杭州)、华东2(上海)、华北2(北京)、华北3(张家口)、华南1(深圳)、中国香港、新加坡和德国(法兰克福)地域支持构建湖仓一体能力。
MaxCompute、OSS和DLF必须部署在同一地域。
操作步骤
步骤一:授予MaxCompute访问DLF和OSS的权限
操作MaxCompute项目的账号未经授权无法访问DLF和OSS服务,您需要执行授权操作。授权方式包含如下两种:
步骤二:通过MaxCompute外部项目查询数据湖数据
如果您的账号开启了租户级别Schema开关,执行下述代码前需要关闭三层模型,即设置以下参数set odps.namespace.schema=false;
。
基于已创建的MaxCompute项目、DLF元数据库和OSS存储空间,创建External Project,用于关联DLF和OSS,并映射至已创建的MaxCompute项目。后续可通过映射的MaxCompute项目对External Project进行数据分析操作。仅MaxCompute项目的所有者(Project Owner)或具备Admin、Super_Administrator角色的用户可以创建External Project。更多MaxCompute构建湖仓一体操作,请参见MaxCompute湖仓一体概述。
在DataWorks控制台创建External Project。
登录DataWorks控制台,并选择地域。
在左侧导航栏选择更多 > 数据湖集成(湖仓一体)。
在数据湖集成(湖仓一体)页面,单击现在开始创建。
在新建数据湖集成页面,按照界面指引进行操作。参数说明及示例如下:
参数
描述
示例
创建数据仓库
外部项目名称
自定义外部项目名称。
ext_project_oss
MaxCompute项目
所绑定的MaxCompute内部项目名称。
parctice_test
创建外部数据湖连接
External Project描述
可选。外部项目描述。
无
异构数据平台类型
选择阿里云DLF+OSS数据湖连接。
无
DLF所在区
连接DLF所在的可用区,请根据地域进行选择。
cn-hangzhou
DLF Endpoint
DLF的对内服务Endpoint,请根据地域进行选择。
dlf-share.cn-hangzhou.aliyuncs.com
DLF数据库名称
连接DLF的目标数据库名称。您可以登录DLF控制台,在左侧导航栏元数据管理下拉列表下的元数据库页面获取。
practice_db
DLF RoleARN
可选。RAM角色的ARN信息。采用自定义授权方式时,需要配置该参数。您可以登录RAM访问控制台,在左侧导航栏身份管理下拉列表下的角色页面获取。
无
单击创建,然后单击预览。若能预览DLF库中的表信息,则表示External Project创建成功。
在DataWorks临时查询页面,查看External Project下的表。
命令示例:
show tables in ext_project_oss;
返回结果:
ALIYUN$***@aliyun.com:nation_orcnation_orc ALIYUN$***@aliyun.com:partsupp_orcpartsupp_orc ALIYUN$***@aliyun.com:supplier_orcsupplier_orc
在DataWorks临时查询页面,查询External Project中的表数据。
命令示例:
SELECT ps_partkey, sum(ps_supplycost * ps_availqty) as value FROM ext_project_oss.partsupp_orcpartsupp_orc, ext_project_oss.supplier_orcsupplier_orc, ext_project_oss.nation_orcnation_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 ext_project_oss.partsupp_orcpartsupp_orc, ext_project_oss.supplier_orcsupplier_orc, ext_project_oss.nation_orcnation_orc WHERE ps_suppkey = s_suppkey and s_nationkey = n_nationkey and RTRIM(n_name) = 'EGYPT' ) ORDER BY value desc;
部分返回结果如下:
ps_partkey value 465863 19882392.75 1319068 19234404.98 1001261 18184602.42 441166 18072201.77 1609960 18035338.6 1082959 17756303.25 140601 17537986.68 316323 17521596.97 971926 17462615.06 1472570 17397733.88 987594 17163087.65 ... ...
步骤三:将外部项目数据导入内部表
如果需要创建与外部数据源中表结构相同的表,可以使用
CREATE TABLE...LIKE
命令复制外部数据源中的表结构,详情请参见表操作。命令示例如下。-- 创建表 CREATE TABLE from_exe_tbl LIKE ext_project_oss.partsupp_orcpartsupp_orc; -- 此时from_exe_tbl的表结构与 ext_project_oss.partsupp_orcpartsupp_orc 完全相同。 -- 除生命周期属性外,列名、列注释以及表注释等均相同。 -- 但 ext_project_oss.partsupp_orcpartsupp_orc 中的数据不会被复制到from_exe_tbl表中。 -- 查询表 SELECT * FROM from_exe_tbl; -- 查看表结构 DESC from_exe_tbl;
如果需要基于外部数据源中的表创建新表,并复制数据,但不复制分区属性,可以使用
CREATE TABLE...AS
命令复制外部数据源中表结构及数据,详情请参见表操作。命令示例如下。-- 创建表 CREATE TABLE from_exe_tb2 AS SELECT * FROM ext_project_oss.partsupp_orcpartsupp_orc; -- 此时from_exe_tb2的表结构与 ext_project_oss.partsupp_orcpartsupp_orc 完全相同。 -- 除生命周期属性外,列名、列注释以及表注释等均相同。 -- ext_project_oss.partsupp_orcpartsupp_orc 中的数据也会被复制到from_exe_tb2表中。 -- 查询表 SELECT * FROM from_exe_tb2; -- 查看表结构 DESC from_exe_tb2;