DynamoDB — The expression can not be empty

요약 — 표현식 파라미터(FilterExpression, KeyConditionExpression, ProjectionExpression, UpdateExpression, 또는 ConditionExpression)를 빈 문자열 ""로 전달했습니다. DynamoDB는 표현식 파라미터가 유효한 비어 있지 않은 표현식이거나 완전히 없어야 한다고 요구합니다 — 빈 문자열은 유효하지 않습니다. 실제로 표현식이 있을 때만 파라미터를 포함하세요. 그렇지 않으면 키를 생략하세요.

무엇을 의미하나요

ValidationException: Invalid FilterExpression: The expression can not be empty;
ValidationException: Invalid KeyConditionExpression: The expression can not be empty;

DynamoDB는 빈 문자열을 생략된 파라미터와 다르게 취급합니다. FilterExpression을 생략하면 "필터 없음"을 뜻하고, FilterExpression: ""를 전달하면 "여기 필터가 있음"을 뜻합니다 — 그러면 파싱할 것이 없어 검증이 실패합니다. 같은 것이 모든 표현식 파라미터에 적용됩니다.

왜 발생하나요

  • 조건부로 만든 파라미터가 항상 설정됨 — 코드가 항상 요청 객체에 FilterExpression을 붙인 다음, 필터가 선택되지 않았을 때 ""로 남겨둡니다.
  • 헬퍼/ORM/커넥터가 필터 목록이 비었을 때 키를 삭제하는 대신 빈 표현식 문자열을 방출합니다.
  • 아무것도 산출하지 않은 문자열 연결 — 빈 조건 배열을 결합하면 ""가 됩니다.
  • 다듬어진 콘텐츠 — 플레이스홀더가 제거되어 빈 표현식이 남았습니다.

어떻게 고치나요

  1. 비어 있지 않을 때만 파라미터를 설정하세요. params 객체를 조건부로 만드세요: if (filter) params.FilterExpression = filter; — 절대 ""를 할당하지 마세요.
  2. 호출 전에 빈 키를 삭제하세요 — 값이 빈/공백 문자열인 표현식 속성을 요청에서 제거하세요.
  3. 빌더를 보호하세요 — 조건 목록이 비었으면 표현식을 아예 붙이지 마세요.
  4. 독립적임을 기억하세요 — 그것들을 사용하는 표현식이 없을 때 ExpressionAttributeNames/Values도 생략해야 합니다(아무것도 참조하지 않는 {}가 아니라).
  5. 전체 테이블 읽기의 경우, FilterExpression이 없는 Scan이 올바릅니다 — 빈 것을 전달하기보다 파라미터를 생략하세요.

코드에 연결하기 전에 쿼리를 프로토타이핑하나요? DynoTable 데스크톱 앱에서 실행하세요 — 실제로 채운 표현식 파라미터만 보내므로 빈 문자열 필터를 배포하지 않습니다.

관련 오류

References

공식 AWS 문서(위 링크)를 기준으로 2026-07-13에 마지막으로 검증되었습니다.

Console 없이 DynamoDB 작업하기

DynoTable은 DynamoDB를 위한 빠른 데스크톱 클라이언트입니다 — 테이블을 탐색하고, SQL 스타일 쿼리를 실행하고, 항목을 로컬에서 편집하세요.