play.html, 모든 ClickHouse HTTP 포트의 /play 경로에서 제공됨)에서는 쿼리를 수정하지 않고도 결과를 컬럼 기준으로 정렬하고, 해당 값으로 필터링하고, 페이지별로 볼 수 있습니다.
이러한 작업은 모두 브라우저에서 처리되지 않습니다. 변경할 때마다 해당 쿼리 구성 설정을 적용해 쿼리가 다시 실행되며, 서버는 쿼리를 외부 ORDER BY, WHERE, LIMIT가 적용된 파생 테이블로 감싸 구체화합니다. 따라서 화면에 표시되는 결과는 페이지에 우연히 포함된 행을 재배열한 것이 아니라, 전체 쿼리 결과를 정렬, 필터링, 페이지 매김한 결과입니다.
정렬
aria-sort가 적용됨).
호버 가능한 포인터(마우스)가 있는 장치에서는 헤더에 마우스를 올리거나 화살표에 포커스가 있을 때만 화살표가 표시되므로, 그 외에는 방해되지 않습니다. 호버 기능이 없는 터치 및 기타 굵은 포인터 장치에서는 직접 탭할 수 있도록 항상 표시됩니다. 정렬에 포함된 컬럼은 호버하지 않아도 두 화살표가 모두 표시됩니다. 하나는 정렬 상태를 한눈에 파악할 수 있게 하고, 다른 하나는 방향을 반전하는 작업이 다음으로 수행할 가능성이 가장 높기 때문입니다.
컬럼 헤더의 모든 아이콘은 제어하는 기능과 관계없이 동일한 방식으로 표시됩니다. 해당 기능이 컬럼에 적용되지 않았을 때는 색상이 옅게 표시되고, 적용되면 활성화된 컨트롤에 지정된 색상으로 표시됩니다. 밝은 테마에서는 마젠타색, 어두운 테마에서는 노란색이며, 이때는 호버하지 않아도 계속 표시됩니다. 색상을 옅게 표시할 때는 투명도를 사용하지 않으므로, 아이콘이 컬럼명이나 셀의 색상 코딩 위에서 흐릿하게 보이지 않습니다.
여러 컬럼으로 정렬하기
ORDER BY에서 사용하는 순서로, 첫 번째 키가 우선 적용되고 이후의 각 키는 앞선 키의 동률을 해소합니다. 정렬 키가 둘 이상이면 활성화된 각 화살표에 해당 순서에서 컬럼의 위치도 위첨자로 표시됩니다(▼¹, ▲², …).
이미 정렬 키인 컬럼에서 Shift를 사용하면 정렬 방향만 바뀌고 순서상 위치는 유지됩니다. 컬럼을 비활성화하면 해당 컬럼만 제거되고 나머지 키는 그대로 유지됩니다.
필터링
컬럼 헤더에서
> 10, 문자열에는 LIKE '%test%'와 같은 형식입니다. 입력란은 헤더 셀 안에 열리며, 공간을 확보하기 위해 셀이 두 번째 줄로 확장됩니다. 필터를 설정한 후 필터가 표시되는 줄과 같으므로, 필터를 확인하는 위치에서 바로 편집할 수 있습니다. 입력하는 내용은 컬럼명 뒤에 오는 부분이므로 > 10을 입력하면 WHERE column > 10이 됩니다. 서버가 해당 위치에서 허용하는 모든 표현식을 사용할 수 있습니다. 예: BETWEEN 1 AND 5, IN (1, 2, 3), IS NOT NULL, % 2 = 0.
적용 버튼(또는 Enter)을 누르면 필터가 적용되고 쿼리가 다시 실행됩니다. Esc를 누르거나 다른 곳을 클릭하거나 탭으로 이동하면 편집이 취소되고 입력란이 닫힙니다. 적용할 내용이 없으면 적용 버튼은 비활성화됩니다. 즉, 필터가 없는 컬럼의 빈 입력란에서는 비활성화됩니다. 하지만 필터가 있는 컬럼의 빈 입력란에서는 활성 상태를 유지합니다. 입력란을 비운 뒤 적용하면 필터가 제거되기 때문입니다. 여러 컬럼의 필터는 AND로 결합됩니다.
셀에서
하나를 선택하면 즉시 적용됩니다. 날짜, 시간 또는 enum은 서버가 표시한 텍스트 그대로와 비교되며, ClickHouse는 이를 다시 해당 컬럼의 유형으로 파싱합니다(enum의 경우 값의 이름).
contains는 값에 포함된 % 및 _를 이스케이프한 LIKE 패턴으로 변환되므로 값을 리터럴 그대로 일치시킵니다. 위 항목에 해당하지 않는 값(배열, 튜플, 맵, 긴 텍스트)이 있는 셀에는 메뉴가 제공되지 않지만, 해당 컬럼은 여전히 헤더 입력란에서 필터링할 수 있습니다.
적용 중인 필터
페이지 매김
page 설정으로 지정된 후 쿼리가 다시 실행됩니다. 서버는 페이지를 해당 OFFSET으로 변환합니다. 각 페이지가 정확히 가득 차 더 이상 잘린 것처럼 보이지 않더라도, 결과가 페이지로 나뉘어 표시되는 동안에는 페이지 탐색기가 계속 표시됩니다.
페이지 수는 알 수 없으므로 표시되지 않습니다. 결과의 행 수를 세려면 두 번째 쿼리를 실행해야 합니다. 페이지 탐색기에는 현재 페이지 전의 10개 페이지, 현재 페이지, 다음 페이지가 표시되고 그 뒤에 …가 표시됩니다. …를 클릭하면 원하는 페이지 번호를 입력할 수 있는 입력란으로 바뀌며, 입력란의 포커스가 사라지면 해당 번호가 적용됩니다(Enter를 누르면 포커스가 사라집니다).
현재 페이지가 가득 찬 경우에만 다음 페이지가 제공됩니다. 한 페이지에 들어갈 수 있는 수보다 적은 행이 반환되면 결과의 끝이므로 다음 페이지가 없습니다. (길이가 우연히 페이지 크기의 정확한 배수인 결과에는 페이지가 하나 더 제공되며, 이 페이지는 비어 있는 상태로 반환됩니다. 이 경우를 구분하려면 다시 행 수를 세어야 합니다.)
페이지당에는 한 페이지에 포함되는 행 수가 표시되며, 같은 방식으로 편집할 수 있습니다. 값을 클릭하고 다른 값을 입력하십시오. 이 값은 결과를 한 번에 표시할 수 있는 최대 행 수를 초과할 수 없습니다. 더 큰 페이지는 테이블에서 잘려 표시되지 않을 행까지 반환하고, 다음 페이지는 그 행 다음에서 시작하므로 페이지를 계속 넘기면 표시되지 못한 행이 자동으로 건너뛰어집니다. 더 큰 숫자를 입력하면 이 최댓값이 적용되고 표시되는 값도 최댓값으로 변경됩니다. 새 크기의 페이지에는 다른 행이 포함되므로 값을 변경하면 첫 페이지부터 다시 시작합니다.
정렬이나 필터를 변경하면 첫 페이지로 돌아갑니다. 둘 다 결과에 포함되는 행이나 그 순서를 변경하므로, 사용자가 보고 있던 페이지는 더 이상 결과의 동일한 부분을 가리키지 않습니다.
적용 방식
order, filter, limit, page 쿼리 구성 설정으로 전송됩니다. 서버는 쿼리 텍스트가 아니라 파싱된 쿼리에 이를 적용하므로, 쿼리에 이미 포함된 요소와 함께 사용할 수 있습니다. 즉, UNION, 뒤따르는 FORMAT 절, 기존 ORDER BY 및 LIMIT는 모두 계속 작동하며, 편집기의 쿼리는 재작성되지 않습니다.
컬럼명은 따옴표로 묶인 식별자로 전달되므로, 이름이 표현식(count())이거나 공백을 포함하는 결과 컬럼도 정렬 또는 필터 키로 사용할 수 있습니다.
사용할 수 있는 경우
SELECT 및 UNION 쿼리(WITH 절 또는 FROM으로 시작하는 쿼리 포함)에만 제공됩니다. SHOW, DESCRIBE, EXISTS, EXPLAIN에는 제공되지 않습니다. 이러한 SQL 문도 테이블을 생성하지만 설정이 적용되지 않으므로, 제어 기능을 제공하면 실제 행에는 없는 결과를 약속하게 됩니다.
형태는 단일 SQL 문의 결과에 적용되므로, 각 SQL 문이 서로 다른 컬럼을 사용하는 별도의 쿼리인 “Run all” 다중 SQL 문 실행에는 제공되지 않습니다.
첫 번째 페이지의 결과가 최대 1개 행인 경우에도 제공되지 않습니다. 단일 행의 모든 순서는 동일하며, 해당 행에 대한 필터는 행을 유지하거나 제거할 수만 있으므로 제어 기능은 같은 행에 대해 쿼리를 다시 실행하는 것 외에는 아무것도 할 수 없습니다. 빈 결과에는 제거할 행조차 없습니다. 색상 코딩 토글이 여기에서 숨겨지는 이유도 같습니다. 행이 1개 이하이면 비교할 대상이 없습니다.
다만 다음 2가지 단일 행 결과에서는 제어 기능이 유지됩니다. 이 경우 제어 기능만이 되돌릴 수 있는 유일한 방법이기 때문입니다.
- 이미 정렬되었거나 필터링된 결과입니다. 정렬은 되돌릴 수 있어야 하고 필터는 해제할 수 있어야 합니다. 단일 행과 일치하는 필터는 긴 결과를 짧은 결과로 만드는 정확한 방법이며, 제어 기능을 함께 제거하면 사용자는 필터가 적용된 상태로 남게 됩니다.
- 표시 제한에 의해 잘린 결과로, 더 긴 결과의 첫 번째 페이지에 해당합니다. 페이지 크기는 테이블이 한 번에 표시할 수 있는 셀 수로 제한되므로, 매우 넓은 결과는 단일 행으로 잘릴 수 있으며 그 뒤의 행은 바로 정렬과 페이지 매김을 통해 접근하기 위한 대상입니다.
ORDER BY 또는 WHERE를 적용하지 않고 형태가 해제됩니다.
또한 형태는 해당 SQL 문을 실행한 컨텍스트, 즉 선택한 데이터베이스, 전송 대상 서버와 사용자, 쿼리 매개변수 값에도 연결됩니다. 데이터베이스를 전환한 뒤의 SELECT * FROM events 또는 매개변수를 편집한 뒤의 SELECT * FROM {tbl:Identifier}처럼 이들 중 하나라도 변경되면 동일한 텍스트가 다른 컬럼을 가리키므로, 이 경우에도 형태가 해제되며 다음 실행에서는 형태 지정되지 않은 결과가 반환됩니다.
다운로드 및 복사
지속성
sort_columns, filters, page, page_size), 브라우저 이력, 탭별 결과 스냅샷에 저장됩니다. 따라서 페이지를 새로고침하거나 링크를 공유하거나 뒤로 또는 앞으로 이동해도 형태가 유지됩니다. 형태는 표시 방식뿐 아니라 행 자체를 결정하므로, 쿼리를 자동 실행하는(run=1) 공유 링크는 동일한 형태로 쿼리를 다시 실행하여 결과 자체를 재현합니다. URL과 이력 상태를 간결하게 유지하기 위해 활성화된 형태만 저장됩니다. 즉, 형태가 적용되지 않은 결과는 URL이나 이력 상태에 아무것도 추가하지 않습니다.
위에서 설명한 대로 복원된 결과에서는 해당 결과를 생성한 컨텍스트에 형태가 연결된 상태로 유지됩니다. 스냅샷에는 행이 생성된 데이터베이스, 연결, 매개변수 값이 기록되므로, 이들 중 하나를 변경한 후 문을 다시 실행하면 형태를 다른 결과에 적용하지 않고 삭제합니다.
color coding modes 및 고정된 컬럼과 마찬가지로, 형태는 쿼리 탭별로 유지됩니다. 따라서 한 탭에서 결과를 정렬하거나 필터링해도 다른 탭의 결과가 다시 실행되지는 않습니다.
제한 사항
- 서버에서 적용할 수 없는 형태는 쿼리를 실패시키며, 다른 실패한 쿼리와 마찬가지로 오류가 표시됩니다. 실패한 실행에서는 이를 지울 수 있는 헤더나 페이지 탐색기가 렌더링되지 않으므로 해당 형태는 삭제됩니다.
- 정렬 및 필터링은 결과의 이름으로 컬럼을 식별합니다. 결과에 동일한 이름이 두 번 포함될 수 있으며(
SELECT 1 AS x, 2 AS x, 컬럼명이 같은 테이블의 join), 이러한 컬럼은 이름만으로 구분할 수 없으므로 정렬 또는 필터 제어 기능이 제공되지 않습니다. 같은 결과에서 고유한 이름을 가진 컬럼은 해당 기능을 유지합니다. - 다중 컬럼 정렬에는 Shift 키가 필요하므로 터치 기기에서는 사용할 수 없습니다. 단일 컬럼 정렬은 사용할 수 있습니다.
- 단일 행 결과의 세로(전치) 레이아웃에는 컬럼 헤더가 없으므로 제어 기능도 없습니다. 따라서 사용자가 이미 형태를 적용한 결과는 가로 레이아웃을 유지합니다.