PARSE_URL
PARSE_URL
유효한 입력 URL/URI에서 모든 구성 요소(fragment, host, parameters, path, port, query, scheme)로 이루어진 OBJECT 값을 반환해요.
본문
구문
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" |
| } |
+----------------------------------------------------------+