本文介绍通过配置DLF,将数据从OSS抽取到DLF元数据中,并使用MaxCompute的external schema进行数据湖联邦查询。该方案可以方便地进行数据分析和处理,并保证数据的可靠性和安全性。
适用范围
操作步骤
步骤一:授予MaxCompute访问DLF和OSS的权限
操作MaxCompute项目的账号未经授权无法访问DLF和OSS服务,授权方式包含如下两种:
步骤二:准备OSS数据
登录OSS控制台,创建Bucket,本示例中Bucket名为
mc-lakehouse-dlf-oss。详情请参见创建存储空间。本文以分区表为例,在Bucket下新建总目录
mc_dlf_oss_pt/,在该目录下新建四个子目录并上传文件,分别为:direction=N/:vehicle1.csvdirection=NE/:vehicle2.csvdirection=S/:vehicle3.csvdirection=SW/:vehicle4.csv
步骤三:DLF1.0抽取OSS元数据
登录数据湖构建(DLF)控制台,在左上角选择地域。
在左侧导航栏,选择。
在元数据管理页面,单击数据库页签。
在default数据目录下单击新建数据库。配置如下参数:
在当前元数据管理页面,单击数据库页签,在default数据目录下单击新建数据库。配置如下参数:
参数
是否必填
说明
所属数据目录
必填
示例中是default数据目录。
数据库名称:
必填
自定义数据库名称,以字母开头,长度为1-128位,允许字符为a-z、A-Z、0-9_,例如
dlf_oss_csv。数据库描述:
选填
自定义描述。
选择路径:
必填
数据库存储位置,例如
oss://mc-lakehouse-dlf-oss/metadb_save。在左侧导航栏,选择。
在元数据抽取页面,单击新建抽取任务,进入新建抽取任务页面。配置如下参数:
设置抽取源:
参数
是否必填
说明
抽取任务名称
必填
自定义抽取任务名称。
OSS路径
必填
DLF会根据输入的OSS路径,自动创建表和分区。路径结构参考:oss://所选路径/表(可选)/分区(可选)/文件。例如抽取文件oss://my-bucket/my-path/my-table/dt=1/data.csv,若选择路径oss://my-bucket/my-path/,系统会以my_table作为表名,dt作为一个分区,抽取data.csv作为表的schema。注意表名所在的路径名需要字母开头,仅支持数字字母下划线组合。
排除模式
选填
正则匹配需要排除的OSS路径名
解析格式
必填
提供自动识别、json、csv、parquet、orc、hudi、delta、avro等多种表格式。
设置目标信息:
参数
是否必填
说明
所属数据目录
必填
选择目标信息所属数据目录。
目标数据库
必填
选择已构建的数据库,例如
dlf_oss_csv。目标数据表前缀
选填
请输入目标数据表前缀,英文开头+英文大小写数字_,最多128位
抽取任务发现表字段更新时
必填
仅新增列,不支持删除原有列。
更新表结构,根据最新探测的表结构生成新的表结果。(选择该项后,元数据抽取结果会覆盖原有重名的表,可能造成原有表丢失或不可用。)
忽略更新,不修改任何表。
如何处理OSS中发现已删除对象
必填
删除对应的元数据。
忽略更新,不删除任何表。
设置抽取任务:
参数
是否必填
说明
RAM 角色
必填
Data Lake Formation服务通过扮演该角色来访问用户资源,可选择系统默认AliyunDLFWorkFlowDefaultRole角色。
执行策略
选填
作业的执行策略。
手动执行
调度执行
抽取策略
必填
快速抽取:抽取元数据时只扫描每个文件的部分数据,抽取作业消耗时间较短,抽取结果准确性低于全量抽取,可以在元数据编辑中调整元数据信息。
全量抽取:抽取元数据时扫描全量数据文件,在数据规模比较大时,作业消耗时间长,抽取结果更准确。
单击保存并立即执行。
查看抽取表
在左侧导航栏,选择。
在元数据管理页面,单击数据库页签。
单击目标数据库名,进入该数据库详情页,单击表列表页签,可查看抽取的表。
本示例中,抽取的表为
mc_dlf_oss_pt。
若添加新分区数据,需要重新执行抽取任务。
步骤四:创建DLF1.0+OSS外部数据源
登录MaxCompute控制台,在左上角选择地域。
在左侧导航栏,选择 。
在外部数据源页面,单击创建外部数据源。
在弹出的新增外部数据源对话框,根据界面提示配置相关参数。参数说明如下:
参数
是否必填
说明
外部数据源类型
必填
选择DLF+OSS。
外部数据源名称
必填
可自定义命名。命名规则如下:
以字母开头,且只能包含小写字母、下划线和数字。
不能超过128个字符。
例如
dlf_oss_csv_new。外部数据源描述
选填
根据需要填写。
地域
必填
默认为当前地域。
DLF Endpoint
必填
默认为当前地域的DLF Endpoint。
OSS Endpoint
必填
默认为当前地域的OSS Endpoint。
RoleARN
必填
RAM角色的ARN信息。此角色需要包含能够同时访问DLF和OSS服务的权限。
登录RAM控制台。
在左侧导航栏选择。
在基础信息区域,可以获取ARN信息。
示例:
acs:ram::124****:role/aliyunodpsdefaultrole。外部数据源补充属性
选填
特殊声明的外部数据源补充属性。指定后,使用此外部数据源的任务可以按照参数定义的行为访问源系统。
说明支持的具体参数请关注后续官网文档更新说明,具体参数将随产品能力演进逐步放开。
单击确认,完成外部数据源的创建。
在外部数据源页面,单击目标数据源对应的操作的详情,可查看数据源详细信息。
步骤五:创建外部schema
连接至MaxCompute,输入以下命令:
SET odps.namespace.schema=true;
CREATE EXTERNAL SCHEMA IF NOT EXISTS <external_schema>
WITH <external_data_source>
ON '<dlf_data_catalogue>.dlf_database';参数说明如下:
步骤六:使用SQL访问OSS数据
登录MaxCompute客户端,查询external schema内的表。
SET odps.namespace.schema=true;
USE schema es_dlf_oss_csv;
SHOW tables IN es_dlf_oss_csv;
-- 返回结果:
ALIYUN$xxx:mc_dlf_oss_pt
OK查询external schema内的mc_dlf_oss表明细。
SET odps.namespace.schema=true;
SELECT * FROM <project_name>.es_dlf_oss_csv.mc_dlf_oss_pt WHERE direction='NE';
-- 返回结果如下:
+------------+------------+------------+------------+------------+------------+----------------+------------+
| _c0 | _c1 | _c2 | _c3 | _c4 | _c5 | _c6 | direction |
+------------+------------+------------+------------+------------+------------+----------------+------------+
| 1 | 2 | 13 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE |
| 1 | 3 | 48 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE |
| 1 | 9 | 4 | 1 | 46.81006 | -92.08174 | 9/15/2014 0:00 | NE |
+------------+------------+------------+------------+------------+------------+----------------+------------+步骤七:将联邦外表的数据复制入数仓
将联邦外表的数据复制到数仓中。
CREATE TABLE vehicle_copy AS SELECT * FROM <project_name>.es_dlf_oss_csv.mc_dlf_oss_pt WHERE direction='NE';查询数仓中已复制的表数据。
SELECT * FROM vehicle_copy; -- 返回结果。 +------------+------------+------------+------------+------------+------------+----------------+------------+ | _c0 | _c1 | _c2 | _c3 | _c4 | _c5 | _c6 | direction | +------------+------------+------------+------------+------------+------------+----------------+------------+ | 1 | 2 | 13 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | | 1 | 3 | 48 | 1 | 46.81006 | -92.08174 | 9/14/2014 0:00 | NE | | 1 | 9 | 4 | 1 | 46.81006 | -92.08174 | 9/15/2014 0:00 | NE | +------------+------------+------------+------------+------------+------------+----------------+------------+