A função GET_DATA_FROM_OSS lê todo ou parte do conteúdo de um objeto do OSS e o retorna como um valor BINARY.
O recurso Object Table do MaxCompute permite que o mecanismo de computação acesse dados não estruturados e metadados armazenados no Object Storage Service (OSS). Uma Object Table armazena metadados de objetos do OSS em um caminho específico. Utilize GET_DATA_FROM_OSS para carregar dinamicamente o conteúdo binário de um objeto do OSS especificado. Para obter detalhes sobre Object Tables, consulte Definição de OBJECT TABLE.
Sintaxe
BINARY GET_DATA_FROM_OSS (
STRING <full_object_table_name>,
STRING <key>
[, BIGINT <offset>]
[, BIGINT <length>]
[, STRING <object_not_found_policy>]
)
Parâmetros
|
Parâmetro |
Obrigatório |
Tipo de dado |
Descrição |
Padrão |
|
|
Sim |
STRING |
Caminho completo para a OBJECT TABLE no modelo de três camadas, incluindo os nomes do Project e do Schema, por exemplo, |
Nenhum |
|
|
Sim |
STRING |
Chave (nome) do objeto do OSS na Object Table. Para obter o valor exato, consulte o campo |
Nenhum |
|
|
Não |
BIGINT |
Posição em bytes onde a leitura deve começar. Deve ser >= 0. |
|
|
|
Não |
BIGINT |
Quantidade de bytes a serem lidos. |
|
|
|
Não |
STRING |
Comportamento adotado quando uma chave de objeto existe no cache de metadados, mas o objeto foi excluído do OSS. Consulte a tabela abaixo para valores válidos. |
|
Valores de object_not_found_policy
Este parâmetro se aplica quando o cache de metadados contém uma chave que não existe mais no OSS — por exemplo, porque o objeto foi excluído após a última execução de ALTER TABLE ... REFRESH METADATA.
|
Valor |
Gera exceção |
Retorna NULL |
Registra aviso |
Observações |
|
|
Não |
Sim |
Não |
Padrão. Retorna null silenciosamente. |
|
|
Sim |
— |
Não |
Encerra a tarefa atual imediatamente. |
|
|
Não |
Sim |
Sim |
Adiciona uma entrada de log para cada objeto ausente. Pode afetar o desempenho geral da tarefa se houver muitos objetos faltando. |
Valor de retorno
Retorna um valor do tipo BINARY.
Exemplos
Nos exemplos a seguir, substitua <project_name> pelo nome real do seu projeto MaxCompute.
Pré-requisitos
Antes de executar os exemplos, conclua estas etapas de configuração.
Etapa 1: Carregar dados de teste no OSS
Faça login no console do OSS e carregue o arquivo de teste signedget.txt na pasta object-table-test/object_table_folder. Para instruções de upload, consulte Carregar arquivos.
Etapa 2: Criar uma Object Table
Utilizando o cliente local (odpscmd) ou um nó SQL do MaxCompute no DataWorks, execute o SQL a seguir. Este exemplo nomeia a Object Table como ot_demo_day. Para mais detalhes, consulte Criar uma OBJECT TABLE.
-- Enable the three-layer model (required for Object Table)
SET odps.namespace.schema=true;
-- Select the MaxCompute project
USE <project_name>;
-- Select the schema
USE SCHEMA <schema_name>;
-- Enable the 2.0 data type system (required for Object Table)
SET odps.sql.type.system.odps2=true;
-- Create the 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';
Etapa 3: Atualizar o cache de metadados
ALTER TABLE ot_demo_day REFRESH METADATA;
Exemplo 1: Ler todo o conteúdo do objeto
As instruções a seguir leem o conteúdo completo da Object Table <project_name>.default.ot_demo_day. Todas as seis formas são equivalentes — cada uma define offset como 0, length como -1 e object_not_found_policy como OUTPUT_NULL por padrão.
-- Complete form with all parameters explicit
SELECT GET_DATA_FROM_OSS('<project_name>.default.ot_demo_day', key, 0, -1, 'OUTPUT_NULL') FROM ot_demo_day;
-- The following statements are equivalent to the one above
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;
Resultado:
+------+
| _c0 |
+------+
| test=20maxcompute=20download=20files=20by=20url=20 |
+------+
Exemplo 2: Converter saída para STRING
Como GET_DATA_FROM_OSS retorna BINARY, envolva o resultado na função STRING() para trabalhar com o conteúdo como texto.
SELECT STRING(
GET_DATA_FROM_OSS('<project_name>.default.ot_demo_day', key, 0, -1, 'OUTPUT_NULL')
)
FROM ot_demo_day;
Resultado:
+-----+
| _c0 |
+-----+
| test maxcompute download files by url |
+-----+
Funções relacionadas
A função GET_DATA_FROM_OSS faz parte das funções de processamento de dados não estruturados do MaxCompute. Para a lista completa, consulte Funções para processamento de dados não estruturados.