PARSE_URL

PARSE_URL

유효한 입력 URL/URI에서 모든 구성 요소(fragment, host, parameters, path, port, query, scheme)로 이루어진 OBJECT 값을 반환해요.

출처: Snowflake SQL Reference - PARSE_URL

본문

구문

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

인자

필수:

  • 구문 분석할 문자열이에요.

선택:

  • 구문 분석 오류를 어떻게 처리할지 결정하는 플래그예요.
    • 0으로 설정하면 구문 분석 오류로 함수가 실패해요.
    • 1로 설정하면 구문 분석 오류로 인해 error 필드에 각각의 오류 메시지가 설정된(다른 필드는 설정되지 않은) object가 반환돼요.

기본값은 0이에요.

반환 값

함수는 OBJECT 타입의 값을 반환해요. 입력 인자 중 하나라도 NULL이면 함수는 NULL을 반환해요. OBJECT 값이 반환되면 다음 키-값 쌍을 포함해요.

Key Value
fragment 위치를 가리키는 앵커예요.
host 도메인(웹사이트 또는 서버의 주소)이에요.
parameters 웹사이트 또는 서버에 전달되는 값들이에요.
path 리소스의 위치예요.
port 포트(프로세스 또는 서비스의 연결 엔드포인트)예요.
query 웹사이트 또는 서버에 전달되는 쿼리 문자열이에요.
scheme 프로토콜이에요.

예시

다음 예시들은 PARSE_URL 함수를 사용해요.

테이블 데이터에서 URL 구문 분석

테이블을 만들고 행을 삽입해요.

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

INSERT INTO parse_url_test VALUES
  (1, 'mailto:[email protected]'),
  (2, 'https://www.snowflake.com/'),
  (3, 'http://USER:[email protected]:4345/HELLO.PHP?USER=1'),
  (4, NULL);

SELECT * FROM parse_url_test;

+----+----------------------------------------------------+
| ID | SAMPLE_URL                                         |
|----+----------------------------------------------------|
|  1 | mailto:[email protected]                                 |
|  2 | https://www.snowflake.com/                         |
|  3 | http://USER:[email protected]:4345/HELLO.PHP?USER=1 |
|  4 | NULL                                               |
+----+----------------------------------------------------+

다음 쿼리는 샘플 URL에 대한 PARSE_URL의 결과를 보여줘요.

SELECT PARSE_URL(sample_url) FROM parse_url_test;

+------------------------------------+
| PARSE_URL(SAMPLE_URL)              |
|------------------------------------|
| {                                  |
|   "fragment": null,                |
|   "host": null,                    |
|   "parameters": null,              |
|   "path": "[email protected]",           |
|   "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:[email protected]", |
|   "parameters": {                  |
|     "USER": "1"                    |
|   },                               |
|   "path": "HELLO.PHP",             |
|   "port": "4345",                  |
|   "query": "USER=1",               |
|   "scheme": "http"                 |
| }                                  |
| NULL                               |
+------------------------------------+

이 쿼리는 각 샘플 URL의 host를 보여줘요.

SELECT PARSE_URL(sample_url):host FROM parse_url_test;

+----------------------------+
| PARSE_URL(SAMPLE_URL):HOST |
|----------------------------|
| null                       |
| "www.snowflake.com"        |
| "USER:[email protected]"    |
| NULL                       |
+----------------------------+

port가 4345인 행을 반환해요.

SELECT *
  FROM parse_url_test
  WHERE PARSE_URL(sample_url):port = '4345';

+----+----------------------------------------------------+
| ID | SAMPLE_URL                                         |
|----+----------------------------------------------------|
|  3 | http://USER:[email protected]:4345/HELLO.PHP?USER=1 |
+----+----------------------------------------------------+

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

유효하지 않은 URL 구문 분석

scheme이 없는 유효하지 않은 URL을 구문 분석해요. permissive 인자를 0으로 설정해 입력이 유효하지 않으면 함수가 실패함을 나타내요.

SELECT PARSE_URL('example.int/hello.php?user=12#nofragment', 0);

100139 (22000): Error parsing URL: scheme not specified

permissive 인자를 1로 설정해 오류 메시지를 포함하는 OBJECT 값을 반환함을 나타내며 유효하지 않은 URL을 구문 분석해요.

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

더 알아보기