DLA支持MaxCompute(ODPS)数据源-阿里云开发者社区

开发者社区> 云原生数据湖 Data Lake Analytics> 正文

DLA支持MaxCompute(ODPS)数据源

简介: DLA支持MaxCompute(ODPS)数据源 1. 概述 支持功能包括: MaxCompute(ODPS)的数据查询,目前复杂数据类型以字符串形式返回; 一条命令同步对应project下的所有表。

DLA支持MaxCompute(ODPS)数据源

1. 概述

支持功能包括:

  • MaxCompute(ODPS)的数据查询,目前复杂数据类型以字符串形式返回;
  • 一条命令同步对应project下的所有表。

不支持数据回流ODPS。

其他说明:

  • 基于MaxCompute tunnel拉取数据;
  • 通过在查询中指定WHERE <分区列> = <分区key>的形式进行分区过滤(裁剪),避免全表扫描数据,目前支持如下一些形式进行分区过滤(裁剪):

    • WHERE <分区列> = <分区key>
    • WHERE <分区列> = <分区key1> OR <分区列> = <分区key2> ...
    • WHERE <分区列> IN (<分区key1>, <分区key2>, ...)
    • 如果是多级分区,必须写明所有级别的分区过滤条件,并匹配,如: WHERE <一级分区列> = <一级分区key> AND <二级分区列> = <二级分区key> ...
  • 不提供分区过滤,或者分区过滤条件不匹配实际分区的,会全表扫描数据;
  • MaxCompute默认对project的tunnel访问有总体并发quota控制(https://help.aliyun.com/knowledge_detail/51826.html),DLA默认对单次查询控制tunnel并发1000。

2. 步骤

2.1 DLA中创建对应ODPS project的schema

CREATE SCHEMA <schema_name> WITH DBPROPERTIES (
  catalog = 'odps',
  location = 'http://dt.<region>.maxcompute.aliyun-inc.com',
  endpoint = 'http://service.cn.maxcompute.aliyun-inc.com/api',
  project = '<odps_project_name>',
  USER = '<access_key>',
  PASSWORD = '<access_secret>'
)

其中:

  • schema_name为DLA中的定义的schema名;
  • location为对应ODPS中的tunnel endpoint;

  • endpoint为对应ODPS中的endpoint;

  • odps_project_name为目标ODPS的项目名;
  • access_key为访问ODPS的云账号access key;
  • access_secret为访问ODPS的云账号access secret。

2.2 同步ODPS project下的表信息

msck repair database <schema_name>

执行上述命令,同步对应的ODPS project下的所有表,EXTERNAL TABLE(外表)不会被同步(注意:ODPS project下的表是分区表时,分区列会被作为普通列创建在DLA中的表列定义中,按顺序排在最后)。

仅仅需要上述两个步骤,就可以在DLA中:

  • 对ODPS表进行查询;
  • 使用INSERT from SELECT将ODPS数据回流到其他数据源。

到目前(2019年6月)为止,DLA支持的云上数据源情况如下:

image.png

3. 建表操作

除了上述2中的MSCK REPAIR DATABASE的全量元数据表同步机制之外,也可以单表进行建表操作,避免映射ODPS project下的全部表。

3.1 非分区表

ODPS中project下的非分区表对应的CREATE TABLE语句:

CREATE TABLE IF NOT EXISTS bank_data
(
 age             BIGINT COMMENT '年龄',
 job             STRING COMMENT '工作类型',
 marital         STRING COMMENT '婚否',
 education       STRING COMMENT '教育程度',
 default         STRING COMMENT '是否有信用卡',
 housing         STRING COMMENT '房贷',
 loan            STRING COMMENT '贷款',
 contact         STRING COMMENT '联系途径',
 month           STRING COMMENT '月份',
 day_of_week     STRING COMMENT '星期几',
 duration        STRING COMMENT '持续时间',
 campaign        BIGINT COMMENT '本次活动联系的次数',
 pdays           DOUBLE COMMENT '与上一次联系的时间间隔',
 previous        DOUBLE COMMENT '之前与客户联系的次数',
 poutcome        STRING COMMENT '之前市场活动的结果',
 emp_var_rate    DOUBLE COMMENT '就业变化速率',
 cons_price_idx  DOUBLE COMMENT '消费者物价指数',
 cons_conf_idx   DOUBLE COMMENT '消费者信心指数',
 euribor3m       DOUBLE COMMENT '欧元存款利率',
 nr_employed     DOUBLE COMMENT '职工人数',
 y               BIGINT COMMENT '是否有定期存款'
);

则在DLA中,用上述2.1中的步骤创建的schema下,创建对应project下的表(仅仅是多了一个EXTERNAL关键字,注意:表名和列名必须相同,如果遇到关键字,请用``引起来,比如下面的default列):

CREATE EXTERNAL TABLE IF NOT EXISTS bank_data
(
 age             BIGINT COMMENT '年龄',
 job             STRING COMMENT '工作类型',
 marital         STRING COMMENT '婚否',
 education       STRING COMMENT '教育程度',
 `default`         STRING COMMENT '是否有信用卡',
 housing         STRING COMMENT '房贷',
 loan            STRING COMMENT '贷款',
 contact         STRING COMMENT '联系途径',
 month           STRING COMMENT '月份',
 day_of_week     STRING COMMENT '星期几',
 duration        STRING COMMENT '持续时间',
 campaign        BIGINT COMMENT '本次活动联系的次数',
 pdays           DOUBLE COMMENT '与上一次联系的时间间隔',
 previous        DOUBLE COMMENT '之前与客户联系的次数',
 poutcome        STRING COMMENT '之前市场活动的结果',
 emp_var_rate    DOUBLE COMMENT '就业变化速率',
 cons_price_idx  DOUBLE COMMENT '消费者物价指数',
 cons_conf_idx   DOUBLE COMMENT '消费者信心指数',
 euribor3m       DOUBLE COMMENT '欧元存款利率',
 nr_employed     DOUBLE COMMENT '职工人数',
 y               BIGINT COMMENT '是否有定期存款'
);

3.2 分区表

ODPS project下的表是分区表时,分区列会被作为普通列创建在DLA中的表列定义中,按顺序排在最后。例如,ODPS project下的分区表对应的CREATE TABLE语句:

CREATE TABLE IF NOT EXISTS part_datatype_test_complex (
  int_test int,
  bigint_test bigint,
  double_test double,
  string_test string,
  datetime_test datetime,
  boolean_test boolean,
  array_test array<INT>,
  map_test map<string, string>,
  struct_test_1 struct<x:INT, y:INT>,
  struct_test_2 struct<x:string, y:string>
)
partitioned by (pt bigint, region string);

到目前(2019年6月)为止,还不支持在DLA中直接用复杂类型映射ODPS的复杂类型,可以先把复杂类型用字符串类型映射,对应的CREATE TABLE语句为:

CREATE EXTERNAL TABLE IF NOT EXISTS part_datatype_test_complex (
  int_test int,
  bigint_test bigint,
  double_test double,
  string_test string,
  datetime_test datetime,
  boolean_test boolean,
  array_test string,
  map_test string,
  struct_test_1 string,
  struct_test_2 string,
  pt bigint,
  region string
)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
云原生数据湖 Data Lake Analytics
使用钉钉扫一扫加入圈子
+ 订阅

云原生数据湖分析Data Lake Analytics是云原生数据湖的分析与计算产品形态,存储计算分离。提供 Serverless Spark、Serverless Presto、一站式数据湖管理;

官方博客
官网链接