- Categorias:
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>])
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 campoerror
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 |
---|---|
|
Uma âncora que aponta para um local. |
|
O domínio (endereço de um site ou servidor). |
|
Valores passados ao site ou servidor. |
|
O local de um recurso. |
|
A porta (ponto de extremidade de conexão de um processo ou serviço). |
|
Uma cadeia de caracteres de consulta passada ao site ou servidor. |
|
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;
+----+----------------------------------------------------+
| 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;
+------------------------------------+
| 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;
+----------------------------+
| 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';
+----+----------------------------------------------------+
| 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';
+----+----------------------------+
| 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);
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);
+----------------------------------------------------------+
| PARSE_URL('EXAMPLE.INT/HELLO.PHP?USER=12#NOFRAGMENT', 1) |
|----------------------------------------------------------|
| { |
| "error": "scheme not specified" |
| } |
+----------------------------------------------------------+