참고
이 섹션에 언급된 함수들은 최대 성능을 위해 최적화되어 있으며, 대부분 RFC-3986 표준을 따르지 않습니다.
RFC-3986을 구현하는 함수들은 함수 이름에 RFC가 붙으며, 일반적으로 더 느립니다.
일반적으로 사용자 문자열이나 @ 기호가 포함되지 않은 공용 등록 도메인을 다룰 때는 RFC가 아닌 함수 변형을 사용하면 됩니다.
아래 표는 URL 내에서 어떤 기호가 해당 RFC 및 비-RFC 변형에 의해 파싱될 수 있는지(✔) 또는 없는지(✗)를 자세히 보여 줍니다:
| Symbol | non-RFC | RFC | |
|---|
| ' ' | ✗ | ✗ | |
| \t | ✗ | ✗ | |
| < | ✗ | ✗ | |
| > | ✗ | ✗ | |
| % | ✗ | ✔* | |
| { | ✗ | ✗ | |
| } | ✗ | ✗ | |
| | ✗ | ✗ |
| \ | ✗ | ✗ | |
| ^ | ✗ | ✗ | |
| ~ | ✗ | ✔* | |
| [ | ✗ | ✗ | |
| ] | ✗ | ✔ | |
| ; | ✗ | ✔* | |
| = | ✗ | ✔* | |
| & | ✗ | ✔* | |
*로 표시된 기호는 RFC 3986의 서브 구분자(sub-delimiter)이며, @ 기호 뒤에 오는 사용자 정보에 허용됩니다.
URL 함수에는 두 가지 유형이 있습니다:
- URL에서 일부를 추출하는 함수. 관련 부분이 URL에 없으면 빈 문자열을 반환합니다.
- URL에서 일부를 제거하는 함수. URL에 해당 부분이 없으면 URL은 변경되지 않습니다.
참고
아래 함수들은 system.functions 시스템 테이블에서 생성됩니다.
URLHierarchy
도입: v1.1.0
경로와 쿼리 문자열에서 /, ?, # 기호를 기준으로 URL을 순차적으로 잘라 얻은 부분 문자열들을 요소로 하는 배열을 반환합니다. 연속된 구분 기호는 하나로 취급됩니다. 결과 배열의 첫 번째 요소에는 프로토콜과 호스트가 포함되며, 이후 요소들은 경로가 점차 길어지면서 계층 구조를 이루도록 구성됩니다.
구문
인수(Arguments)
반환값(Returned value)
계층 구조를 이루도록 앞부분부터 차례대로 더 길어지는 URL들의 배열을 반환합니다. Array(String)
예시(Examples)
기본 사용 예(Basic usage)
SELECT URLHierarchy('https://example.com/a/b?c=1')
['https://example.com/','https://example.com/a/','https://example.com/a/b','https://example.com/a/b?c=1']
URLPathHierarchy
도입된 버전: v1.1.0
URL의 경로(path) 구성 요소를 포함하는 배열을 반환하며, 끝은 /, ?, # 기호에서 잘립니다. URLHierarchy와 달리 결과에는 프로토콜과 호스트가 포함되지 않고 경로(path)부터 시작합니다. 연속된 구분 문자는 하나로 간주됩니다.
구문
인자
반환 값
계층 구조를 이루도록 URL 경로 구성 요소를 점차 확장해 나열한 배열을 반환합니다. Array(String)
예시
기본 사용법
SELECT URLPathHierarchy('https://example.com/a/b?c=1')
['/a/','/a/b','/a/b?c=1']
cutFragment
도입 버전: v1.1.0
URL에서 # 기호를 포함한 프래그먼트 식별자(fragment identifier)를 제거합니다.
구문
인수
반환 값
프래그먼트 식별자가 제거된 URL을 반환합니다. String
예시
사용 예시
SELECT cutFragment('http://example.com/path?query=value#fragment123');
┌─cutFragment('http://example.com/path?query=value#fragment123')─┐
│ http://example.com/path?query=value │
└────────────────────────────────────────────────────────────────┘
cutQueryString
도입 버전: v1.1.0
URL에서 물음표를 포함한 쿼리 문자열을 제거합니다.
구문
인수
반환값
쿼리 문자열이 제거된 URL을 반환합니다. String
예제
사용 예제
SELECT cutQueryString('http://example.com/path?query=value¶m=123#fragment');
┌─cutQueryString('http://example.com/path?query=value¶m=123#fragment')─┐
│ http://example.com/path#fragment │
└──────────────────────────────────────────────────────────────────────────┘
cutQueryStringAndFragment
도입 버전: v1.1.0
URL에서 물음표(?)와 해시 기호(#)를 포함하여 쿼리 문자열과 프래그먼트 식별자를 제거합니다.
구문
cutQueryStringAndFragment(url)
인수
반환 값
쿼리 문자열과 fragment 식별자를 제거한 URL을 반환합니다. String
예시
사용 예시
SELECT cutQueryStringAndFragment('http://example.com/path?query=value¶m=123#fragment');
┌─cutQueryStringAndFragment('http://example.com/path?query=value¶m=123#fragment')─┐
│ http://example.com/path │
└─────────────────────────────────────────────────────────────────────────────────────┘
cutToFirstSignificantSubdomain
도입 버전: v1.1.0
최상위 서브도메인부터 첫 번째 중요한 서브도메인까지를 포함하는 도메인 부분을 반환합니다.
구문
cutToFirstSignificantSubdomain(url)
인자
url — 처리할 URL 또는 도메인 문자열입니다. String
반환값
가능한 경우, 최상위 서브도메인부터 첫 번째 유의미한 서브도메인까지를 포함하는 도메인 부분을 반환하며, 그렇지 않으면 빈 문자열을 반환합니다. String
예시
사용 예시
SELECT
cutToFirstSignificantSubdomain('https://news.clickhouse.com.tr/'),
cutToFirstSignificantSubdomain('www.tr'),
cutToFirstSignificantSubdomain('tr');
┌─cutToFirstSignificantSubdomain('https://news.clickhouse.com.tr/')─┬─cutToFirstSignificantSubdomain('www.tr')─┬─cutToFirstSignificantSubdomain('tr')─┐
│ clickhouse.com.tr │ tr │ │
└───────────────────────────────────────────────────────────────────┴──────────────────────────────────────────┴──────────────────────────────────────┘
cutToFirstSignificantSubdomainCustom
도입된 버전: v21.1.0
최상위 서브도메인부터 첫 번째 중요한 서브도메인까지를 포함하는 도메인 부분을 반환합니다. 사용자 지정 TLD 목록 이름을 인수로 받습니다. 최신 TLD 목록이 필요하거나 별도의 사용자 지정 목록이 있는 경우 이 FUNCTION이 유용합니다.
구성 예시
<!-- <top_level_domains_path>/var/lib/clickhouse/top_level_domains/</top_level_domains_path> -->
<top_level_domains_lists>
<!-- https://publicsuffix.org/list/public_suffix_list.dat -->
<public_suffix_list>public_suffix_list.dat</public_suffix_list>
<!-- NOTE: path is under top_level_domains_path -->
</top_level_domains_lists>
구문
cutToFirstSignificantSubdomainCustom(url, tld_list_name)
인수
url — 처리할 URL 또는 도메인 문자열입니다. String
tld_list_name — ClickHouse에 구성된 사용자 정의 TLD 목록 이름입니다. const String
반환 값
첫 번째 의미 있는 서브도메인까지의 최상위 서브도메인을 포함하는 도메인 부분을 반환합니다. String
예시
비표준 도메인에 대한 사용자 정의 TLD 목록 사용
SELECT cutToFirstSignificantSubdomainCustom('bar.foo.there-is-no-such-domain', 'public_suffix_list')
foo.there-is-no-such-domain
cutToFirstSignificantSubdomainCustomRFC
도입 버전: v22.10.0
첫 번째 의미 있는 서브도메인까지의 상위 수준 서브도메인을 포함하는 도메인 부분을 반환합니다.
사용자 정의 TLD 목록 이름을 인자로 받습니다.
최신 TLD 목록이 필요하거나 사용자 정의 목록을 사용하는 경우 이 FUNCTION이 유용합니다.
cutToFirstSignificantSubdomainCustom과 유사하지만 RFC 3986을 준수합니다.
구성 예시
<!-- <top_level_domains_path>/var/lib/clickhouse/top_level_domains/</top_level_domains_path> -->
<top_level_domains_lists>
<!-- https://publicsuffix.org/list/public_suffix_list.dat -->
<public_suffix_list>public_suffix_list.dat</public_suffix_list>
<!-- NOTE: path is under top_level_domains_path -->
</top_level_domains_lists>
구문
cutToFirstSignificantSubdomainCustomRFC(url, tld_list_name)
인수
url — RFC 3986에 따라 처리할 URL 또는 도메인 문자열입니다. - tld_list_name — ClickHouse에 설정된 사용자 정의 TLD 목록의 이름입니다.
반환 값
첫 번째 의미 있는 서브도메인까지의 최상위 서브도메인들을 포함하는 도메인 부분을 반환합니다. String
예시
사용 예시
SELECT cutToFirstSignificantSubdomainCustomRFC('www.foo', 'public_suffix_list');
┌─cutToFirstSignificantSubdomainCustomRFC('www.foo', 'public_suffix_list')─────┐
│ www.foo │
└──────────────────────────────────────────────────────────────────────────────┘
cutToFirstSignificantSubdomainCustomWithWWW
도입 버전: v21.1.0
최상위 서브도메인부터 첫 번째 유의미한 서브도메인까지 포함하는 도메인 부분을 반환하며, 'www'는 제거하지 않습니다. 사용자 지정 TLD 목록 이름을 인수로 받습니다. 최신 TLD 목록이 필요하거나 사용자 지정 목록을 사용하는 경우에 유용합니다.
구성 예시
<!-- <top_level_domains_path>/var/lib/clickhouse/top_level_domains/</top_level_domains_path> -->
<top_level_domains_lists>
<!-- https://publicsuffix.org/list/public_suffix_list.dat -->
<public_suffix_list>public_suffix_list.dat</public_suffix_list>
<!-- NOTE: path is under top_level_domains_path -->
</top_level_domains_lists>
**Syntax**
```sql
cutToFirstSignificantSubdomainCustomWithWWW(url, tld_list_name)
인수
url — 처리할 URL 또는 도메인 문자열. - tld_list_name — ClickHouse에서 구성한 사용자 정의 TLD 목록 이름.
반환 값
'www'를 제거하지 않고 첫 번째 의미 있는 서브도메인까지의 최상위 서브도메인을 포함하는 도메인 부분입니다. String
예시
사용 예시
SELECT cutToFirstSignificantSubdomainCustomWithWWW('www.foo', 'public_suffix_list');
┌─cutToFirstSignificantSubdomainCustomWithWWW('www.foo', 'public_suffix_list')─┐
│ www.foo │
└──────────────────────────────────────────────────────────────────────────────┘
cutToFirstSignificantSubdomainCustomWithWWWRFC
도입 버전: v22.10.0
www를 제거하지 않고, 상위 서브도메인들을 포함하여 첫 번째 의미 있는 서브도메인까지의 도메인 부분을 반환합니다.
사용자 정의 TLD 목록 이름을 인수로 받습니다.
최신 TLD 목록이 필요하거나 사용자 정의 목록을 사용하는 경우에 유용합니다.
cutToFirstSignificantSubdomainCustomWithWWW와 유사하지만 RFC 3986을 준수합니다.
구성 예시
<!-- <top_level_domains_path>/var/lib/clickhouse/top_level_domains/</top_level_domains_path> -->
<top_level_domains_lists>
<!-- https://publicsuffix.org/list/public_suffix_list.dat -->
<public_suffix_list>public_suffix_list.dat</public_suffix_list>
<!-- NOTE: path is under top_level_domains_path -->
</top_level_domains_lists>
**Syntax**
```sql
cutToFirstSignificantSubdomainCustomWithWWWRFC(url, tld_list_name)
인수
url — RFC 3986에 따라 처리할 URL 또는 도메인 문자열입니다. - tld_list_name — ClickHouse에 구성한 사용자 정의 TLD 목록의 이름입니다.
반환 값
www를 제거하지 않고, 첫 번째 의미 있는 서브도메인까지의 상위 서브도메인을 포함한 도메인 부분을 반환합니다. String
예시
사용자 정의 TLD 목록을 사용하여 www를 유지하는 RFC 3986 파싱
SELECT cutToFirstSignificantSubdomainCustomWithWWWRFC('https://www.subdomain.example.custom', 'public_suffix_list')
cutToFirstSignificantSubdomainRFC
도입 버전: v22.10.0
최상위 서브도메인부터 "first significant subdomain"까지를 포함하는 도메인 부분을 반환합니다. cutToFirstSignificantSubdomain과 유사하지만 RFC 3986을 준수합니다.
구문
cutToFirstSignificantSubdomainRFC(url)
인수
url — RFC 3986에 따라 처리할 URL 또는 도메인 문자열입니다. String
반환 값
가능한 경우 최상위 서브도메인부터 첫 번째 의미 있는 서브도메인까지를 포함하는 도메인 부분을 반환하며, 그렇지 않으면 빈 문자열을 반환합니다. String
예시
사용 예시
┌─cutToFirstSignificantSubdomain('http://user:[email protected]:8080')─┬─cutToFirstSignificantSubdomainRFC('http://user:[email protected]:8080')─┐
│ │ example.com │
└─────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────┘
cutToFirstSignificantSubdomainWithWWW
도입된 버전: v20.12.0
최상위 서브도메인부터 「첫 번째 유의미한 서브도메인(first significant subdomain)」까지를 포함하는 도메인 부분을 반환하며, 'www.' 접두사는 제거하지 않습니다.
cutToFirstSignificantSubdomain과 유사하지만, 'www.' 접두사가 있을 경우 이를 유지합니다.
구문
cutToFirstSignificantSubdomainWithWWW(url)
인수
url — 처리할 URL 또는 도메인 문자열입니다. String
반환 값
가능한 경우 최상위 서브도메인부터 최초의 의미 있는 서브도메인(필요 시 www 포함)까지를 포함하는 도메인 부분을 반환하며, 불가능한 경우 빈 문자열을 반환합니다. String
예시
사용 예시
SELECT
cutToFirstSignificantSubdomainWithWWW('https://news.clickhouse.com.tr/'),
cutToFirstSignificantSubdomainWithWWW('www.tr'),
cutToFirstSignificantSubdomainWithWWW('tr');
┌─cutToFirstSignificantSubdomainWithWWW('https://news.clickhouse.com.tr/')─┬─cutToFirstSignificantSubdomainWithWWW('www.tr')─┬─cutToFirstSignificantSubdomainWithWWW('tr')─┐
│ clickhouse.com.tr │ www.tr │ │
└──────────────────────────────────────────────────────────────────────────┴─────────────────────────────────────────────────┴─────────────────────────────────────────────┘
cutToFirstSignificantSubdomainWithWWWRFC
도입된 버전: v22.10.0
최상위 서브도메인부터 「첫 번째 중요한 서브도메인(first significant subdomain)」까지를 포함하는 도메인 부분을, 「www」를 제거하지 않고 반환합니다. cutToFirstSignificantSubdomainWithWWW와 유사하지만 RFC 3986을 준수합니다.
구문
cutToFirstSignificantSubdomainWithWWWRFC(url)
인자
url — RFC 3986에 따라 처리할 URL 또는 도메인 문자열.
반환 값
가능한 경우 첫 번째 주요 서브도메인(「www」 포함)까지의 상위 서브도메인을 포함한 도메인 부분을 반환하며, 그렇지 않으면 빈 문자열을 반환합니다. 반환 타입은 String입니다.
예시
사용 예시
SELECT
cutToFirstSignificantSubdomainWithWWW('http:%2F%[email protected]/economicheskiy'),
cutToFirstSignificantSubdomainWithWWWRFC('http:%2F%[email protected]/economicheskiy');
┌─cutToFirstSignificantSubdomainWithWWW('http:%2F%[email protected]/economicheskiy')─┬─cutToFirstSignificantSubdomainWithWWWRFC('http:%2F%[email protected]/economicheskiy')─┐
│ │ mail.ru │
└───────────────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────────────────┘
cutURLParameter
도입 버전: v1.1.0
name 파라미터가 포함된 URL에서 해당 파라미터를 제거합니다.
이 FUNCTION은 파라미터 이름의 문자를 인코딩하거나 디코딩하지 않으며, 예를 들어 Client ID와 Client%20ID는 서로 다른 파라미터 이름으로 취급됩니다.
구문
cutURLParameter(url, name)
인자
반환 값
name URL 파라미터가 제거된 URL입니다. String
예시
사용 예시
SELECT
cutURLParameter('http://bigmir.net/?a=b&c=d&e=f#g', 'a') AS url_without_a,
cutURLParameter('http://bigmir.net/?a=b&c=d&e=f#g', ['c', 'e']) AS url_without_c_and_e;
┌─url_without_a────────────────┬─url_without_c_and_e──────┐
│ http://bigmir.net/?c=d&e=f#g │ http://bigmir.net/?a=b#g │
└──────────────────────────────┴──────────────────────────┘
cutWWW
도입 버전: v1.1.0
URL 도메인의 앞에 www.가 붙어 있으면 제거합니다.
구문
인수
반환 값
도메인 맨 앞의 www.가 제거된 URL을 반환합니다. String
예시
사용 예시
SELECT cutWWW('http://www.example.com/path?query=value#fragment');
┌─cutWWW('http://www.example.com/path?query=value#fragment')─┐
│ http://example.com/path?query=value#fragment │
└────────────────────────────────────────────────────────────┘
도입 버전: v1.1.0
URL로 인코딩된 문자열을 입력으로 받아 디코딩하여 원래의 사람이 읽을 수 있는 형태로 복원합니다.
구문
인수
반환값
디코딩된 URL을 반환합니다. String
예시
사용 예시
SELECT decodeURLComponent('http://127.0.0.1:8123/?query=SELECT%201%3B') AS DecodedURL;
┌─DecodedURL─────────────────────────────┐
│ http://127.0.0.1:8123/?query=SELECT 1; │
└────────────────────────────────────────┘
decodeURLFormComponent
도입 버전: v1.1.0
+ 기호를 공백으로 변환하고 퍼센트 인코딩된 문자를 디코딩하는 폼 인코딩 규칙(RFC-1866)을 사용하여 URL로 인코딩된 문자열을 디코딩합니다.
Syntax
decodeURLFormComponent(url)
인수
반환값
디코딩된 URL을 반환합니다. String
예제
사용 예제
SELECT decodeURLFormComponent('http://127.0.0.1:8123/?query=SELECT%201+2%2B3') AS DecodedURL;
┌─DecodedURL────────────────────────────────┐
│ http://127.0.0.1:8123/?query=SELECT 1 2+3 │
└───────────────────────────────────────────┘
domain
도입된 버전: v1.1.0
URL에서 호스트 이름(hostname)을 추출합니다.
URL은 프로토콜 포함 여부와 관계없이 지정할 수 있습니다.
구문
인수
반환 값
입력 문자열을 URL로 해석할 수 있는 경우 호스트 이름을 반환하고, 그렇지 않으면 빈 문자열을 반환합니다. String
예시
사용 예시
SELECT domain('svn+ssh://some.svn-hosting.com:80/repo/trunk');
┌─domain('svn+ssh://some.svn-hosting.com:80/repo/trunk')─┐
│ some.svn-hosting.com │
└────────────────────────────────────────────────────────┘
domainRFC
도입 버전: v22.10.0
URL에서 호스트명을 추출합니다.
domain과 유사하지만 RFC 3986을 준수합니다.
구문
인수
반환 값
입력 문자열을 URL로 파싱할 수 있으면 호스트 이름을, 그렇지 않으면 빈 문자열을 반환합니다. String
예시
사용 예시
┌─domain('http://user:[email protected]:8080/path?query=value#fragment')─┬─domainRFC('http://user:[email protected]:8080/path?query=value#fragment')─┐
│ │ example.com │
└───────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────┘
domainWithoutWWW
도입: v1.1.0
URL의 도메인에서 앞에 오는 www.를 제거한 값을 반환합니다.
구문
인수
반환값
입력 문자열을 URL로 파싱할 수 있는 경우 도메인 이름을 반환합니다(선행 www.는 제외). 그렇지 않으면 빈 문자열을 반환합니다. String
예시
사용 예시
┌─domainWithoutWWW('http://[email protected]:80/')─┐
│ example.com │
└─────────────────────────────────────────────────────┘
domainWithoutWWWRFC
도입된 버전: v1.1.0
선행 www.가 있을 경우 이를 제거한 도메인을 반환합니다. domainWithoutWWW와 유사하지만 RFC 3986을 따릅니다.
구문
인수
반환값
입력 문자열을 URL로 해석할 수 있으면 도메인 이름(앞부분의 www. 제외)을 반환하고, 그렇지 않으면 빈 문자열을 반환합니다. String
예시
사용 예시
SELECT
domainWithoutWWW('http://user:[email protected]:8080/path?query=value#fragment'),
domainWithoutWWWRFC('http://user:[email protected]:8080/path?query=value#fragment');
┌─domainWithoutWWW('http://user:[email protected]:8080/path?query=value#fragment')─┬─domainWithoutWWWRFC('http://user:[email protected]:8080/path?query=value#fragment')─┐
│ │ example.com │
└─────────────────────────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────────────┘
도입 버전: v22.3.0
일반 문자열을 입력으로 받아 특수 문자를 해당 퍼센트 인코딩 값으로 대체한 URL 인코딩(퍼센트 인코딩) 형식으로 변환합니다.
Syntax
인수
반환 값
인코딩된 URL을 반환합니다. String
예제
사용 예제
SELECT encodeURLComponent('http://127.0.0.1:8123/?query=SELECT 1;') AS EncodedURL;
┌─EncodedURL───────────────────────────────────────────────┐
│ http%3A%2F%2F127.0.0.1%3A8123%2F%3Fquery%3DSELECT%201%3B │
└──────────────────────────────────────────────────────────┘
도입된 버전: v22.3.0
공백 문자를 + 기호로 변환하고 특수 문자를 퍼센트 인코딩하는 폼 인코딩 규칙(RFC-1866)에 따라 문자열을 인코딩합니다.
구문
encodeURLFormComponent(url)
인수
반환값
인코딩된 URL을 반환합니다. String
예제
사용 예제
SELECT encodeURLFormComponent('http://127.0.0.1:8123/?query=SELECT 1 2+3') AS EncodedURL;
┌─EncodedURL────────────────────────────────────────────────┐
│ http%3A%2F%2F127.0.0.1%3A8123%2F%3Fquery%3DSELECT+1+2%2B3 │
└───────────────────────────────────────────────────────────┘
도입 버전: v1.1.0
URL에 name 매개변수가 존재하면 해당 값을 반환하고, 존재하지 않으면 빈 문자열을 반환합니다.
해당 이름을 가진 매개변수가 여러 개 있을 경우 첫 번째 항목을 반환합니다.
함수는 url 매개변수에 포함된 매개변수가 name 인자와 동일한 방식으로 인코딩되어 있다고 가정합니다.
구문
extractURLParameter(url, name)
인수
반환 값
지정된 이름의 URL 매개변수 값을 반환합니다. String
예제
사용 예제
SELECT extractURLParameter('http://example.com/?param1=value1¶m2=value2', 'param1');
┌─extractURLPa⋯, 'param1')─┐
│ value1 │
└──────────────────────────┘
도입 버전: v1.1.0
URL 매개변수의 이름에 해당하는 문자열 배열을 반환합니다.
값은 디코딩되지 않습니다.
구문
extractURLParameterNames(url)
인수
반환 값
URL 파라미터 이름에 해당하는 문자열 배열을 반환합니다. Array(String)
예시
사용 예시
SELECT extractURLParameterNames('http://example.com/?param1=value1¶m2=value2');
┌─extractURLPa⋯m2=value2')─┐
│ ['param1','param2'] │
└──────────────────────────┘
extractURLParameters
도입 버전: v1.1.0
URL 매개변수와 일치하는 name=value 형식의 문자열 배열을 반환합니다.
값은 디코딩되지 않습니다.
구문
extractURLParameters(url)
인수
반환값
URL 매개변수에 대응하는 name=value 문자열의 배열을 반환합니다. Array(String)
예시
사용 예시
SELECT extractURLParameters('http://example.com/?param1=value1¶m2=value2');
┌─extractURLParame⋯¶m2=value2')─┐
│ ['param1=value1','param2=value2'] │
└───────────────────────────────────┘
firstSignificantSubdomain
도입 버전: v1.1.0
「first significant subdomain(첫 번째 중요한 서브도메인)」을 반환합니다.
첫 번째 중요한 서브도메인은 두 번째 레벨 도메인이 'com', 'net', 'org', 또는 'co'인 경우 해당 두 번째 레벨 도메인입니다.
그 외에는 세 번째 레벨 도메인입니다.
예를 들어, firstSignificantSubdomain('https://news.clickhouse.com/') = 'clickhouse', firstSignificantSubdomain ('https://news.clickhouse.com.tr/') = 'clickhouse'입니다.
「중요하지 않은(insignificant)」 두 번째 레벨 도메인 목록과 기타 구현 세부 사항은 향후 변경될 수 있습니다.
구문(Syntax)
firstSignificantSubdomain(url)
인수
반환 값
예시
firstSignificantSubdomain
SELECT firstSignificantSubdomain('https://news.clickhouse.com/')
firstSignificantSubdomainCustom
도입 버전: v21.1.0
사용자 정의 TLD(최상위 도메인) 목록을 사용하여 URL의 첫 번째 유의미한 서브도메인을 반환합니다. 사용자 정의 TLD 목록 이름은 어떤 도메인 접미사를 최상위 도메인으로 취급할지 정의하는 구성 이름을 가리킵니다. 이는 비표준 TLD 계층 구조를 사용하는 환경에서 유용합니다. 이 FUNCTION은 프로토콜과 그 이후의 모든 부분이 제거되어 있다고 가정하는 단순화된 URL 파싱 알고리즘을 사용합니다.
구문
firstSignificantSubdomainCustom(url, tld_list_name)
인수
url — 서브도메인을 추출할 URL입니다. String
tld_list_name — 설정에 정의된 사용자 지정 TLD 목록의 이름입니다. String
반환 값
첫 번째 유의미한 서브도메인을 반환합니다. String
예시
기본 사용 예
SELECT firstSignificantSubdomainCustom('https://news.example.com', 'public_suffix_list')
firstSignificantSubdomainCustomRFC
도입 버전: v22.10.0
firstSignificantSubdomainCustom와 유사하지만, 단순화된 알고리즘 대신 RFC 3986을 준수하는 URL 파싱을 사용합니다.
구문
firstSignificantSubdomainCustomRFC(url, tld_list_name)
인수
url — 서브도메인을 추출할 URL입니다. String
tld_list_name — 설정에 지정된 사용자 정의 TLD 목록 이름입니다. String
반환값
의미 있는 첫 번째 서브도메인을 반환합니다. String
예시
기본 사용법
SELECT firstSignificantSubdomainCustomRFC('https://news.example.com', 'public_suffix_list')
firstSignificantSubdomainRFC
도입 버전: v22.10.0
RFC 1034에 따라 「첫 번째 유의미한 서브도메인(first significant subdomain)」을 반환합니다.
구문
firstSignificantSubdomainRFC(url)
인수
반환 값
예시
fragment
도입 버전: v1.1.0
앞에 붙는 해시 기호(#)를 제외한 fragment 식별자(fragment identifier)를 반환합니다.
구문
인수
반환 값
앞에 붙은 해시 기호(#)를 제외한 fragment identifier를 반환합니다. String
예시
사용 예시
SELECT fragment('https://clickhouse.com/docs/getting-started/quick-start/cloud#1-create-a-clickhouse-service');
┌─fragment('http⋯ouse-service')─┐
│ 1-create-a-clickhouse-service │
└───────────────────────────────┘
netloc
도입된 버전: v20.5.0
URL에서 네트워크 위치(username:password@host:port)를 추출합니다.
구문
인수
반환값
지정된 URL에서 username:password@host:port를 반환합니다. String
예시
사용 예시
path
도입 버전: v1.1.0
URL에서 쿼리 문자열을 제외한 경로(path)를 반환합니다.
구문
인수
반환값
쿼리 문자열을 제외한 URL의 경로를 반환합니다. String
예시
사용 예시
SELECT path('https://clickhouse.com/docs/sql-reference/functions/url-functions/?query=value');
┌─path('https://clickhouse.com/en/sql-reference/functions/url-functions/?query=value')─┐
│ /docs/sql-reference/functions/url-functions/ │
└──────────────────────────────────────────────────────────────────────────────────────┘
pathFull
도입된 버전: v1.1.0
path와 동일하지만, URL의 쿼리 문자열과 프래그먼트까지 포함합니다.
구문
인수
반환 값
쿼리 문자열(query string)과 fragment를 포함한 URL 경로를 반환합니다. String
예시
사용 예시
SELECT pathFull('https://clickhouse.com/docs/sql-reference/functions/url-functions/?query=value#section');
┌─pathFull('https://clickhouse.com⋯unctions/?query=value#section')─┐
│ /docs/sql-reference/functions/url-functions/?query=value#section │
└──────────────────────────────────────────────────────────────────┘
port
도입: v20.5.0
URL에서 포트를 반환하며, URL에 포트가 없거나 URL을 파싱할 수 없는 경우 default_port를 반환합니다.
구문
port(url[, default_port])
인수
url — URL. String
default_port — 선택적입니다. 반환할 기본 포트 번호입니다. 기본값은 0입니다. UInt16
반환 값
URL의 포트를 반환하며, URL에 포트가 없거나 유효성 검사 오류가 발생한 경우 기본 포트를 반환합니다. UInt16
예시
사용 예시
SELECT port('https://clickhouse.com:8443/docs'), port('https://clickhouse.com/docs', 443);
┌─port('https://clickhouse.com:8443/docs')─┬─port('https://clickhouse.com/docs', 443)─┐
│ 8443 │ 443 │
└──────────────────────────────────────────┴──────────────────────────────────────────┘
portRFC
도입 버전: v22.10.0
포트 번호를 반환하며, URL에 포트가 없거나 URL을 파싱할 수 없는 경우에는 default_port를 반환합니다.
port와 유사하지만, RFC 3986을 준수합니다.
구문
portRFC(url[, default_port])
인수
url — URL. String
default_port — 선택적입니다. 반환할 기본 포트 번호입니다. 기본값은 0입니다. UInt16
반환 값
URL에 포트가 없거나 유효성 검사 오류가 발생한 경우 기본 포트를, 그렇지 않은 경우 해당 포트를 반환합니다. UInt16
예시
사용 예시
┌─port('http:/⋯com:8080/')─┬─portRFC('htt⋯com:8080/')─┐
│ 0 │ 8080 │
└──────────────────────────┴──────────────────────────┘
protocol
도입된 버전: v1.1.0
URL에서 프로토콜을 추출합니다.
일반적으로 반환되는 값의 예: http, https, ftp, mailto, tel, magnet.
구문
인수
반환 값
URL의 프로토콜을 반환하며, 프로토콜을 알 수 없으면 빈 문자열을 반환합니다. String
예시
사용 예시
SELECT protocol('https://clickhouse.com/');
┌─protocol('https://clickhouse.com/')─┐
│ https │
└─────────────────────────────────────┘
queryString
도입 버전: v1.1.0
URL의 쿼리 문자열에서 처음 물음표(?)를 제외하고, # 문자와 그 이후의 모든 내용을 제외한 문자열을 반환합니다.
구문
인수
반환 값
URL의 쿼리 문자열에서 선행 물음표와 프래그먼트를 제거한 문자열을 반환합니다. String
예시
사용 예시
SELECT queryString('https://clickhouse.com/docs?query=value¶m=123#section');
┌─queryString(⋯3#section')─┐
│ query=value¶m=123 │
└──────────────────────────┘
queryStringAndFragment
도입 버전: v1.1.0
URL에서 쿼리 문자열과 프래그먼트 식별자를 반환합니다.
구문
queryStringAndFragment(url)
인수
반환 값
URL의 쿼리 문자열과 프래그먼트 식별자를 반환합니다. String
예시
사용 예시
SELECT queryStringAndFragment('https://clickhouse.com/docs?query=value¶m=123#section');
┌─queryStringAnd⋯=123#section')─┐
│ query=value¶m=123#section │
└───────────────────────────────┘
topLevelDomain
도입 버전: v1.1.0
URL에서 최상위 도메인을 추출합니다.
참고
URL은 프로토콜이 있어도 없어도 지정할 수 있습니다.
예를 들어:
svn+ssh://some.svn-hosting.com:80/repo/trunk
some.svn-hosting.com:80/repo/trunk
https://clickhouse.com/time/
구문
인수
반환 값
입력 문자열을 URL로 파싱할 수 있는 경우 도메인 이름을 반환합니다. 그렇지 않으면 빈 문자열을 반환합니다. String
예제
사용 예제
SELECT topLevelDomain('svn+ssh://www.some.svn-hosting.com:80/repo/trunk');
┌─topLevelDomain('svn+ssh://www.some.svn-hosting.com:80/repo/trunk')─┐
│ com │
└────────────────────────────────────────────────────────────────────┘
topLevelDomainRFC
도입된 버전: v22.10.0
URL에서 최상위 도메인을 추출합니다.
topLevelDomain과 유사하지만 RFC 3986을 준수합니다.
구문
인수
반환 값
입력 문자열을 URL로 해석할 수 있는 경우 도메인 이름을 반환합니다. 그렇지 않으면 빈 문자열을 반환합니다. String
예시
사용 예시
┌─topLevelDomain('http://foo:foo%[email protected]')─┬─topLevelDomainRFC('http://foo:foo%[email protected]')─┐
│ │ com │
└────────────────────────────────────────────────┴───────────────────────────────────────────────────┘