Este tópico apresenta exemplos de uso da Object Table para consultar, filtrar e processar dados não estruturados armazenados no Object Storage Service (OSS).
Faturamento
O modelo de faturamento varia conforme a operação:
|
Operação |
Modelo de faturamento |
Cálculo do volume de dados de entrada |
|
Atualizar metadados em cache |
Pagamento conforme o uso, modelo de tabela externa |
Quantidade de arquivos no OSS (não considera o tamanho dos arquivos) |
|
Visualizar, filtrar ou ordenar objetos |
Pagamento conforme o uso, modelo de tabela interna |
Metadados armazenados na Delta Table dentro do MaxCompute |
|
Chamar uma UDF para processar o conteúdo do arquivo |
Pagamento conforme o uso, modelo de tabela externa |
Tamanho real dos arquivos no OSS |
Use a filtragem por metadados para evitar a leitura desnecessária de arquivos em pastas do OSS durante as tarefas de processamento.
Para mais informações, consulte Object Table billing.
Pré-requisitos
Antes de começar, verifique se você tem:
Um bucket do OSS chamado
object-table-bucketcom uma pasta chamadaot_openlakeOs dados não estruturados do arquivo unstructured_data.zip carregados na pasta
ot_openlakeUm MaxCompute project com o schema feature enabled. Os exemplos usam o UID da conta
111740****241234, a regiãocn-shenzhene o nome do projetolakehouse_yunqi_demo_sz
Colunas de metadados disponíveis
Cada linha em uma Object Table representa um objeto do OSS. As colunas a seguir estão disponíveis para consultas, filtros e ordenação:
|
Coluna |
Tipo |
Descrição |
|
|
STRING |
Caminho relativo do objeto no local do OSS |
|
|
BIGINT |
Tamanho do objeto em bytes |
Criar uma 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-shenzhen-internal.aliyuncs.com/object-table-bucket/ot_openlake/';
Visualizar a Object Table
SET odps.namespace.schema=true;
SHOW TABLES;
O resultado retornado é o seguinte.
111740****241234:ot_openlake_demo
Visualizar a instrução CREATE TABLE
SET odps.namespace.schema=true;
SHOW CREATE TABLE ot_openlake_demo;
O resultado retornado é o seguinte.
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');
Atualizar metadados em cache
SET odps.namespace.schema=true;
ALTER TABLE ot_openlake_demo REFRESH METADATA;
Contar objetos na Object Table
SET odps.namespace.schema=true;
SELECT COUNT(*) AS ROW_COUNT FROM ot_openlake_demo;
O resultado retornado é o seguinte.
+---------+
|row_count|
+---------+
|4 |
+---------+
Consultar, filtrar e ordenar objetos
Cada exemplo a seguir aborda um cenário diferente de filtragem. Combine as condições conforme necessário.
Filtrar por extensão de arquivo:
SET odps.namespace.schema=true;
SELECT key, size FROM ot_openlake_demo
WHERE key LIKE '%.json';
Filtrar por tamanho:
SET odps.namespace.schema=true;
SELECT key, size FROM ot_openlake_demo
WHERE size > 100;
Filtrar por extensão e tamanho, com ordenação decrescente por tamanho:
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;
O resultado retornado é o seguinte.
+-----------------+-------+
|key | size |
+-----------------+-------+
|hex-char.json | 122 |
+-----------------+-------+
Chamar uma UDF para extrair texto de PDF
O fluxo de trabalho para extrair texto de um arquivo PDF no OSS consiste nas etapas a seguir:
Carregue o script da função definida pelo usuário (UDF) e seu pacote de dependências no projeto MaxCompute.
Registre a UDF.
Consulte a Object Table, passando a chave do objeto e o conteúdo binário para a UDF.
Etapa 1: Carregar e registrar a UDF
Baixe os arquivos binary_pdf2text.py e pdf_tools_cp37.tar.gz e execute o SQL a seguir para carregar os arquivos e registrar a UDF no seu projeto MaxCompute:
-- Upload files to the MaxCompute project.
ADD py binary_pdf2text.py -f;
ADD archive pdf_tools_cp37.tar.gz -f;
-- Register the UDF.
CREATE FUNCTION pdf2text AS binary_pdf2text.ExtractPDFText
USING 'binary_pdf2text.py, pdf_tools_cp37.tar.gz' -f;
Etapa 2: Extrair texto de um PDF
A consulta passa dois argumentos para pdf2text: a chave do objeto (seu caminho na Object Table) e o conteúdo binário obtido por GET_DATA_FROM_OSS. Para mais informações sobre GET_DATA_FROM_OSS, consulte Query object content for business computing.
Baixe o arquivo demoday.pdf e carregue-o na pasta ot_openlake. Em seguida, execute:
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;
O resultado retornado é o seguinte.
+------------+------------+------------+
| 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...
Próximos passos
No console do DataWorks, use o exemplo Process unstructured data based on OpenLake and Object Table disponível na DataWorks Gallery para explorar todos os recursos da Object Table.