Como usar dados binários¶
A utilidade e a flexibilidade do tipo de dados BINARY é melhor demonstrada pelo exemplo. Este tópico fornece exemplos práticos de tarefas que envolvem o tipo de dados BINARY e seus três esquemas de codificação.
Conversão entre hexadecimal e base64¶
O tipo de dados BINARY pode ser usado como um passo intermediário na conversão entre cadeias de caracteres hexadecimais e base64.
Converta de hexadecimal para base64 usando TO_CHAR:
Converta de base64 em hexadecimal:
Conversão entre texto e bytes UTF-8¶
As cadeias de caracteres do Snowflake são compostas por caracteres Unicode, enquanto os valores binários são compostos por bytes. Ao converter uma cadeia de caracteres em um valor binário com o formato UTF-8, é possível manipular diretamente os bytes que compõem os caracteres Unicode.
Converta cadeias de caracteres com um único caractere em sua representação UTF-8 em bytes usando TO_BINARY:
Converta uma sequência de bytes UTF-8 em uma cadeia de caracteres usando TO_CHAR , TO_VARCHAR:
Como obter o resumo MD5 em base64¶
Converta o resumo MD5 binário em uma cadeia de caracteres base64 usando TO_CHAR:
Conversão de binário com formato variável¶
Converta cadeias de caracteres em valores binários usando um formato binário extraído da cadeia de caracteres. A instrução inclui as funções TRY_TO_BINARY e SPLIT_PART:
Experimente vários formatos para a conversão:
Nota
Como as consultas acima usam TRY_TO_BINARY, o resultado será NULL se o formato não for reconhecido ou se a cadeia de caracteres não puder ser analisada com o formato fornecido.
Converta os resultados do exemplo anterior de volta para cadeias de caracteres usando SUBSTR e DECODE:
Decodificação personalizada com JavaScript UDF¶
O tipo de dados BINARY permite o armazenamento de dados arbitrários. Como JavaScript UDFs suportam o tipo de dados via Uint8Array (consulte Introdução a UDFs de JavaScript), é possível implementar uma lógica de decodificação personalizada em JavaScript. Essa não é a maneira mais eficiente de trabalhar, mas é muito poderosa.
Crie uma função que decodifique com base no primeiro byte: