MaxCompute支持使用外部表功能查询和分析存储于OSS等外部存储系统的数据。
功能介绍
MaxCompute SQL作为分布式数据处理的主要入口,可实现EB级别离线数据的快速处理。随着大数据业务的不断扩展,新的数据使用场景在不断产生,很多数据集中在湖上、实时数仓中、NoSQL数据库中或其他系统里。
MaxCompute不仅适用于数据仓库场景,同时也由于底层采用了大数据分布式存储和计算架构,其容量、计算吞吐效率、多引擎能力和开放性也适用数据湖场景。因此,面对外部数据计算场景,存在两种主要模式:
模式一:先导入再计算
将数据导入MaxCompute。结构化数据以表形态支持SQL计算或对三方引擎提供开放能力,非结构化数据也可以存入MaxCompute并计算。在MaxCompute中可以获得更高的数据读写效率和更一体化的体验。
模式二:直接在外部计算
当需要基于数据湖构建更灵活的数据体系时,MaxCompute SQL也可作为计算引擎在数仓外部计算。
MaxCompute提供面对数仓强管理体系下的计算能力,同时也能够对接外部存储数据的系统和管理体系。而最直接访问外部数据的功能是外部表。
定义与原理
通过DDL语句定义MaxCompute访问外部数据的表名、schema、表属性、权限、位置和协议等信息,记录在MaxCompute元数据中。
SQL就可以按照外部表的元数据信息,根据不同的外部表格式采用对应的方法建立与外部数据源的联系,包括获取或更新外部数据的元信息,提供各种数据的读取、计算和写出能力。
主要应用场景
基于外部表,可以实现直接计算MaxCompute外部的数据,也可以在MaxCompute的管理范围管理外部数据源,并在约定的管理体系下使用数据。例如:湖上结构化或非结构化数据批处理、数据共享交换及实时数仓数据归档入数仓模型等
计费说明
存储费用
结论:不产生任何存储费用。
原因:用外部表功能时,外部表的数据不会复制后存储在MaxCompute,外部表的数据存储于外部系统,MaxCompute不收取数仓侧的存储费用,存储成本请关注数据源自身的计费规则。
计算费用
计算费用遵循MaxCompute的计算资源计费规则,具体分为以下几种模式:对于包年包月或弹性预留CU资源:
外部表的计算费用已包含在预付费的计算资源费用中。
对于按量付费模式:
计费部分:目前仅统计计算任务访问OSS和OTS的扫描数据量。
暂不计费部分:访问 HDFS、Hologres、RDS、HBase、Lindorm 等(无论是通过外部表还是湖仓一体2.0的外部Schema方式),暂时不统计扫描数据量,也暂不产生计算费用。
网络费用
当使用公网MaxCompute Endpoint连接外部表时,会产生公网流量费和下载费用。MaxCompute费用详情请参见计费项与计费方式。
外部数据源侧费用提醒
使用MaxCompute外部表访问外部数据源时,外部数据源可能会产生计算、访问、数据传输等费用,具体以外部数据源计费方式为准,请关注相应产品的说明。
适用范围
Tunnel功能及Tunnel SDK当前不支持外部表操作。可以通过Tunnel直接上传数据到MaxCompute内部表,或者是通过OSS Python SDK上传到OSS后,在MaxCompute使用外部表做映射。
MaxCompute的外部表支持写出数据到数据源的能力,写出能力和一致性受外部系统的限制。例如:
Hologres:MaxCompute基于JDBC协议访问Hologres元信息,不能保证写出事务控制的原子性;MaxCompute SQL引擎对Hologres底层pangu数据只有直读并无直写能力;MaxCompute的分布式计算多进程并行写的复杂性,上述原因导致MaxCompute对Hologres写出数据不支持
INSERT OVERWRITE语义,且作业运行失败的情况下可能会只写出部分数据。HDFS:同样基于HMS,HDFS的写出也有较小概率不满足一致性。
OSS:OSS外部表写出时,通过.odps元信息文件控制可以降低不完整的概率。但如果为了引擎兼容性放弃使用.odps元信息文件控制机制,写出场景也有较小概率不完整。
MaxCompute对外部数据的写出能力如果使用
INSERT OVERWRITE语义,会先写出数据,数据ddl commit阶段会删除表/分区已有数据,再替换为新写出数据。被删除数据MaxCompute无法回滚恢复,请提前做好备份,并建议写出后执行数据校验,如有问题可以重复执行完整写出。
相关文档
支持外部表
MaxCompute支持OSS、Hologres及RDS等多种外部表:
外部表示例
通过以下示例,深入了解通过MaxCompute外部表功能处理各种非结构化数据的方法:
常见问题
外部表的常见问题及解决方式请参见外部表常见问题。