Categorias:

Funções de cadeia de caracteres e binários (General)

PARSE_URL

Retorna um valor OBJECT que consiste em todos os componentes (fragmento, host, parâmetros, caminho, porta, consulta, esquema) em um URL/URI de entrada válida.

Sintaxe

PARSE_URL(<string>, [<permissive>])
Copy

Argumentos

Obrigatório:

string

A cadeia de caracteres a ser analisada.

Opcional:

permissive

Sinalizador que determina como os erros de análise são tratados:

  • Se definido como 0, os erros de análise causam falha na função.

  • Se definido como 1, os erros de análise resultam em um objeto com o campo error definido como a respectiva mensagem de erro (e nenhum outro campo definido).

O valor padrão é 0.

Retornos

A função retorna um valor do tipo OBJECT.

Se algum argumento de entrada for NULL, a função retornará NULL.

Quando um valor OBJECT é retornado, ele contém os seguintes pares chave-valor:

Chave

Valor

fragment

Uma âncora que aponta para um local.

host

O domínio (endereço de um site ou servidor).

parameters

Valores passados ao site ou servidor.

path

O local de um recurso.

port

A porta (ponto de extremidade de conexão de um processo ou serviço).

query

Uma cadeia de caracteres de consulta passada ao site ou servidor.

scheme

O protocolo.

Exemplos

Os exemplos a seguir usam a função PARSE_URL.

Análise de URLs nos dados de tabela

Criar uma tabela e inserir linhas:

CREATE OR REPLACE TABLE parse_url_test (id INT, sample_url VARCHAR);

INSERT INTO parse_url_test VALUES
  (1, 'mailto:abc@xyz.com'),
  (2, 'https://www.snowflake.com/'),
  (3, 'http://USER:PASS@EXAMPLE.INT:4345/HELLO.PHP?USER=1'),
  (4, NULL);

SELECT * FROM parse_url_test;
Copy
+----+----------------------------------------------------+
| ID | SAMPLE_URL                                         |
|----+----------------------------------------------------|
|  1 | mailto:abc@xyz.com                                 |
|  2 | https://www.snowflake.com/                         |
|  3 | http://USER:PASS@EXAMPLE.INT:4345/HELLO.PHP?USER=1 |
|  4 | NULL                                               |
+----+----------------------------------------------------+

A consulta a seguir mostra os resultados de PARSE_URL para os URLs de amostra:

SELECT PARSE_URL(sample_url) FROM parse_url_test;
Copy
+------------------------------------+
| PARSE_URL(SAMPLE_URL)              |
|------------------------------------|
| {                                  |
|   "fragment": null,                |
|   "host": null,                    |
|   "parameters": null,              |
|   "path": "abc@xyz.com",           |
|   "port": null,                    |
|   "query": null,                   |
|   "scheme": "mailto"               |
| }                                  |
| {                                  |
|   "fragment": null,                |
|   "host": "www.snowflake.com",     |
|   "parameters": null,              |
|   "path": "",                      |
|   "port": null,                    |
|   "query": null,                   |
|   "scheme": "https"                |
| }                                  |
| {                                  |
|   "fragment": null,                |
|   "host": "USER:PASS@EXAMPLE.INT", |
|   "parameters": {                  |
|     "USER": "1"                    |
|   },                               |
|   "path": "HELLO.PHP",             |
|   "port": "4345",                  |
|   "query": "USER=1",               |
|   "scheme": "http"                 |
| }                                  |
| NULL                               |
+------------------------------------+

Esta consulta mostra o host de cada URL de amostra:

SELECT PARSE_URL(sample_url):host FROM parse_url_test;
Copy
+----------------------------+
| PARSE_URL(SAMPLE_URL):HOST |
|----------------------------|
| null                       |
| "www.snowflake.com"        |
| "USER:PASS@EXAMPLE.INT"    |
| NULL                       |
+----------------------------+

Retorna as linhas em que a porta é 4345:

SELECT *
  FROM parse_url_test
  WHERE PARSE_URL(sample_url):port = '4345';
Copy
+----+----------------------------------------------------+
| ID | SAMPLE_URL                                         |
|----+----------------------------------------------------|
|  3 | http://USER:PASS@EXAMPLE.INT:4345/HELLO.PHP?USER=1 |
+----+----------------------------------------------------+

Retorne as linhas em que o host é www.snowflake.com:

SELECT *
  FROM parse_url_test
  WHERE PARSE_URL(sample_url):host = 'www.snowflake.com';
Copy
+----+----------------------------+
| ID | SAMPLE_URL                 |
|----+----------------------------|
|  2 | https://www.snowflake.com/ |
+----+----------------------------+

Análise de URLs inválidos

Analisar um URL inválido que não está no esquema. Defina o argumento permissive como 0 para indicar que a função falhará se a entrada for inválida:

SELECT PARSE_URL('example.int/hello.php?user=12#nofragment', 0);
Copy
100139 (22000): Error parsing URL: scheme not specified

Analise um URL inválido, com o argumento permissive definido como 1 para indicar que a função retorna um valor OBJECT com a mensagem de erro:

SELECT PARSE_URL('example.int/hello.php?user=12#nofragment', 1);
Copy
+----------------------------------------------------------+
| PARSE_URL('EXAMPLE.INT/HELLO.PHP?USER=12#NOFRAGMENT', 1) |
|----------------------------------------------------------|
| {                                                        |
|   "error": "scheme not specified"                        |
| }                                                        |
+----------------------------------------------------------+