本文介绍通过配置DLF,将数据从OSS抽取到DLF元数据中,并使用MaxCompute的external schema进行数据湖联邦查询。该方案可以方便地进行数据分析和处理,并保证数据的可靠性和安全性。
前提条件
使用限制
支持地域
地域名称
地域ID
华东1(杭州)
cn-hangzhou
华东2(上海)
cn-shanghai
华北2(北京)
cn-beijing
华北3(张家口)
cn-zhangjiakou
华南1(深圳)
cn-shenzhen
中国香港
cn-hongkong
新加坡
ap-southeast-1
德国(法兰克福)
eu-central-1
MaxCompute、OSS和DLF必须部署在同一地域。
操作步骤
步骤一:授予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元数据
在左侧导航栏,选择元数据 > 元数据管理。在当前元数据管理页面,单击数据库页签,在default数据目录下单击新建数据库。配置如下参数:
参数
是否必填
说明
所属数据目录
必填
示例中是default数据目录。
数据库名称
必填
自定义数据库名称,以字母开头,1-128位,a-ZA-Z0-9_,例如
db_dlf_oss
。数据库描述
选填
自定义描述。
选择路径
必填
数据库存储位置,例如
oss://mc-lakehouse-dlf-oss/mc_dlf_oss_pt/
。在左侧导航栏,选择元数据 > 元数据抽取。在当前元数据抽取页面,单击新建抽取任务。
设置抽取源,配置如下参数:
参数
是否必填
说明
抽取任务名称
必填
自定义抽取任务名称。
OSS路径
必填
DLF会根据输入的OSS路径,自动创建表和分区。
例如抽取文件
oss://bucket-path/table-option/dt-option/data.csv
时,输入选择路径oss://bucket-path/catalogue-path/
,系统会以table-option
作为表名,dt-option
作为一个分区,抽取data.csv
作为表的schema。注意表名所在的路径名需要字母开头,仅支持数字字母下划线组合。
排除模式
选填
正则匹配需要排除的路径名。
解析格式
必填
提供自动识别、json、CSV、parquet、orc、hudi、delta、avro等多种表格式。
设置目标信息,配置如下参数:
参数
是否必填
说明
所属数据目录
必填
选择目标信息所属数据目录。
目标数据库
必填
选择已构建的数据库。
目标数据表前缀
选填
目标数据表前缀,英文开头+英文大小写数字_,最多128位。
抽取任务发现表字段更新时
必填
选择抽取任务发现表字段更新时的行为:
仅新增列,不支持删除原有列。
更新表结构,根据最新探测的表结构生成新的表结果。(选择该项后,元数据抽取结果会覆盖原有重名的表,可能造成原有表丢失或不可用。)
忽略更新,不修改任何表。
如何处理OSS中发现已删除对象
必填
两种处理方式:
删除对应的元数据。
忽略更新,不删除任何表。
设置抽取任务,配置如下参数:
参数
是否必填
说明
RAM 角色
必填
Data Lake Formation服务通过扮演该角色来访问用户资源,可选择系统默认AliyunDLFWorkFlowDefaultRole角色。
执行策略
选填
作业的执行策略。可选择手动执行或调度执行。
抽取策略
必填
快速抽取:抽取元数据时只扫描每个文件的部分数据,抽取作业消耗时间较短,抽取结果准确性低于全量抽取,可以在元数据编辑中调整元数据信息。
全量抽取:抽取元数据时扫描全量数据文件,在数据规模比较大时,作业消耗时间长,抽取结果更准确。
单击保存并立即执行。
抽取任务完成后,可在左侧导航栏元数据 > 元数据管理,单击进入数据库页签,点击数据库名
db_dlf_oss
,在表列表页签可查看到抽取的表mc_dlf_oss_pt
。若添加新分区数据,需要重新执行抽取任务。
步骤四:创建DLF1.0+OSS外部数据源
登录MaxCompute控制台,在左上角选择地域。
在左侧导航栏,选择管理配置 > 外部数据源。
在外部数据源页面,单击创建外部数据源。
在新增外部数据源对话框,根据界面提示配置相关参数。参数说明如下:
参数
说明
外部数据源类型
选择DLF+OSS。
外部数据源名称
可自定义命名。命名规则如下:
以字母开头,且只能包含小写字母、下划线和数字。
不能超过128个字符。
例如
mc_dlf_oss_pt
。外部数据源描述
根据需要填写。
地域
默认为当前地域。
DLF Endpoint
默认为当前地域的DLF Endpoint。
OSS Endpoint
默认为当前地域的OSS Endpoint。
RoleARN
RAM角色的ARN信息。此角色需要包含能够同时访问DLF和OSS服务的权限。
您可以登录RAM访问控制台,在左侧导航栏选择身份管理>角色,单击对应的RAM角色名称,即可在基本信息区域获取ARN信息。
示例:
acs:ram::124****:role/aliyunodpsdefaultrole
。外部数据源补充属性
特殊声明的外部数据源补充属性。指定后,使用此外部数据源的任务可以按照参数定义的行为访问源系统。
说明支持的具体参数请关注后续官网文档更新说明,具体参数将随产品能力演进逐步放开。
单击确认,完成外部数据源的创建。
在外部数据源页面,单击数据源操作列的详情可查看数据源详细信息。
步骤五:创建外部schema
SET odps.namespace.schema=true;
CREATE EXTERNAL SCHEMA IF NOT EXISTS <external_schema>
WITH mc_dlf_oss_pt
ON '<dlf_data_catalogue>.dlf_database';
参数说明如下:
步骤六:使用SQL访问OSS数据
登录MaxCompute客户端,查询external schema内的表。
SET odps.namespace.schema=true;
SHOW tables IN es_mc_dlf_oss_pt;
-- 返回结果:
ALIYUN$xxx:mc_dlf_oss_pt
OK
查询external schema内的mc_dlf_oss表明细。
SET odps.namespace.schema=true;
SELECT * FROM <project_name>.es_mc_dlf_oss_pt.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_mc_dlf_oss_pt.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 | +------------+------------+------------+------------+------------+------------+----------------+------------+