카테고리:

문자열 및 이진 함수 (일반)

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, 'http://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 | http://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": "http"                |
| }                                  |
| {                                  |
|   "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 | http://www.snowflake.com/ |
+----+----------------------------+

잘못된 URLs 구문 분석

스키마가 누락된 잘못된 URL을 구문 분석합니다. permissive 인자를 0 으로 설정하여 입력이 유효하지 않은 경우 함수가 실패함을 나타냅니다.

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

permissive 인자를 1 로 설정하여 함수가 오류 메시지가 포함된 OBJECT 값을 반환하도록 잘못된 URL 을 구문 분석합니다.

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