本文为您介绍如何使用Object Table对数据湖存储中的非结构化数据及其元信息进行访问。
使用说明
您可以通过本文相关示例来直接试用Object Table访问数据湖存储中非结构化数据及其元信息能力。
您也可以在DataWorks控制台,通过DataWorks Gallery中的示例基于OpenLake和Object Table的非结构化数据处理来完整的试用Object Table的能力。
费用说明
刷新OBJECT TABLE缓存数据任务,输入数据量与OSS上的文件数量相关,与OSS上的文件实际大小无关。按量付费模式参照外部表按量付费计费规则。
查看OBJECT TABLE中的对象数量及查询过滤排序任务,实质上是对MaxCompute内Delta Table数据进行分析。按量付费模式参照普通表按量付费计算规则。
调用UDF获取PDF文本的内容任务,输入数据量与OSS上的文件实际大小相关。您可以通过对OBJECT TABLE中的元数据进行过滤,从而减少非结构化数据处理任务中不需要读取的文件。按量付费模式参照外部表按量付费计费规则。
前提条件
已完成OSS Bucket的创建,Bucket名称如:
object-table-bucket
,新建目录名称:ot_openlake
。已完成上传非结构化数据unstruct data.zip(解压后文件)至OSS Bucket为
object-table-bucket
的ot_openlake
目录下。已完成MaxCompute云栖邀测项目的创建。例如:阿里云账号(主账号)的UID为
111740****241234
,所属地域为华南1(深圳)region="cn-shengzhen"
,项目名称为lakehouse_yunqi_demo_sz
。详情请参见创建云栖邀测项目。
创建OBJECT TABLE
SET odps.namespace.schema=true;
DROP TABLE IF EXISTS lakehouse_yunqi_demo_sz.default.ot_openlake_demo;
CREATE OBJECT TABLE lakehouse_yunqi_demo_sz.default.ot_openlake_demo
WITH serdeproperties (
'odps.properties.rolearn'='acs:ram::111740****241234:role/aliyunodpsdefaultrole')
LOCATION 'oss://oss-cn-shengzhen-internal.aliyuncs.com/object-table-bucket/ot_openlake/';
查看OBJECT TABLE
SET odps.namespace.schema=true;
SHOW TABLES;
返回结果如下。
111740****241234:ot_openlake_demo
查看OBJECT TABLE建表语句
SET odps.namespace.schema=true;
SHOW CREATE TABLE ot_openlake_demo;
返回结果如下。
CREATE OBJECT TABLE IF NOT EXISTS lakehouse_yunqi_demo_sz.`default`.ot_openlake_demo
WITH SERDEPROPERTIES (
'serialization.format'='1',
'odps.properties.rolearn'='acs:ram::111740****241234:role/aliyunodpsdefaultrole')
LOCATION 'oss://oss-cn-shenzhen-internal.aliyuncs.com/object-table-bucket/ot_openlake/'
TBLPROPERTIES (
'last_modified_time'='1726564699',
'transient_lastDdlTime'='1726564699',
'metadata.cache.mode'='manual',
'metadata.staleness.seconds'='3600');
刷新OBJECT TABLE缓存数据
SET odps.namespace.schema=true;
ALTER TABLE ot_openlake_demo REFRESH METADATA;
查看OBJECT TABLE中对象数量
SET odps.namespace.schema=true;
SELECT COUNT(*) AS ROW_COUNT FROM ot_openlake_demo;
返回结果如下。
+---------+
|row_count|
+---------+
|4 |
+---------+
查询过滤排序数据
按大小和文件后缀过滤再排序。
SET odps.namespace.schema=true;
SELECT key,size FROM ot_openlake_demo
WHERE key LIKE '%.json'
AND size > 100
ORDER BY size
DESC limit 10;
返回结果如下。
+-----------------+-------+
|key | size |
+-----------------+-------+
|hex-char.json | 122 |
+-----------------+-------+
调用UDF获取PDF文本
准备binary_pdf2text.py的UDF函数,试用工具包pdf_tools_cp37.tar.gz提取PDF中的文本数。
-- 在控制台上传文件至maxcompute项目 ADD py binary_pdf2text.py -f; ADD archive pdf_tools_cp37.tar.gz -f; -- 注册UDF函数 CREATE FUNCTION pdf2text AS binary_pdf2text.ExtractPDFText USING 'binary_pdf2text.py, pdf_tools_cp37.tar.gz' -f;
调用
pdf2text
UDF函数,将PDF中的内容提取成文本。SET odps.namespace.schema=true; SET odps.sql.python.version=cp37; SELECT key, size, get_json_object( pdf2text( key, GET_DATA_FROM_OSS("lakehouse_yunqi_demo_sz.default.ot_openlake_demo", key) ),'$.text.0' ) AS text FROM ot_openlake_demo WHERE ends_with(cast(key as string), 'demoday.pdf') = true;
返回结果如下。
+------------+------------+------------+ | key | size | text | +------------+------------+------------+ | demoday.pdf | 261567 | Simple Home Styling Simple Home Styling Easy Decorating To get started, just tap or click this placeholder text and begin typing. You can view and edit this document on your Mac, iPad, iPhone, or on...