MaxComputer - ODPS访问OSS非结构化数据

。。。
。。。
。。。此处忽略文章背景千万字。。。
。。。
。。。

MaxCompute访问OSS的数据,在此主要介绍下面两种方式:
1、创建odps外部表,直接访问OSS非结构化数据
2、创建odps内部表,通过节点任务同步OSS 非结构化数据

首先创建个csv/txt文件test_odps_oss.TXT,然后上传到OSS。
文件内容:
客户姓名,身份证号码
张三,50022111111
李四,50022111112
王五,"
50022111113"

MaxComputer - ODPS访问OSS非结构化数据

接下来就通过上诉两种方式,在maxcomputer通过sql查询查看数据。

第一种通过外部表的方式:

    
    drop table if exists test_oss_ext;
    
    CREATE EXTERNAL TABLE IF NOT EXISTS test_oss_ext
    (
        cust_name string COMMENT '客户名称',
        id_number string COMMENT '证件号码' 
    )
    STORED BY 'com.aliyun.odps.TextStorageHandler' -- (1)
    WITH SERDEPROPERTIES (
     'odps.properties.rolearn'='acs:ram::<主账号ID>:role/aliyunodpsdefaultrole',   -- (2)
      'delimiter'=',',
      'odps.text.option.header.lines.count'='1',
      'odps.text.option.encoding'='UTF-8'
    ) 
    LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/odps-test/';  -- (3)
  • (1)com.aliyun.odps.Text(Csv)StorageHandler是内置的处理text(csv)格式文件的StorageHandler,它定义了如何读写text(csv)文件。您只需指明这个名字,相关逻辑已经由系统实现。
  • (2)odps.properties.rolearn中的信息是RAM中AliyunODPSDefaultRole的Arn信息。您可以通过RAM控制台中的角色详情获取。(参考文档1中有详细说明)
  • (3)LOCATION必须指定一个OSS目录且不能为根目录,默认系统会读取这个目录下所有的文件。

目前SERDEPROPERTIES还支持的属性项,如下所示:
MaxComputer - ODPS访问OSS非结构化数据

执行完上面的外部表创建之后,我们查询下数据:

select * from test_oss_ext
FAILED: ODPS-0123131:User defined function exception - Traceback:
java.lang.RuntimeException: SCHEMA MISMATCH: External Table schema specified a total of [2] columns, but current text line parsed into [1] columns delimited by [,]. Current line is read as: 50022111113"

错误提示很明显,就是文本里面最后一行数据没有,分割符,那把文件修改下上传到OSS再试下。

MaxComputer - ODPS访问OSS非结构化数据

怎么样,是不是很方便,传统的指标计算,很多都是由数据仓库提供明细数据或汇总数据至应用服务器,由应用端界面提供各种参数,阈值配置,那现在我们是不是可以直接通过外部表的方式,将指标计算在仓库完成,前端直接展现,是不是能提高效率。
另外,odps查询外部表是0费用的,还可以节约成本。。。
MaxComputer - ODPS访问OSS非结构化数据

第二种通过节点任务同步数据

配置数据源(详情参考文档2):
MaxComputer - ODPS访问OSS非结构化数据

创建内部表:

 
CREATE TABLE IF NOT EXISTS pwork.test_oss_ext
(
    cust_name string COMMENT '客户名称',
    id_number string COMMENT '证件号码' 
)

创建数据同步的节点任务(详情见参考文档3):
看下OSS的配置:
MaxComputer - ODPS访问OSS非结构化数据

先预览下数据:
MaxComputer - ODPS访问OSS非结构化数据

来源配置没问题,直接下一步继续配置,提交测试运行,完成之后看下查询结果;

MaxComputer - ODPS访问OSS非结构化数据

再来看下消费情况:
MaxComputer - ODPS访问OSS非结构化数据

呃呃呃,一分钱,蚊子再小也是肉啊,查一次就离买房远一步诶。

接下来,再把文件改成下面的样式上传到OSS,看下节点任务的同步情况:
客户姓名,身份证号码
张三,50022111111
李四,50022111112
王五,"
50022111113"

在这就不一一操作了,直接看下来源配置的数据预览:
MaxComputer - ODPS访问OSS非结构化数据

外部表若能如此,对于csv类型的文件,操作起来就更方便了。

参考文档:
1、odps访问OSS非结构化数据
https://help.aliyun.com/document_detail/45389.html?spm=a2c4g.11186623.6.702.636d185dI2jctE
2、dataworks配置OSS数据源
https://help.aliyun.com/knowledge_detail/74292.html
3、dataworks创建同步任务
https://help.aliyun.com/document_detail/30269.html?spm=5176.10695662.1996646101.searchclickresult.796b4ae3w8NVpF

上一篇:MaxComputer - SQL 常用的正则表达式


下一篇:MaxComputer-Pyodps之使用pyodps实现sql的循环