カテゴリ:

文字列とバイナリ関数 (一般)

PARSE_URL

有効な入力 URL/URI のすべてのコンポーネント(フラグメント、ホスト、パラメーター、パス、ポート、クエリ、スキーム)で構成される OBJECT 値を返します。

構文

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

引数

必須:

string

解析する文字列です。

オプション:

permissive

解析エラーの処理方法を決定するフラグです。

  • 0 に設定すると、構文解析エラーで関数が失敗します。

  • 1 に設定すると、解析エラーの結果、オブジェクトは error フィールドがそれぞれのエラーメッセージに設定されます(他のフィールドは設定されない)。

デフォルト値は 0 です。

戻り値

この関数は、 OBJECT 型の値を返します。

入力引数のいずれかが NULL の場合、関数は NULL を返します。

OBJECT 値が返される場合、その値には以下のキーと値のペアが含まれます。

キー

fragment

ある場所をポイントするアンカー。

host

ドメイン(ウェブサイトやサーバーのアドレス)。

parameters

ウェブサイトまたはサーバーに渡される値。

path

リソースの位置。

port

ポート(プロセスやサービスの接続エンドポイント)。

query

ウェブサイトまたはサーバーに渡されるクエリ文字列。

scheme

プロトコル。

以下の例では、 PARSE_URL 関数を使用しています。

テーブルデータの解析 URLs

テーブルを作成して行を挿入します。

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

次のクエリは、サンプル URLs に対する PARSE_URL の結果を示しています。

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

このクエリは、各サンプル 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                       |
+----------------------------+

ポートが 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 |
+----+----------------------------------------------------+

ホストが 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/ |
+----+----------------------------+

無効な URLs 解析

スキームが欠落している無効な URL を解析します。入力が無効な場合に関数が失敗することを示すために、引数 permissive0 を設定します。

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

無効な URL を解析します。 permissive 引数が 1 に設定され、関数がエラーメッセージを含む OBJECT 値を返すことを示します。

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