Gera uma URL pré-assinada para um objeto no Object Storage Service (OSS), concedendo acesso temporário para upload (PUT) ou download (GET) do objeto via HTTP sem credenciais separadas.
Casos de uso
O MaxCompute oferece o recurso Object Table, que permite ao mecanismo de data warehouse acessar dados não estruturados e metadados armazenados no OSS. Para mais informações, consulte Object Table definition.
A Object Table armazena metadados de objetos do OSS em um caminho especificado. Use GET_SIGNED_URL_FROM_OSS para gerar dinamicamente uma URL pré-assinada para um objeto, permitindo uploads e downloads de arquivos. Para mais detalhes, consulte Generate a pre-signed URL to upload and download OSS objects.
Limitações
Crie Object Tables apenas usando o endpoint interno do OSS.
Esta função não oferece suporte à aceleração de consultas MaxQA. Inclua o comando
SET odps.mcqa.disable=true;na instrução SQL.Se um bucket do OSS tiver o recurso Block Public Access ativado, a função
GET_SIGNED_URL_FROM_OSSnão poderá gerar uma URL pré-assinada com acesso público. Verifique se as permissões do bucket permitem gerar e usar URLs pré-assinadas.
Sintaxe
STRING GET_SIGNED_URL_FROM_OSS (
STRING <full_object_table_name>,
STRING <key>
[, INT <timeToLiveSeconds>]
[, DATETIME <expiration>]
[, STRING <httpMethod>]
)
Parâmetros
|
Parâmetro |
Obrigatório |
Tipo |
Descrição |
Padrão |
|
full_object_table_name |
Sim |
STRING |
Caminho completo da Object Table no modelo de três camadas, incluindo os nomes do projeto e do schema. Exemplo: Ao selecionar a autenticação RoleARN durante a criação da tabela, o sistema gera automaticamente um token STS para acessar o OSS. |
Nenhum |
|
key |
Sim |
STRING |
Nome do objeto a ser acessado na Object Table. Para mais informações sobre o parâmetro key, consulte a descrição nos resultados retornados em View Object Table properties. |
Nenhum |
|
timeToLiveSeconds |
Não |
INT |
Tempo de vida da URL pré-assinada em segundos. Mínimo: 1 segundo. Máximo: 604.800 segundos (7 dias). Este parâmetro é mutuamente exclusivo com expiration. |
3.600 segundos |
|
expiration |
Não |
DATETIME |
Data e hora de expiração da URL pré-assinada. O valor deve estar entre 1 segundo e 604.800 segundos (7 dias) após o horário atual. Este parâmetro é mutuamente exclusivo com timeToLiveSeconds. |
3.600 segundos após o horário atual |
|
httpMethod |
Não |
STRING |
Método HTTP da URL gerada. Define se a operação será de download (leitura) ou upload (escrita) no OSS.
|
GET |
Valor retornado
Retorna a URL pré-assinada gerada como STRING.
Exemplos
O exemplo a seguir gera uma URL pré-assinada para baixar um objeto do OSS a partir de uma instância do Elastic Compute Service (ECS) na região China (Hangzhou).
Antes de executar o código abaixo, substitua project_name e schema_name pelos nomes reais do seu projeto e schema.
Etapa 1: Gerar uma URL de download
Faça login no console do OSS e envie o arquivo de teste signedget.txt para o diretório
object-table-test/object_table_folder. Para mais informações, consulte Upload files.-
Use um local client (odpscmd) ou crie um MaxCompute SQL node no DataWorks para criar uma Object Table e atualizar o cache de metadados.
-- Enable the three-layer model to support schemas in a MaxCompute project. 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 in the MaxCompute project. SET odps.sql.type.system.odps2=true; -- This function is not supported for MaxQA query acceleration. SET odps.mcqa.disable=true; -- Create an Object Table. CREATE OBJECT TABLE IF NOT EXISTS test_get_signed_url_from_oss LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/object-table-test/object_table_folder/'; -- Refresh the table cache. ALTER TABLE test_get_signed_url_from_oss REFRESH METADATA; -
Consulte os metadados na Object Table.
SELECT * FROM test_get_signed_url_from_oss;Saída esperada:
+---------------+------------+------------+---------------------+---------------+----------------------------------+--------------+------------+--------------------+ | key | size | type | last_modified | storage_class | etag | restore_info | owner_id | owner_display_name | +---------------+------------+------------+---------------------+---------------+----------------------------------+--------------+------------+--------------------+ | signedget.txt | 38 | Normal | 2025-06-04 01:36:52 | Standard | 96D8258845DAB51BC9B****6E61A2563 | NONE | 13**** | 13**** | +---------------+------------+------------+---------------------+---------------+----------------------------------+--------------+------------+--------------------+ -
Leia os dados do objeto usando a função GET_DATA_FROM_OSS.
SELECT STRING( GET_DATA_FROM_OSS( '<project_name>.<schema_name>.test_get_signed_url_from_oss', key ) ) FROM test_get_signed_url_from_oss;Saída esperada:
+----------------------------------------+ | _c0 | +----------------------------------------+ | test maxcompute download files by url | +----------------------------------------+ -
Consulte a Object Table e gere uma URL pré-assinada.
SELECT GET_SIGNED_URL_FROM_OSS( '<project_name>.<schema_name>.test_get_signed_url_from_oss', key) FROM test_get_signed_url_from_oss;Saída esperada:
+------------+ | _c0 | +------------+ | http://object-table-test.oss-cn-hangzhou-internal.aliyuncs.com/object_table_folder%2Fsignedget.txt?Expires=17490****&OSSAccessKeyId=STS.****&Signature=****&security-token=**** | +------------+
Etapa 2: Baixar o objeto do ECS
Acesse o console do ECS. No painel de navegação à esquerda, escolha .
Na região China (Hangzhou), selecione a instância desejada, clique em Remote Connection e conecte-se à instância usando o Workbench.
-
No terminal, execute os comandos abaixo para baixar o objeto do OSS:
-- Change the directory to /opt. cd /opt -- Download the OSS object by using the pre-signed URL. curl -o /opt/ecs_signed.txt "http://object-table-test.oss-cn-hangzhou-internal.aliyuncs.com/object_table_folder%2Fsignedget.txt?Expires=17490****&OSSAccessKeyId=STS.****&Signature=****&security-token=****"Saída:
[xxx] opt]# curl -o /opt/ecs_signed.txt "http://object-table-test.oss-cn-hangzhou-inxxx&SAccessKeyId=STS.xxx&Signature=xxx&security-token=CAIS3gJxxx xxx % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 38 100 38 0 0 263 0 --:--:-- --:--:-- --:--:-- 265 opt]# ls aliyun-security ecs_signed.txt [root@iZbp1al9u5z0axrqx50mptZ opt]# cat ecs_signed.txt test maxcompute download files by url xxx opt]#
Funções relacionadas
GET_SIGNED_URL_FROM_OSS é uma função de processamento de dados não estruturados. Para outras funções relacionadas, consulte Functions for processing unstructured data.