필터 & 쿼리 패턴

모든 테이블 탭은 필터를 가집니다. DynoTable이 DynamoDB 요청으로 바꾸는 술어 상태입니다. 각 조각이 queryscan 중 무엇에 대응되는지 익히는 것이 앱을 빠르게, 청구서를 작게 만드는 일의 대부분입니다.

이 페이지는 비주얼 탭 모드를 다룹니다. SQL 스타일 쿼리를 직접 쓰려면 PartiQL로 전환하고, 조인과 집계가 필요하면 Workbench를 여세요.

필터 행

비주얼 모드는 가로로 놓인 필 한 줄을 보여 줍니다.

[Index] [hashKey = value] [rangeKey op value] [+ filter] | [Clear] [Query/Scan]
  • 인덱스 필 — 읽어 들일 쿼리 패턴.
  • 키 필 — 그 패턴의 파티션(해시) 키와, 있다면 정렬(범위) 키.
  • 필터 필 — 키가 아닌 추가 조건(스캔 필터).
  • 액션 버튼은 설정한 내용에 따라 Query 또는 Scan으로 표시되며, 결과가 스트리밍되기 시작하면 Load more로 바뀝니다.

값을 설정하면 DynoTable이 자동으로 실행합니다. 필을 지우거나 편집하면 필터가 다시 유효해지는 즉시 재실행됩니다.

비주얼 필터 행: 인덱스 선택기, 키 필, 추가된 스캔 필터, 그리고 실행 버튼.
비주얼 필터 행: 인덱스 선택기, 키 필, 추가된 스캔 필터, 그리고 실행 버튼.

쿼리 패턴

쿼리 패턴은 읽어 들일 인덱스입니다.

  • PRIMARY — 테이블 자체의 / .
  • 이름이 붙은 또는 — 각자의 키 schema.

선택한 패턴이 어떤 키로 필터링할 수 있는지를 결정합니다. 인덱스 필에서 패턴을 바꾸면 키 필이 그 패턴의 파티션 키와 정렬 키로 갱신됩니다.

Query vs scan

비용과 속도를 가르는 구분은 이것입니다.

  • 필터를 설정하면 DynoTable은 정밀한 를 발행합니다 — 일치하는 파티션만 읽습니다. 저렴하고 빠릅니다.
  • 그것이 없으면 으로 넘어가 테이블(또는 인덱스) 전체를 페이지 단위로 읽습니다. 액션 버튼이 Scan으로 표시되어 이를 분명히 알려 줍니다.

키 필터

파티션 키 필은 값을 받으며, 값이 설정되는 순간 액션이 Query로 바뀝니다. 정렬 키 필은 그 위에 비교를 얹습니다.

  • =, <, <=, >, >= — 순서 비교(숫자, 그리고 문자열의 사전식 순서).
  • begins_with — 문자열 또는 이진 값의 접두사 일치.
  • between — 양끝을 포함하는 범위. 필에 두 번째 값 입력란이 생깁니다.

문자열 타입 키는 로컬 인덱스의 값에서 자동 완성을 제공합니다. 인덱스가 어떻게 만들어지고 무엇을 포함하는지는 테이블 통계를 참고하세요. 쓸 만한 제안이 없는 키(예를 들어 무작위 UUID)는 일반 입력란으로 되돌아갑니다.

스캔 필터

+ filter 필은 키가 아닌 조건을 추가합니다 — 키뿐 아니라 어떤 속성이든 가능합니다. 각 필터는 컬럼, 연산자, 값으로 구성됩니다.

  • 비교: =, , <, <=, >, >=, between.
  • 포함 여부: in — 목록에 있는 값 중 하나와 일치(문자열 또는 숫자).
  • 문자열 / 이진: begins_with, contains.
  • 존재 여부: exists, not exists.
  • 타입: type equals / type not equals(DynamoDB 타입 코드 기준 — S, N, BOOL, …), 그리고 컬렉션 타입을 위한 size 계열.

제공되는 연산자는 속성 타입에 맞춰 달라집니다 — 숫자에는 순서 비교가, 문자열에는 begins_with가 나타납니다. 스캔 필터는 쿼리나 스캔이 항목을 읽은 뒤에 적용되므로 결과를 좁혀 줄 뿐 스캔을 저렴하게 만들지는 않습니다. 읽는 양을 줄이려면 키 필터를, 돌아오는 결과를 다듬으려면 스캔 필터를 사용하세요.

