URL 함수
URL 함수 (URL functions)
URL의 특정 부분을 추출하거나 제거하는 함수들이에요. 대부분 최대 성능에 맞게 최적화되어 RFC-3986 표준을 따르지 않습니다. 아래 문서는 system.functions 시스템 테이블에서 생성된 내용입니다.
출처: 문서
본문
이 섹션에 언급된 함수는 최대 성능에 맞게 최적화되어 있으며 대부분 RFC-3986 표준을 따르지 않습니다. RFC-3986을 구현하는 함수는 함수 이름에 RFC가 붙으며 일반적으로 더 느립니다.
사용자 문자열이나 @ 기호를 포함하지 않는 공개 등록 도메인을 다룰 때는 non-RFC 함수 변형을 사용해도 됩니다. 아래 표는 URL의 각 기호를 각 RFC 및 non-RFC 변형이 파싱할 수 있는지(✔) 없는지(✗)를 자세히 보여줍니다:
| 기호 | non-RFC |
RFC |
|---|---|---|
| ' ' | ✗ | ✗ |
| \t | ✗ | ✗ |
| < | ✗ | ✗ |
| > | ✗ | ✗ |
| % | ✗ | ✔* |
| { | ✗ | ✗ |
| } | ✗ | ✗ |
| | | ✗ | ✗ |
| \ | ✗ | ✗ |
| ^ | ✗ | ✗ |
| ~ | ✗ | ✔* |
| [ | ✗ | ✗ |
| ] | ✗ | ✔ |
| ; | ✗ | ✔* |
| = | ✗ | ✔* |
| & | ✗ | ✔* |
*로 표시된 기호는 RFC 3986에서 sub-delimiter이며 @ 기호 뒤의 user info에 허용됩니다.
URL 함수에는 두 가지 유형이 있습니다:
- URL의 일부를 추출하는 함수. 관련 부분이 URL에 없으면 빈 문자열을 반환합니다.
- URL의 일부를 제거하는 함수. 이와 비슷한 것이 없으면 URL은 그대로 유지됩니다.
아래 함수들은 system.functions 시스템 테이블에서 생성된 것입니다.
URLHierarchy
도입 버전: v1.1.0
경로와 쿼리 문자열에서 /, ?, # 기호로 끝을 자른 URL을 담은 배열을 반환합니다. 연속된 구분 문자는 하나로 셉니다. 결과는 프로토콜과 호스트를 첫 요소로 포함하며, 점점 길어지는 경로가 계층을 이룹니다.
구문
URLHierarchy(url)
인자
url— 처리할 URL.String
반환 값
점점 길어지는 URL 배열(계층 구조). Array(String)
예제 — 기본 사용
Query
SELECT URLHierarchy('https://example.com/a/b?c=1')
Response
['https://example.com/','https://example.com/a/','https://example.com/a/b?','https://example.com/a/b?c=1']
URLPathHierarchy
도입 버전: v1.1.0
/, ?, # 기호로 끝을 자른 URL의 경로 성분을 담은 배열을 반환합니다. URLHierarchy와 달리 결과는 프로토콜과 호스트를 포함하지 않으며 경로에서 시작합니다. 연속 구분 문자는 하나로 셉니다.
구문
URLPathHierarchy(url)
인자
url— 처리할 URL.String
반환 값
점점 길어지는 URL 경로 성분 배열(계층 구조). Array(String)
예제 — 기본 사용
Query
SELECT URLPathHierarchy('https://example.com/a/b?c=1')
Response
['/a/','/a/b?','/a/b?c=1']
cutFragment
도입 버전: v1.1.0
URL에서 샾 기호를 포함한 프래그먼트 식별자를 제거합니다.
구문
cutFragment(url)
인자
url— URL.String
반환 값
프래그먼트 식별자가 제거된 URL을 반환합니다. String
예제 — 사용 예시
Query
SELECT cutFragment('http://example.com/path?query=value#fragment123');
Response
http://example.com/path?query=value
cutQueryString
도입 버전: v1.1.0
URL에서 쿼리 문자열을 제거합니다.
구문
cutQueryString(url)
인자
url— URL.String
반환 값
쿼리 문자열이 제거된 URL을 반환합니다. String
예제 — 사용 예시
Query
SELECT cutQueryString('http://example.com/path?query=value');
Response
http://example.com/path
cutQueryStringAndFragment
도입 버전: v1.1.0
URL에서 쿼리 문자열과 프래그먼트 식별자를 제거합니다.
구문
cutQueryStringAndFragment(url)
인자
url— URL.String
반환 값
쿼리 문자열과 프래그먼트 식별자가 제거된 URL을 반환합니다. String
cutToFirstSignificantSubdomain
도입 버전: v1.1.0
URL에서 "첫 번째 유효 서브도메인"의 시작 부분부터 잘라냅니다. www 같은 공개 2차 레벨 도메인과 같은 무의미한 도메인은 제거하고, 잘 알려진 접두사 목록에 따라 도메인의 최하위 부분부터 남깁니다.
구문
cutToFirstSignificantSubdomain(url)
인자
url— URL.String
반환 값
유효 서브도메인부터 시작하는 절단된 URL을 반환합니다. String
예제
Query
SELECT cutToFirstSignificantSubdomain('https://www.example.com/path');
Response
example.com/path
cutToFirstSignificantSubdomainCustom
도입 버전: v23.8.0
커스텀 공개 접미사 목록을 사용해 "첫 번째 유효 서브도메인" 시작 부분부터 잘라냅니다.
구문
cutToFirstSignificantSubdomainCustom(url, custom_suffixes)
인자
반환 값
절단된 URL을 반환합니다. String
cutToFirstSignificantSubdomainCustomRFC
도입 버전: v23.8.0
RFC-3986 호환 방식으로, 커스텀 접미사 목록을 사용해 "첫 번째 유효 서브도메인" 시작 부분부터 잘라냅니다.
구문
cutToFirstSignificantSubdomainCustomRFC(url, custom_suffixes)
cutToFirstSignificantSubdomainCustomWithWWW
도입 버전: v23.8.0
www 접두사를 유지하면서 커스텀 접미사를 사용합니다.
구문
cutToFirstSignificantSubdomainCustomWithWWW(url, custom_suffixes)
cutToFirstSignificantSubdomainCustomWithWWWRFC
도입 버전: v23.8.0
www 접두사를 유지하면서 RFC-3986 호환 방식으로 커스텀 접미사를 사용합니다.
구문
cutToFirstSignificantSubdomainCustomWithWWWRFC(url, custom_suffixes)
cutToFirstSignificantSubdomainRFC
도입 버전: v1.1.0
RFC-3986 호환 방식으로 "첫 번째 유효 서브도메인" 시작 부분부터 잘라냅니다.
구문
cutToFirstSignificantSubdomainRFC(url)
cutToFirstSignificantSubdomainWithWWW
도입 버전: v1.1.0
www 접두사를 유지하면서 "첫 번째 유효 서브도메인" 시작 부분부터 잘라냅니다.
구문
cutToFirstSignificantSubdomainWithWWW(url)
cutToFirstSignificantSubdomainWithWWWRFC
도입 버전: v1.1.0
s 접두사를 유지하면서 RFC-3986 호환 방식으로 "첫 번째 유효 서브도메인" 시작 부분부터 잘라냅니다.
구문
cutToFirstSignificantSubdomainWithWWWRFC(url)
cutURLParameter
도입 버전: v1.1.0
URL에서 지정된 쿼리 문자열 파라미터를 제거합니다.
구문
cutURLParameter(url, name)
인자
반환 값
지정된 파라미터가 제거된 URL을 반환합니다. String
예제
Query
SELECT cutURLParameter('http://example.com/path?query=value&tag=test', 'tag');
Response
http://example.com/path?query=value
cutWWW
도입 버전: v1.1.0
URL에서 "www"를 제거합니다. 존재하지 않으면 URL을 변경하지 않습니다.
구문
cutWWW(url)
인자
url— URL.String
반환 값
www가 없는 URL을 반환합니다. String
예제
Query
SELECT cutWWW('http://www.example.com/');
Response
http://example.com/
decodeURLComponent
도입 버전: v1.1.0
URL 인코딩된 성분을 디코딩합니다.
구문
decodeURLComponent(url)
인자
url— URL.String
반환 값
디코딩된 URL 성분을 반환합니다. String
예제
Query
SELECT decodeURLComponent('http://example.com/a%20b');
Response
http://example.com/a b
decodeURLFormComponent
도입 버전: v1.1.0
URL 폼 인코딩된 성분을 디코딩합니다(+를 공백으로 변환).
구문
decodeURLFormComponent(url)
인자
url— URL.String
반환 값
디코딩된 URL 폼 성분을 반환합니다. String
domain
도입 버전: v1.1.0
URL의 호스트 이름 부분을 추출합니다.
구문
domain(url)
인자
url— URL.String
반환 값
호스트 이름 또는 지정된 호스트가 없는 경우 빈 문자열을 반환합니다. String
예제
Query
SELECT domain('http://www.example.com/path');
Response
www.example.com
domainRFC
도입 버전: v1.1.0
RFC-3986 호환 방식으로 URL의 호스트 이름 부분을 추출합니다.
구문
domainRFC(url)
인자
url— URL.String
반환 값
호스트 이름을 반환합니다. String
domainWithoutWWW
도입 버전: v1.1.0
URL의 호스트 이름 부분을 "www" 없이 추출합니다.
구문
domainWithoutWWW(url)
인자
url— URL.String
반환 값
www 없는 호스트 이름을 반환합니다. String
domainWithoutWWWRFC
도입 버전: v1.1.0
RFC-3986 호환 방식으로 URL의 호스트 이름 부분을 "www" 없이 추출합니다.
구문
domainWithoutWWWRFC(url)
encodeURLComponent
도입 버전: v1.1.0
URL 성분을 인코딩합니다.
구문
encodeURLComponent(url)
인자
url— URL.String
반환 값
인코딩된 URL 성분을 반환합니다. String
예제
Query
SELECT encodeURLComponent('http://example.com/a b');
Response
http%3A%2F%2Fexample.com%2Fa%20b
encodeURLFormComponent
도입 버전: v1.1.0
URL 폼 성분을 인코딩합니다(공백을 +로 변환).
구문
encodeURLFormComponent(url)
인자
url— URL.String
반환 값
인코딩된 URL 폼 성분을 반환합니다. String
extractURLParameter
도입 버전: v1.1.0
URL에서 쿼리 문자열 파라미터의 값을 추출합니다.
구문
extractURLParameter(url, name)
인자
반환 값
지정된 파라미터의 값 또는 지정된 파라미터가 없는 경우 빈 문자열을 반환합니다. String
예제
Query
SELECT extractURLParameter('http://example.com/path?query=value', 'query');
Response
value
extractURLParameterNames
도입 버전: v1.1.0
URL의 쿼리 문자열 파라미터 이름 배열을 추출합니다.
구문
extractURLParameterNames(url)
인자
url— URL.String
반환 값
파라미터 이름 배열을 반환합니다. Array(String)
예제
Query
SELECT extractURLParameterNames('http://example.com/path?query=value&tag=test');
Response
['query','tag']
extractURLParameters
도입 버전: v1.1.0
URL의 쿼리 문자열 파라미터 값을 배열로 추출합니다.
구문
extractURLParameters(url)
인자
url— URL.String
반환 값
파라미터 값 배열을 반환합니다. Array(String)
예제
Query
SELECT extractURLParameters('http://example.com/path?query=value&tag=test');
Response
['value','test']
firstSignificantSubdomain
도입 버전: v1.1.0
URL에서 "첫 번째 유효 서브도메인"을 추출합니다. 잘 알려진 접두사 목록에 따라 왼쪽에서 접두사를 제거한 가장 오른쪽 의미 있는 부분을 반환합니다.
구문
firstSignificantSubdomain(url)
인자
url— URL.String
반환 값
첫 번째 유효 서브도메인 이름을 반환합니다. String
firstSignificantSubdomainCustom
도입 버전: v23.8.0
커스텀 공개 접미사 목록을 사용해 "첫 번째 유효 서브도메인"을 추출합니다.
구문
firstSignificantSubdomainCustom(url, custom_suffixes)
firstSignificantSubdomainCustomRFC
도입 버전: v23.8.0
RFC-3986 호환 방식으로 커스텀 접미사 목록을 사용해 추출합니다.
구문
firstSignificantSubdomainCustomRFC(url, custom_suffixes)
firstSignificantSubdomainRFC
도입 버전: v1.1.0
RFC-3986 호환 방식으로 "첫 번째 유효 서브도메인"을 추출합니다.
구문
firstSignificantSubdomainRFC(url)
fragment
도입 버전: v1.1.0
URL의 프래그먼트 식별자를 추출합니다.
구문
fragment(url)
인자
url— URL.String
반환 값
프래그먼트 식별자 또는 없으면 빈 문자열을 반환합니다. String
예제
Query
SELECT fragment('http://example.com/path#fragment');
Response
fragment
netloc
도입 버전: v1.1.0
URL에서 네트워크 위치(netloc)를 추출합니다(호스트와 포트).
구문
netloc(url)
인자
url— URL.String
반환 값
netloc를 반환합니다. String
path
도입 버전: v1.1.0
URL의 경로를 추출합니다.
구문
path(url)
인자
url— URL.String
반환 값
경로를 반환합니다. String
예제
Query
SELECT path('http://example.com/path?query=value');
Response
/path
pathFull
도입 버전: v1.1.0
URL의 경로와 쿼리 문자열을 포함한 전체를 추출합니다.
구문
pathFull(url)
인자
url— URL.String
반환 값
경로와 쿼리 문자열을 반환합니다. String
port
도입 버전: v1.1.0
URL의 포트를 추출합니다.
구문
port(url)
인자
url— URL.String
반환 값
포트 번호를 반환합니다. 없으면 빈 문자열. String
portRFC
도입 버전: v1.1.0
RFC-3986 호환 방식으로 URL의 포트를 추출합니다.
구문
portRFC(url)
protocol
도입 버전: v1.1.0
URL의 프로토콜을 추출합니다.
구문
protocol(url)
인자
url— URL.String
반환 값
프로토콜을 반환합니다. String
예제
Query
SELECT protocol('http://example.com/path');
Response
http
queryString
도입 버전: v1.1.0
URL의 쿼리 문자열을 추출합니다.
구문
queryString(url)
인자
url— URL.String
반환 값
쿼리 문자열을 반환합니다. String
예제
Query
SELECT queryString('http://example.com/path?query=value');
Response
query=value
queryStringAndFragment
도입 버전: v1.1.0
URL의 쿼리 문자열과 프래그먼트 식별자를 추출합니다.
구문
queryStringAndFragment(url)
인자
url— URL.String
반환 값
쿼리 문자열과 프래그먼트를 반환합니다. String
topLevelDomain
도입 버전: v1.1.0
URL의 최상위 도메인(TLD) 이름을 추출합니다.
구문
topLevelDomain(url)
인자
url— URL.String
반환 값
최상위 도메인 이름을 반환합니다. String
예제
Query
SELECT topLevelDomain('http://www.example.com/path');
Response
com
topLevelDomainRFC
도입 버전: v1.1.0
RFC-3986 호환 방식으로 최상위 도메인 이름을 추출합니다.
구문
topLevelDomainRFC(url)
인자
url— URL.String
반환 값
최상위 도메인 이름을 반환합니다. String