本文为您介绍如何在MaxCompute Studio上开发和调试UDF。

开发UDF

  1. 右键单击Module的源码目录(即src > main > java),选择new > MaxCompute Java
  2. 填写NameKind,单击OK
    • Name:填写创建的MaxCompute Java Class名称,如果还没创建package,可以在此处填写 packagename.classname,会自动生成package。
    • Kind:选择类型为UDF。目前支持的类型有:自定义函数(UDF/UDAF/UDTF)、MapReduce(Driver/Mapper/Reducer)、非结构化开发(StorageHandler/Extractor)等。
  3. 创建成功后,即可进行开发、编辑、测试Java程序。
    说明 此处的代码模板可在Intellij中自定义。选择Preference > Editor > File > Code Templates,然后在Code标签页中找到MaxCompute对应的模板修改即可。

调试UDF

UDF开发完成后,即可通过单元测试和本地运行两种方式进行测试,查看其运行结果是否符合预期。
  • 单元测试。参考examples目录下的单测实例,编写自己测试用例。
  • 本地运行UDF。本地运行时需要指定运行数据源。有以下两种方式设定测试数据源:
    • Studio通过Tunnel服务自动下载指定MaxCompute Project的表数据到warehouse目录下。默认下载100条,如需更多数据测试,请自行使用Console的Tunnel命令或者Studio的表下载功能。
    • 提供mock项目(example_project)及表数据,用户可参考warehouseexample_project自行设置。
    说明
    • 如果指定项目下的表数据未被下载到warehourse中,需要先下载数据,默认下载100条。如需更多数据,可配置Download record limit项。
    • 如果采用Mock项目或已下载数据,则直接运行。
    • UDF的local run框架会将warehouse中指定列的数据作为UDF的输入,开始本地运行UDF,您可以在控制台看到日志输出和结果打印。
    按照如下步骤测试UDF:
    1. 右键单击Driver类,选择Run
    2. RunDebug Configuration页面上配置如下参数:
      • MaxCompute project:UDF运行的MaxCompute空间。
      • MaxCompute table:MaxCompute表名称。
      • Table columns:MaxCompute表列信息。
    3. 单击OK

本地warehouse目录

本地warehouse用于存储表(包括meta和数据)或资源,用于本地执行UDF或MapReduce。warehouse目录如下图所示。
  • warehouse目录下依次是项目名、tables、表名、表schema和sample data。
  • schema文件依次配置项目名、表名以及列名和类型(冒号分隔),分区表还需配置分区列(非分区表参考wc_in1,分区表参考wc_in2)。
  • data文件采用标准csv格式存储表的sample数据:
    • 特殊字符为逗号,双引号和换行(\n\r\n)。
    • 列分隔符为逗号,行分隔符为\n\r\n
    • 如果列内容里包含特殊字符,需要在该列内容前后加上双引号,例如3,No -> “3, No”
    • 如果列内容包含双引号,则每个双引号转义成两个双引号,例如a”b”c -> “a””b””c”
    • \N表示该列为NULL,如果该列内容(string 类型)就是\N,需要转换为 “””\N”””
    • 文件字符编码为UTF-8。