단일 테이블 설계: 복합 키

단일 테이블 설계는 여러 엔터티 타입을 키 접두사 뒤에 하나의 테이블로 묶습니다 — USER#123, ORDER#456, TENANT#acme처럼요. DynoTable은 별도 설정 없이 이를 스스로 인식합니다.

  • 키가 제자리에서 해석됩니다. 복합 값 — 대문자 접두사가 #, |, ~로 나머지와 이어진 형태 — 은 모든 그리드에서 라벨이 붙은 조각들로 렌더링됩니다. 테이블, PartiQL 결과, Workbench 모두에서요. 단지 그런 문자를 포함할 뿐인 일반 값(예: #FF5733 같은 16진수 색상, 파이프로 구분된 목록)은 그대로 둡니다.
  • 클릭 한 번으로 엔터티만 필터링. 행을 오른쪽 클릭하고 Filter to USER#를 고르세요 — 접두사는 그 행의 키에서 그대로 읽어 옵니다. DynoTable은 키에 진짜 begins_with를 일반 필터 필로 적용하며, 평소처럼(필의 Clear로) 지울 수 있습니다. 한 행의 파티션 키와 정렬 키에 둘 다 접두사가 있으면 각각에 대한 선택지가 제공됩니다.

대화 상자도, 설정도, 저장되는 것도 없습니다 — 눈앞의 키에서 실시간으로 도출됩니다.

오버로드된 테이블에서 행을 오른쪽 클릭한 메뉴 — 라벨이 붙은 조각으로 해석된 키 위에 Filter to USER#와 Filter to POST# 패싯이 표시됩니다.
오버로드된 테이블에서 행을 오른쪽 클릭한 메뉴 — 라벨이 붙은 조각으로 해석된 키 위에 Filter to USER#Filter to POST# 패싯이 표시됩니다.

정렬과 페이징

정렬 키 필에는 DynamoDB의 ScanIndexForward에 대응되는 정렬 순서 토글(오름차순 / 내림차순)이 있습니다. 결과는 한 번에 한 페이지씩 스트리밍됩니다 — Load more가 다음 페이지를 가져오고, 페이지 크기를 바꾸면 첫 페이지부터 다시 불러옵니다.

Run to end

기본적으로 쿼리나 스캔은 큰 테이블이 한꺼번에 로드되지 않도록 몇 페이지 뒤에 멈춥니다 — 액션 버튼이 Load more로 바뀌어 다음 페이지를 가져옵니다. 한 번에 전부 가져오고 싶다면 실행 모드를 전환하세요.

  • 액션 버튼 옆의 셰브런을 클릭하고 Run to end를 고르세요. 기본 버튼이 Scan all / Query all / Run all로 바뀝니다 — 페이지 예산에서 멈춰 있을 때도 마찬가지이며, 그 상태에서 클릭하면 끝까지 소진합니다.
  • 이름이 바뀐 버튼을 클릭하면 DynoTable이 테이블(또는 인덱스) 전체를 읽을 때까지 페이지를 계속 가져옵니다. 이 선택은 세션 동안 탭별로 기억됩니다. 되돌리려면 Paged를 고르세요. 모드를 고르는 것만으로 실행이 시작되지는 않습니다 — 버튼 이름만 바뀌므로 언제 실행할지는 여러분이 정합니다.

큰 테이블에서는 Run to end를 준비할 때 먼저 테이블의 대략적인 크기와 항목 수가 담긴 확인 프롬프트가 표시되어, 전체 스캔이 사고가 아니라 항상 의도적인 선택이 되도록 합니다. 확인하면 진행하고, 취소하면 페이지 모드로 남습니다.

실행 모드 분할 버튼 — Load more 버튼 옆에 Paged와 Run to end가 있는 셰브런 메뉴.
실행 모드 분할 버튼 — Load more 버튼 옆에 Paged와 Run to end가 있는 셰브런 메뉴.

키보드에서는 이렇습니다.

  • ⌘↩는 현재 쿼리를 실행합니다 — 결과가 페이지 예산에서 멈춰 있을 때는 처음부터 다시 시작하지 않고 다음 페이지로 이어집니다.
  • ⌘⇧↩는 항상 한 번에 끝까지 실행합니다.
  • ⌘. 또는 Esc는 진행 중인 실행을 언제든 중지합니다.

업데이트됨