GET_DATA_FROM_OSS函数用于读取一个对象的部分或全部内容,并以二进制形式返回。
命令格式
BINARY GET_DATA_FROM_OSS (
STRING <full_object_table_name>,
STRING <key>
[, BIGINT <offset>]
[, BIGINT <length>]
[, STRING <object_not_found_policy>]
)
参数说明
参数 | 是否必填 | 数据类型 | 说明 | 默认值 |
full_object_table_name | 是 | STRING | 三层模型下,完整的OBJECT TABLE路径,包括Project和Schema名称,如 如果在建表时选择了RoleARN的认证方式,该参数将协助用户自动生成访问OSS的STS Token。 | 无 |
key | 是 | STRING | 即被访问对象在该Object Table中的名称。详情请参见查看OBJECT TABLE属性返回结果中的key参数说明。 | 无 |
offset | 否 | BIGINT | 表示读取对象内容的起始位置,取值大于等于0。 | 默认为0,即从头开始读取。 |
length | 否 | BIGINT | 需要读取的字节数。 | 默认值为-1,即不限制长度。 |
object_not_found_policy | 否 | STRING | 表示缓存数据中存在某个对象的key,但在实际的OSS中该对象已不存在时,MaxCompute返回当前函数调用结果的方式。取值如下:
| 默认值为OUTPUT_NULL。 |
返回值说明
返回BINARY类型。
使用示例
下述示例中,需要将project_name参数替换为实际的MaxCompute项目名称。
数据准备
登录OSS控制台,上传测试数据signedget.txt至
object-table-test/object_table_folder
目录下。具体操作请参见上传文件。使用本地客户端(odpscmd),或在DataWorks中创建MaxCompute SQL节点,以创建Object Table并刷新元数据信息缓存。详情请参见创建OBJECT TABLE。本例中创建的OBJECT TABLE名称为
ot_demo_day
。-- Object Table在MaxCompute项目中支持Schema功能,开启三层模型。 SET odps.namespace.schema=true; -- 选择对应MaxCompute项目。 USE <project_name>; -- 选择对应的schema。 USE SCHEMA <schema_name>; -- Object Table在MaxCompute项目中支持2.0数据类型系统。 SET odps.sql.type.system.odps2=true; -- 创建Object Table。 CREATE OBJECT TABLE ot_demo_day WITH serdeproperties ( 'odps.properties.rolearn'='acs:ram::xxxxxx:role/aliyunodpsdefaultrole') LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/object-table-test/object_table_folder'; -- 刷新表缓存。 ALTER TABLE ot_demo_day REFRESH METADATA;
示例1
读取Object Table的全部内容,并以二进制形式返回。默认Object Table的完整路径为<project_name>.default.ot_demo_day
,不同参数组合方式如下。
-- 最完整形式。
SELECT GET_DATA_FROM_OSS('<project_name>.default.ot_demo_day', key, 0, -1, 'OUTPUT_NULL') FROM ot_demo_day;
-- 以下写法均与get_data_from_oss('<project_name>.default.ot_demo_day', key, 0, -1, 'OUTPUT_NULL')等价。
SELECT GET_DATA_FROM_OSS('<project_name>.default.ot_demo_day', key) FROM ot_demo_day;
SELECT GET_DATA_FROM_OSS('<project_name>.default.ot_demo_day', key, 0) FROM ot_demo_day;
SELECT GET_DATA_FROM_OSS('<project_name>.default.ot_demo_day', key, 0, -1) FROM ot_demo_day;
SELECT GET_DATA_FROM_OSS('<project_name>.default.ot_demo_day', key, 'OUTPUT_NULL') FROM ot_demo_day;
SELECT GET_DATA_FROM_OSS('<project_name>.default.ot_demo_day', key, 0, 'OUTPUT_NULL') FROM ot_demo_day;
返回结果如下:
+------+
| _c0 |
+------+
| test=20maxcompute=20download=20files=20by=20url=20 |
+------+
示例2
如果需要将GET_DATA_FROM_OSS
函数的结果输出为STRING
类型,可以嵌套一层STRING函数。
SELECT STRING(
GET_DATA_FROM_OSS('<project_name>.default.ot_demo_day', key, 0, -1, 'OUTPUT_NULL')
)
FROM ot_demo_day;
返回结果如下:
+-----+
| _c0 |
+-----+
| test maxcompute download files by url |
+-----+
相关函数
GET_DATA_FROM_OSS函数属于非结构化处理函数,更多非结构化处理相关函数请参见非结构化处理函数。