Kategorien:

Zeichenfolgen- und Binärfunktionen (Allgemein)

PARSE_URL

Gibt einen OBJECT-Wert zurück, der aus allen Komponenten (Fragment, Host, Parameter, Pfad, Port, Abfrage, Schema) in einer gültigen Eingabe-URL/URI besteht.

Syntax

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

Argumente

Benötigt:

string

Zu analysierende Zeichenfolge.

Optional:

permissive

Flag, das darüber bestimmt, wie Analysefehler behandelt werden:

  • Bei Auswahl von 0 führen Analysefehler dazu, dass die Funktion fehlschlägt.

  • Bei Auswahl von 1 wird bei Analysefehlern ein Objekt erzeugt, in dem das Feld error auf die entsprechende Fehlermeldung (und keine anderen Felder) gesetzt ist.

Der Standardwert ist 0.

Rückgabewerte

Die Funktion gibt einen Wert vom Typ OBJECT zurück.

Wenn eines der Eingabeargumente NULL ist, gibt die Funktion NULL zurück.

Wenn ein OBJECT-Wert zurückgegeben wird, enthält er die folgenden Schlüssel-Wert-Paare:

Schlüssel

Wert

fragment

Anker, der auf einen Speicherort verweist.

host

Domäne (Adresse einer Website oder eines Servers).

parameters

Werte, die an die Website oder den Server übergeben werden.

path

Speicherort einer Ressource.

port

Port (Verbindungsendpunkt für einen Prozess oder Dienst).

query

Abfragezeichenfolge, die an die Website oder den Server übergeben wird.

scheme

Das Protokoll.

Beispiele

Die folgenden Beispiele verwenden die Funktion PARSE_URL.

URLs in Tabellendaten analysieren

Erstellen Sie eine Tabelle, und fügen Sie Zeilen ein:

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

Die folgende Abfrage zeigt die Ergebnisse von PARSE_URL für Beispiel-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                               |
+------------------------------------+

Diese Abfrage zeigt den Host für jede Beispiel-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                       |
+----------------------------+

Gibt die Zeilen zurück, in denen der Port 4345 ist:

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

Gibt die Zeilen zurück, in denen der Host www.snowflake.com ist:

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

Ungültige URLs analysieren

Analysieren Sie eine ungültige URL, bei der das Schema fehlt. Setzen Sie das Argument permissive auf 0, um anzugeben, dass die Funktion fehlschlägt, wenn die Eingabe ungültig ist:

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

Analysieren Sie eine ungültige URL, wobei das Argument permissive auf 1 gesetzt ist, um anzuzeigen, dass die Funktion einen OBJECT-Wert zurückgibt, der die folgende Fehlermeldung enthält:

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