查询非结构化数据

更新时间:
复制为 MD 格式

MaxCompute 2.0支持通过外部表的方式直接访问OSS、OTS等。MaxCompute Studio对此提供了一些代码模板方便您快速进行非结构化数据查询开发。本文为您介绍如何使用MaxCompute Studio查询非结构化数据。

前提条件

您需要完成以下操作:

编写StorageHandler、ExtractorOutputter

  1. Project区域,右键单击Module的源码目录(即src > main > java),选择new > MaxCompute Java

  2. 填写Name并选择类型为ExtractorStorageHandlerOutputer,按下Enter键。

    • Name:创建的MaxCompute Java Class名称。如果还没有创建Package,在此处填写packagename.classname,会自动生成Package。

    • 选择类型为ExtractorStorageHandlerOutputer

      说明

      您可以根据需要选择Extractor、StorageHandlerOutputer类型:

      • Extractor:自定义输入数据解析器,用来实现自定义处理数据读取的逻辑,即如何读取非结构化数据。

      • StorageHandler:用于指定和配置自定义ExtractorOutputer的实现类。

      • Outputer: 自定义输出数据Outputer,用来实现自定义输出数据的逻辑,即如何写出非结构化数据。

  3. 创建Extractor成功后,在编辑界面开发Java程序。代码框中模板已自动填充框架代码,只需要自行编写需要的逻辑代码即可。

通过单元测试调试ExtractorOutputter

您可以参照examples目录下的单元测试示例,编写测试用例。

import ...
public class ExtractorTest {
    private String ambulanceFullSchema =
            "vehicle:bigint;id:bigint;patient:bigint;calls:bigint;latitude:d...";
    private String speechDataFullSchema = "sentence_snr:double;id:string";
    @Test
    public void testTextExtractor() throws Exception {
        /**
         * Equivalent to the following SQL:
         *    CREATE EXTERNAL TABLE  ambulance_data_external
         *    ( vehicle bigint, id bigint, patient bigint, calls bigint,
         *      Latitude double, Longitude double, time string, direction string)
         *    STORED BY 'com.aliyun.odps.udf.example.text.TextStorageHandler'
         *    LOCATION 'oss://.../data/ambulance_csv/'
         *    USING 'jar_file_name.jar';
         *
         *    SELECT * FROM ambulance_data_external;
         */
        Column[] externalTableSchema = UnstructuredUtils.parseSchemaString(
                ambulanceFullSchema);
    }
}

打包上传

调试成功之后,将Java程序打成JAR包,并作为资源上传至MaxCompute服务端。详情请参见打包、上传和注册

查询非结构化数据

  1. Project区域,右键单击scripts,选择new > MaxCompute SQL 脚本

  2. Script Name后输入SQL脚本名称,MaxCompute Project中选择执行脚本的MaxCompute项目,单击OK

  3. 在编辑器中输入创建外部表的SQL语句,并单击运行图标,完成外部表创建。

    --name:osd
    --author:liuyi
    --create time:2017-03-07 17:06
    set odps.service.mode=off;
    CREATE EXTERNAL TABLE IF NOT EXISTS myun_src_external
    (
    vehicleId bigint,
    recordId bigint,
    patientId bigint,
    calls bigint,
    locationLatitute double,
    locationLongtitue double,
    recordTime string,
    direction string
    )
    STORED BY 'myun.MyStorageHandler'
    WITH SERDEPROPERTIES('delimiter'='|')
    LOCATION 'oss://oss-cn-hangzhou-zmf.aliyuncs.com/074799/demo/SampleData/CSV/src/'
    USING 'myun.jar';
  4. 新建一个MaxCompute SQL脚本,输入如下查询语句,并单击运行图标,查询数据。

    set odps.task.major.version=unstructured_data;
    select * from myun_src_external where patientId > 25;

相关文档

ORC外部表