A função GET_BLOB_METADATA() recupera os metadados de um blob. Use funções JSON para extrair campos específicos do objeto JSON retornado.
Uso comum
GET_JSON_OBJECT(GET_BLOB_METADATA(blob_expr), '$.field_name');
Notas de uso
A função
GET_BLOB_METADATA()aceita um único parâmetroblob.Permite extrair campos do objeto JSON retornado.
Os campos comuns incluem: content_type, content_length, checksum, is_compressed, content_encoding, storage_type e blob_storage_tier.
O campo
content_lengthrepresenta o tamanho em bytes e é adequado para validação comlengthb().O campo
is_compressedindica se o conteúdo está compactado, enquantocontent_encodingespecifica a codificação de compactação.A função retorna
NULLse o blob de entrada forNULLou estiver vazio.
Sintaxe
JSON GET_BLOB_METADATA(blob_expr:BLOB)
Parâmetros
blob_expr (Obrigatório): Uma expressão do tipo BLOB.
A função aceita um único parâmetro
blob.O parâmetro deve ser uma expressão
blob.As fontes comuns incluem a função
to_blob(...), uma colunablobem uma tabela ou uma colunablobgerada por uma instruçãoCREATE TABLE AS SELECT(CTAS) ouINSERT SELECT.
Exemplos:
GET_BLOB_METADATA(to_blob('abcdef'))
GET_BLOB_METADATA(to_blob('hello world', 'text/plain'))
GET_BLOB_METADATA(b)
Valor retornado
Retorna um objeto JSON contendo os metadados. A tabela a seguir descreve os campos comuns nesse objeto.
Geralmente, você extrai o valor de um campo específico em vez de todo o objeto.
Nome do campo | Descrição |
content_type | O tipo de conteúdo especificado na criação do blob. Os casos de uso comuns incluem:
|
content_length | O tamanho do conteúdo do blob em bytes. Por exemplo:
|
checksum | Uma soma de verificação do conteúdo. Use este campo para determinar se há consistência no conteúdo ou no objeto de armazenamento. Retorna |
is_compressed | Indica se o blob está armazenado em um formato compactado. As observações atuais mostram:
Esses exemplos não representam todas as regras de compactação possíveis. |
content_encoding | O nome da codificação de compactação.
|
storage_type | O tipo de armazenamento do blob. Este campo é útil para solucionar problemas relacionados ao formato de armazenamento do blob. |
blob_storage_tier | A camada de armazenamento do blob. Retorna |
Tratamento de NULL
-
Quando o parâmetro de entrada é
NULLou um blob vazioA função
GET_BLOB_METADATA(blob_expr)retornaNULLnos seguintes cenários:O próprio parâmetro de entrada é
NULL.O blob está vazio.
O blob não contém conteúdo legível válido.
-- Returns: NULL SELECT GET_BLOB_METADATA(to_blob(CAST(null as binary))); -- In this case, if you try to extract a field, the result is also NULL. SELECT get_json_object(GET_BLOB_METADATA(to_blob(CAST(null as binary))), '$.content_length'); -
Quando um campo no resultado retornado é
NULLMesmo que
GET_BLOB_METADATA(blob_expr)não retorneNULL, alguns de seus campos podem ser nulos.Os cenários comuns incluem:
content_type: O valor éNULLse você não especificar um tipo de conteúdo.checksum: ÉNULLse não houver uma soma de verificação correspondente disponível.content_encoding: ÉNULLquando o conteúdo não está compactado.blob_storage_tier: ÉNULLse não houver informações da camada de armazenamento correspondente.
-
Os dois cenários para valores NULL têm significados distintos:
A função retorna
NULLporque o blob não tem metadados a retornar.Um campo é
NULL: Os metadados existem, mas o campo não tem valor no momento.
Exemplos
Leitura direta de metadados
SELECT GET_BLOB_METADATA(to_blob('abcdef'));
-- Return value:
{
"checksum": null,
"content_type": null,
"storage_type": "MEMORY",
"is_compressed": false,
"content_length": 6,
"content_encoding": null,
"blob_storage_tier": "STANDARD"
}
Leitura dos três campos mais comuns
Essa abordagem é útil para verificar rapidamente o tipo de conteúdo, o tamanho em bytes e o status de compactação.
SELECT
get_json_object(GET_BLOB_METADATA(to_blob('abcdef')), '$.content_type'),
get_json_object(GET_BLOB_METADATA(to_blob('abcdef')), '$.content_length'),
get_json_object(GET_BLOB_METADATA(to_blob('abcdef')), '$.is_compressed');
-- Return value:
+------------+------------+------------+
| _c0 | _c1 | _c2 |
+------------+------------+------------+
| NULL | 6 | false |
+------------+------------+------------+
Validação do tipo de conteúdo gravado pela aplicação
SELECT get_json_object(
GET_BLOB_METADATA(to_blob('{"key":"value"}', 'application/json')),
'$.content_type'
);
-- This confirms that the specified content type was correctly set.
+--------------------+
| _c0 |
+--------------------+
| application/json |
+--------------------+
Validação do tamanho do conteúdo
SELECT cast(
get_json_object(GET_BLOB_METADATA(to_blob('中文测试')), '$.content_length') as bigint
);
-- Return value:
+------------+
| _c0 |
+------------+
| 12 |
+------------+
Validação de consistência com LENGTHB()**
SELECT
LENGTHB(TO_BLOB('abcdef')),
CAST(GET_JSON_OBJECT(GET_BLOB_METADATA(TO_BLOB('abcdef')), '$.content_length') AS BIGINT);
-- Return value:
+------------+------------+
| _c0 | _c1 |
+------------+------------+
| 6 | 6 |
+------------+------------+
Verificação da compactação de blobs persistidos
-
Prepare uma tabela de teste.
-- Create a table that contains a BLOB column. CREATE TABLE blob_table2 ( col1 INT , col2 BLOB ) TBLPROPERTIES ( "table.format.version"="2" ); -- Write data to the table. INSERT INTO blob_table2 VALUES (1, to_blob(repeat('aaa', 1000), 'application/json')); -- Read data from the table. SELECT col1,read_blob(col2) FROM blob_table2; -
Consulte o status de compactação.
SELECT get_json_object(GET_BLOB_METADATA(col2), '$.is_compressed') FROM blob_table2; -- Return value: +------+ | _c0 | +------+ | true | +------+is_compressedindica se o blob está atualmente armazenado em um formato compactado.
Visualização da codificação de compactação
-
Prepare uma tabela de teste.
-- Create a table that contains a BLOB column. CREATE TABLE blob_table2 ( col1 INT , col2 BLOB ) TBLPROPERTIES ( "table.format.version"="2" ); -- Write data to the table. INSERT INTO blob_table2 VALUES (1, to_blob(repeat('aaa', 1000), 'application/json')); -- Read data from the table. SELECT col1,read_blob(col2) FROM blob_table2; -
Visualize a codificação de compactação.
SELECT get_json_object(GET_BLOB_METADATA(col2), '$.is_compressed'), get_json_object(GET_BLOB_METADATA(col2), '$.content_encoding') FROM blob_table2; -- Return value: +------+------+ | _c0 | _c1 | +------+------+ | true | ZSTD | +------+------+Quando o conteúdo não está compactado:
content_encodingéNULLDurante a compactação:
content_encodingretorna o nome específico do codec.
Visualização das informações de armazenamento
-
Prepare uma tabela de teste.
-- Create a table that contains a BLOB column. CREATE TABLE blob_table2 ( col1 INT , col2 BLOB ) TBLPROPERTIES ( "table.format.version"="2" ); -- Write data to the table. INSERT INTO blob_table2 VALUES (1, to_blob(repeat('aaa', 1000), 'application/json')); -- Read data from the table. SELECT col1,read_blob(col2) FROM blob_table2; -
Visualize as informações de armazenamento.
SELECT get_json_object(GET_BLOB_METADATA(col2), '$.storage_type'), get_json_object(GET_BLOB_METADATA(col2), '$.blob_storage_tier') FROM blob_table2; -- Return value: +-------+----------+ | _c0 | _c1 | +-------+----------+ | PANGU | STANDARD | +-------+----------+
Uso com outras funções
Use com to_blob para verificar se um blob criado contém os metadados esperados.
Use com LENGTHB para validar se o tamanho nos metadados corresponde ao tamanho real do conteúdo em bytes.
Use com read_blob;
read_blobinspeciona o conteúdo, enquantoGET_BLOB_METADATAinspeciona seus metadados.Use com GET_JSON_OBJECT. Esse é o uso mais comum e recomendado.