옵시디언 활용/Dataview

Dataview 기초: 소개

반응형

개요

Dataview 플러그인은 노트와 데이터를 효율적으로 관리하고, 복잡한 워크플로우를 구축할 수 있게 해주는 강력한 도구입니다. 이 플러그인은 SQL과 유사한 쿼리 언어를 사용하여 노트 내 Task, Tags, Property 등을 조회하고, 그 결과를 Table, Task, List, Calendar 형태로 표시할 수 있습니다.

 

이러한 기능은 특히 이전에 Notion을 사용했던 사용자들이나 옵시디언 내에서 고급 워크플로우를 구축하려는 사용자들에게 매력적일 것입니다.

Dataview 타입

옵시디언에서 제공하는 Dataview 타입은 4가지가 있습니다.

테이블(Table)

```dataview
Table 
file.cday
From "Index"
sort file.cday desc
```

리스트(List)

```dataview
List 
From #dailynote
```

태스크(Task)

```dataview
Task 
From #todo
```

캘린더(Calendar)

```dataview
CALENDAR 
file.ctime 
```

Dataview와 메타데이터

Dataview에서 사용하는 데이터는 노트의 메타데이터입니다. 이 메타데이터 유형은 두가지가 있습니다.

Implicit field

Dataview는 각 노트에 대량의 메타데이터를 자동으로 추가합니다. 이를 자체내장필드(Implicit field)라고 합니다.

  • file.name: 파일 이름
  • file.folder: 파일이 속한 폴더의 경로
  • file.path: 파일 이름을 포함한 전체 파일 경로
  • file.ext: 파일 유형의 확장자
  • file.link: 파일로의 링크
  • file.size: 파일의 크기(바이트 단위)
  • file.ctime: 파일이 생성된 날짜와 시간
  • file.cday: 파일이 생성된 날짜
  • file.mtime: 파일이 마지막으로 수정된 날짜와 시간
  • file.mday: 파일이 마지막으로 수정된 날짜
  • file.tags: 노트에 있는 모든 고유 태그의 목록. 하위 태그는 각 레벨별로 나누므로 #Tag/1/A는 [#Tag, #Tag/1, #Tag/1/A]로 저장됩니다.
  • file.etags: 노트에 있는 모든 명시적 태그의 목록. file.tags와 달리 하위 태그를 나누지 않습니다. 예: [#Tag/1/A]
  • file.inlinks: 이 파일로 들어오는 모든 링크의 목록
  • file.outlinks: 이 파일에서 나가는 모든 링크의 목록
  • file.aliases: 프로퍼티에서 정의된 노트의 모든 별칭 목록
  • file.tasks: 이 파일에 있는 모든 Task 의 목록
  • file.lists: 파일 내의 모든 목록 요소(Task 포함)의 목록
  • file.frontmatter: 원시 프론트매터 값을 확인하거나, 동적으로 프론트매터 키를 나열할 때 사용합니다.
  • file.day: 파일 이름에 날짜가 포함되어 있거나, Date 필드/인라인 필드가 있는 경우에만 사용할 수 있습니다.
  • file.starred: 이 파일이 북마크 유무 확인

사용자 정의 메타데이터

노트에 사용자 정의 데이터를 추가하여 Dataview에 활용할 수 있습니다. 프로퍼티나 인라인필드 형태로 입력할 수 있습니다.

 

옵시디언 심화: 프로퍼티(Properties)

프로퍼티(Properties)란? 프로퍼티(Properties)는 MP3 파일의 메타데이터와 유사합니다. MP3 파일에는 노래 제목, 아티스트, 앨범 커버와 같은 정보가 메타데이터로 저장됩니다. 마찬가지로 마크다운 문

kaminik.tistory.com

Dataview의 시작하기

시작

```dataview
```

dataveiw는 백틱 3개(```)와 dataview로시작하고 백틱 3개(```)로 종료합니다.

형태 지정

```dataview
TABLE
```

TABLE, LIST, TASK, CALENDAR 중 하나를 지정합니다.

without ID를 사용하면 기본적으로 생성되는 파일명 열을 제거할 수 있습니다.

```dataview
TABLE without ID
```

FIELD

```dataview
TABLE
file.name, 
tags, 
file.cday
```

표시할 데이터 열(column) 선언. 프론트메터가 여기에서 선언됩니다.

```dataview
TABLE
file.name as "제목", 
tags as "태그", 
file.cday as "만든날"
```

as ""를 사용하면 각 필드의 헤더를 다름 이름으로 바꿀 수 있습니다.

FROM

```dataview
TABLE
file.name, 
tags, 
file.cday
FROM #Project
```

데이터 소스 지정합니다. 보통 폴더명, 태그명을 지정합니다.

FROM "Project/Done"

폴더로 지정할 경우, 대소문자를 구분합니다.

FROM "Project/Done" AND #Project

폴더와 태그를 같이 사용 할 수도 있습니다.

WHERE

```dataview
TABLE
file.name, 
tags, 
file.cday
FROM #Project
Where file.mtime >= date(today) - dur(1 week)
```

필터 조건 설정할 수 있습니다. contains, startsWith, endsWith 같은 함수와 >, <, = 같은 연산자를 통해 다양한 조건을 설정할 수 있습니다.

Where status = "In Progress"

status 필드에서 In Progress인 것만 선택합니다.

WHERE contains(suffix, "-ate")

suffix 필드에서 '-ate' 단어를 포함하는 노트들만을 선택합니다.

WHERE startsWith(file.name, "2024-")

파일 이름이 '2024-'로 시작하는 노트들만 선택합니다.

WHERE endsWith(tags, "회의")

태그들중 '회의'로 끝나는 노트들만 선택합니다.

SORT

```dataview
TABLE
file.name, 
tags, 
file.cday
FROM #Project
Where file.mtime >= date(today) - dur(1 week)
SORT file.mtime DESC
```

정렬 기준 설정합니다. 모든 필드를 기준으로 정렬할 수 있으며, 오름차순(ASC), 내림차순(DESC)을 결정할 수 있습니다.

Dataview 예제

Table

```dataview
TABLE without ID
file.name as "제목", 
length(file.content) as "글자수", 
file.ctime as "생성일"
FROM "Daily Notes"
WHERE length(file.content) > 1000
SORT length(file.content) DESC
```

이 스크립트는 Daily Notes폴더내 각 파일에 대해 제목, 글자 수, 생성일를 표시해줍니다. 글자 수가 1000자를 넘는 노트만을 출력하고, 글자 수가 많은 순으로 정렬합니다.

List

```dataview
LIST
FROM #books 
WHERE author = "작가명"
```

태그로 검색

```dataview
LIST 
author
FROM #books
```

특정요소가 있는 파일 나열

```dataview
LIST WITHOUT ID 
author
FROM "Books"
WHERE author
```

파일명은 표시하지않고(without ID), Books폴더내 author요소가 있는 모든 파일을 나열합니다. 

 

목록을 그룹화

```dataview
LIST 
rows.file.link
FROM "books"
GROUP BY author
```

목록의 요소로 정렬

```dataview
LIST author
FROM "books"
SORT author
```

Task

```dataview
TASK
FROM #todo
WHERE !completed AND due > today()
SORT due
```

이 스크립트는 #todo 태그가 있는 노트의 미완료 체크리스트 항목을 마감 기한이 임박한 순으로 표시합니다. !completed는 완료되지 않은 항목을 의미하고, due > today()는 오늘 이후로 마감 기한이 설정된 항목을 필터링합니다.

 

완료되지 않은 Task 나열

```dataview
TASK
FROM "Projects"
WHERE !completed
```

파일별로 Task 그룹화

```dataview
TASK
FROM "Projects"
GROUP BY file.link
```

태그가 붙은 Task 나열

```dataview
TASK
FROM "Projects"
WHERE contains(tags, "#project")
```

마감일이 있는 작업 나열

```dataview
TASK
FROM "Projects"
WHERE duedate
```

완료 시간을 기준으로 완료된 Task 정렬

```dataview
TASK
FROM "Projects"
WHERE completed
SORT completion
```

Calendar

폴더 검색

```dataview
CALENDAR
file.day
FROM "Daily Notes"
```

태그로 검색

```dataview
CALENDAR
file.day
FROM #daily
```

폴더와 태그의 조합으로 검색

```dataview
CALENDAR
file.day
FROM "Daily Notes" OR #journal 
```

모든 파일 검색

```dataview
CALENDAR 
file.ctime 
```

Dataview와 SQL의 차이점

Dataview Query Language(이하 DQL)과 SQL의 주요 차이점은 다음과 같습니다.

실행 방식의 차이

DQL 쿼리는 위에서 아래로 순차적으로 실행되며, 각 줄이 하나의 데이터 명령으로 처리됩니다. 이는 DQL 쿼리가 컴퓨터 프로그램처럼 작동한다는 것을 의미합니다. 각 줄이 실행될 때마다 결과 집합을 생성하고, 이 결과 집합은 다음 줄로 전달되어 추가적인 조작을 받습니다. 이러한 방식 때문에 DQL에서는 여러 WHERE을 사용할 수 있습니다.

문법의 차이

  • 쿼리 시작: DQL은 SELECT로 시작하지 않고, 결과를 어떻게 표시할지 결정하는 키워드(예: TABLE, LIST, TASKS, CALENDAR)로 시작합니다.
  • 필드 목록: SQL의 SELECT 다음에 오는 필드 목록과 유사하게, DQL에서도 표시할 필드를 명시합니다.
  • FROM: DQL의 FROM 다음에는 테이블 이름 대신 복잡한 표현식이 오며, 여기서 파일의 태그, 파일명, 경로명 등을 필터링할 수 있습니다.
  • WHERE, SORT, GROUP BY: DQL은 여러 개의 WHERE, SORT, GROUP BY 명령을 사용할 수 있습니다.
  • FLATTEN 명령: SQL에는 없는 FLATTEN 명령을 DQL에서는 사용하여 결과 집합의 깊이를 줄일 수 있습니다.
  • 정렬: SQL에서는 ORDER BY를 사용해 정렬하지만, DQL에서는 SORT 명령을 사용합니다.

DQL은 SQL의 기본 개념을 바탕으로 하지만, Obsidian의 환경과 요구에 맞게 특화된 쿼리 언어입니다. 따라서 SQL 경험이 있는 사용자도 DQL의 방식과 기능을 익히기 위해 시간을 할애해야 합니다.

마치며

Dataview 플러그인은 옵시디언 사용자들이 노트와 데이터를 더욱 효율적으로 관리하고, 복잡한 워크플로우를 구축할 수 있게 해주는 강력한 도구입니다. 하지만 이를 최대한 활용하기 위해서는 충분한 시간과 노력이 필요합니다. 


 

반응형