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/커넥터가 필터 목록이 비었을 때 키를 삭제하는 대신 빈 표현식 문자열을 방출합니다.
- 아무것도 산출하지 않은 문자열 연결 — 빈 조건 배열을 결합하면
""가 됩니다. - 다듬어진 콘텐츠 — 플레이스홀더가 제거되어 빈 표현식이 남았습니다.
어떻게 고치나요
- 비어 있지 않을 때만 파라미터를 설정하세요. params 객체를 조건부로 만드세요:
if (filter) params.FilterExpression = filter;— 절대""를 할당하지 마세요. - 호출 전에 빈 키를 삭제하세요 — 값이 빈/공백 문자열인 표현식 속성을 요청에서 제거하세요.
- 빌더를 보호하세요 — 조건 목록이 비었으면 표현식을 아예 붙이지 마세요.
- 독립적임을 기억하세요 — 그것들을 사용하는 표현식이 없을 때
ExpressionAttributeNames/Values도 생략해야 합니다(아무것도 참조하지 않는{}가 아니라). - 전체 테이블 읽기의 경우,
FilterExpression이 없는Scan이 올바릅니다 — 빈 것을 전달하기보다 파라미터를 생략하세요.
코드에 연결하기 전에 쿼리를 프로토타이핑하나요? DynoTable 데스크톱 앱에서 실행하세요 — 실제로 채운 표현식 파라미터만 보내므로 빈 문자열 필터를 배포하지 않습니다.
관련 오류
- Query key condition not supported — 잘못된 형식의(비어 있지 않은)
KeyConditionExpression. - Invalid UpdateExpression syntax — 비어 있지 않지만 잘못된 형식의 업데이트 표현식.
- 학습: Filtering strategies · Key condition expressions
References
- Using expressions in DynamoDB — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
- Scan — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
공식 AWS 문서(위 링크)를 기준으로 2026-07-13에 마지막으로 검증되었습니다.