Catégories :

Fonctions de chaîne et fonctions binaires (Général)

PARSE_URL

Renvoie une valeur OBJECT composée de tous les éléments (fragment, hôte, paramètres, chemin, port, requête, schéma) dans une URL/URI d’entrée valide.

Syntaxe

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

Arguments

Obligatoire :

string

Chaîne à analyser.

Facultatif :

permissive

Drapeau déterminant comment les erreurs d’analyse sont traitées :

  • Si la valeur est définie sur 0, les erreurs d’analyse entraînent l’échec de la fonction.

  • Si la valeur est définie sur 1, les erreurs d’analyse génèrent un objet dont le champ error est défini sur le message d’erreur correspondant (et aucun autre champ défini).

La valeur par défaut est 0.

Renvoie

La fonction renvoie une valeur de type OBJECT.

Si l’un des arguments d’entrée est NULL, la fonction renvoie NULL.

Lorsqu’une valeur OBJECT est renvoyée, elle contient les paires clé-valeur suivantes :

Clé

Valeur

fragment

Ancre qui pointe vers un emplacement.

host

Domaine (adresse d’un site web ou d’un serveur).

parameters

Valeurs transmises au site web ou au serveur.

path

Emplacement d’une ressource.

port

Port (point de terminaison de la connexion d’un processus ou d’un service).

query

Chaîne de requête transmise au site web ou au serveur.

scheme

Protocole.

Exemples

Les exemples suivants utilisent la fonction PARSE_URL.

Analyser des URLs dans les données de table

Créer une table et insérer des lignes :

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                                               |
+----+----------------------------------------------------+

La requête suivante montre les résultats de PARSE_URL pour les exemples d’URLs :

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                               |
+------------------------------------+

Cette requête montre l’hôte pour chaque exemple d’URL :

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                       |
+----------------------------+

Renvoyer les lignes où le port est 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 |
+----+----------------------------------------------------+

Renvoyer les lignes où l’hôte est 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/ |
+----+----------------------------+

Analyser des URLs non valides

Analyser une URL non valide qui manque le schéma. Définissez l’argument permissive sur 0 pour indiquer que la fonction échoue si l’entrée n’est pas valide :

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

Analyser une URL non valide, avec l’argument permissive défini sur 1 pour indiquer que la fonction renvoie une valeur OBJECT contenant le message d’erreur :

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"                        |
| }                                                        |
+----------------------------------------------------------+