外部表
MaxCompute OSS 外部表使用相关问题
1. MaxCompute将查询出来的数据写入到 oss 上(MaxCompute 的外部表),能控制生成的数量吗?
可以设置单个 Worker 读取MaxCompute 表数据的大小。可以参考一下 UNLOAD命令。
2. 创建外部表报错,AccessDenied The bucket you access does not belong to you.
MaxCompute外部表直接访问 OSS 的数据,需要您事先将 OSS 的数据相关权限赋给 MaxCompute 的访问账号,授权文档参考。
3. MaxCompute中如何使用 OSS 外部表读取 JSON 数据?
可参考本篇实践内容进行操作。
4. 基于外部表执行 SQL 作业时,运行慢,如何解决?
基于外部表执行 SQL 作业时,运行慢的常见情况如下:
- OSS 外部表中的 GZ 压缩文件读取慢
- 问题现象用户创建了一个 OSS 外部表,数据源为 OSS 中的GZ 压缩文件,大小为 200 GB。在读取数据过程中执行缓慢。
- 产生原因由于 Map 端执行计算的 Mapper 数量过少,所以 SQL 处理慢。
- 解决措施
- 对于结构化数据,您可以设置以下参数调整单个 Mapper 读取数据量的大小,加速 SQL 执行。 set odps.sql.mapper.split.size=256; #调整每个Mapper 读取 Table 数据的大小,单位是 MB。
- 对于非结构化数据,您需要查看 OSS 外部表路径下的 OSS 文件是否只有 1 个。如果只有 1 个,由于压缩方式下的非结构化数据不支持拆分,所以只能生产 1 个 Mapper,导致处理速度较慢。建议您在 OSS 对应的外部表路径下,将 OSS 大文件拆分为小文件,从而增加读取外部表生成的Mapper 数量,提升读取速度。
- 使用 SDK 搜索 MaxCompute 外部表数据速度慢
- 问题现象使用 SDK 搜索 MaxCompute 外部表数据速度慢。
- 解决措施外部表仅支持全量搜索,所以较慢,建议您改用 MaxCompute 内部表。
- 查询外部表 Tablestore 数据慢
- 问题现象查询外部表 Tablestore 的数据慢,同样的业务数据,1 个实时写入 Tablestore,1 个定时写入MaxCompute,两个表结构和数据量一样。查询 MaxCompute 内部表耗时远小于查询 Tablestore 外部表。
- 解决措施这种情况可能是对 1 份数据进行了多次计算,导致速度慢。相比每次从 Tablestore 远程读取数据,更高效快速的方法是先一次性把需要的数据导入到 MaxCompute 内部,转为MaxCompute 内部表,再进行查询。
5. 使用 OSS 外部表怎么样将多个小文件,输出为一个文件?
查看 Logview 日志,看 SQL 的执行计划,看最后一个是 Reducer 还是 Joiner, 如果是 Reducer 则设置参数为 set odps.stage.reducer.num=1, 如果是 Joiner,则设置为 set odps.stage.joiner.num =1。
>>快来点击免费下载《阿里云MaxCompute百问百答》了解更多详情!<<