filesystem 테이블 함수

filesystem 테이블 함수 (filesystem)

디렉터리를 재귀적으로 순회하면서 파일 메타데이터(경로, 크기, 타입, 권한, 수정 시간)와 선택적으로 파일 내용을 담은 테이블을 반환해요.

clickhouse-server 모드에서는 경로가 user_files_path 디렉터리 안에 있어야 합니다. user_files_path 내부에서 밖을 가리키는 심볼릭 링크는 따라가지만, (심볼릭 링크를 통한) 경로가 user_files_path로 시작하는 항목만 반환됩니다.

clickhouse-local 모드에서는 경로 제한이 없어요.

출처: 문서

본문

디렉터리를 재귀적으로 순회해 파일 메타데이터(경로, 크기, 타입, 권한, 수정 시간)와 선택적으로 파일 내용을 담은 테이블을 반환합니다.

clickhouse-server 모드에서는 경로가 user_files_path 디렉터리 안에 있어야 합니다. user_files_path 안의 심볼릭 링크가 밖을 가리켜도 따라가지만, (심볼릭 링크를 통한) 경로가 user_files_path로 시작하는 항목만 반환됩니다.

clickhouse-local 모드에서는 경로 제한이 없습니다.

구문

filesystem([path])

인자

파라미터 설명
path 나열할 디렉터리. 절대 경로(서버 모드에서는 user_files_path 안에 있어야 함) 또는 user_files_path에 대한 상대 경로입니다. 비어 있거나 생략하면 user_files_path로 기본 설정됩니다.

반환 컬럼

컬럼 타입 설명
path String 항목이 있는 디렉터리(파일/디렉터리 이름 자체는 포함하지 않음).
name String 파일 또는 디렉터리 이름(경로의 마지막 구성 요소).
file String (name의 ALIAS) name 컬럼의 별칭.
type Enum8 파일 타입: 'none', 'not_found', 'regular', 'directory', 'symlink', 'block', 'character', 'fifo', 'socket', 'unknown'.
size Nullable(UInt64) 파일 크기(바이트, 일반 파일용). 일반 파일이 아닌 항목(디렉터리, 심볼릭 링크 등)과 오류 시 NULL.
depth UInt16 재귀 깊이. 조회한 디렉터리 자체와 그 직계 자식은 0, 한 단계 더 깊은 항목은 1 등.
modification_time Nullable(DateTime64(6)) 마이크로초 정밀도의 마지막 수정 시간. 오류 시 NULL.
is_symlink Bool 항목이 심볼릭 링크인지 여부.
content Nullable(String) 파일 내용(일반 파일용). 일반 파일이 아닌 항목(디렉터리, 심볼릭 링크 등)은 NULL. 읽기 오류는 예외를 발생시킵니다. 이 컬럼을 읽으면 실제 파일 I/O가 발생하므로, 필요 없으면 생략하세요.
owner_read Bool 소유자 읽기 권한.
owner_write Bool 소유자 쓰기 권한.
owner_exec Bool 소유자 실행 권한.
group_read Bool 그룹 읽기 권한.
group_write Bool 그룹 쓰기 권한.
group_exec Bool 그룹 실행 권한.
others_read Bool 기타 사용자 읽기 권한.
others_write Bool 기타 사용자 쓰기 권한.
others_exec Bool 기타 사용자 실행 권한.
set_gid Bool Set-GID 비트.
set_uid Bool Set-UID 비트.
sticky_bit Bool 고정(sticky) 비트.

쿼리에서 실제로 사용한 컬럼만 계산되므로, 컬럼의 부분 집합(특히 content 생략)을 선택하면 효율적입니다.

예제

user_files의 파일 나열하기

SELECT name, type, size, depth
FROM filesystem()
ORDER BY name;

큰 파일 찾기

SELECT path, name, size
FROM filesystem()
WHERE type = 'regular' AND size > 1000000
ORDER BY size DESC;

파일 내용 읽기

SELECT name, content
FROM filesystem('my_directory')
WHERE name LIKE '%.csv';

직계 자식만 나열하기

SELECT name, type
FROM filesystem('my_directory')
WHERE depth = 0;

더 알아보기 (Learn more)