null 값에 대한 zure 테이블 저장소 쿼리
zure 테이블 저장소에 null 값을 쿼리하는 올바른 방법을 아는 사람이 있습니까?제가 읽은 바로는 가능합니다(비록 개발 저장소에서 방지하는 버그가 있지만).그러나 라이브 클라우드 스토리지에서 실행할 때 다음 오류가 계속 발생합니다.
요청 입력 중 하나가 잘못되었습니다.
이것은 제가 정리한 LINQ 쿼리의 덤다운 버전입니다.
var query = from fooBar in fooBarSVC.CreateQuery<FooBar>("FooBars")
where fooBar.PartitionKey == kPartitionID
&& fooBar.Code == kfooBarCode
&& fooBar.Effective_Date <= kFooBarDate.ToUniversalTime()
&& (fooBar.Termination_Date > kFooBarDate.ToUniversalTime() || fooBar.Termination_Date == null)
select fooBar;
null을 확인하지 않고 쿼리를 실행하면 정상적으로 작동합니다.가능한 해결책은 이 쿼리가 반환하는 컬렉션에서 두 번째 쿼리를 실행하는 것입니다.필요하다면 그렇게 해도 상관없지만, 먼저 이 방법을 사용할 수 있는지 알고 싶습니다.
제가 잘못하고 있는 게 분명해 보이는 사람 있나요?
문제는 zure 테이블 저장소에 스키마가 없기 때문에 null 열이 실제로 존재하지 않는다는 것입니다.이것이 당신의 쿼리가 유효하지 않습니다.테이블 저장소에는 null 열이 없습니다.정말로 필요하다면 빈 문자열을 저장하는 것과 같은 것을 할 수 있습니다.여기서 근본적인 문제는 Azure 테이블 스토리지가 파티션 키와 행 키 이외의 열에서 쿼리하도록 설계되지 않았다는 것입니다.이러한 비표준 열 중 하나에 대해 쿼리를 수행할 때마다 테이블 스캔이 수행됩니다.많은 데이터를 얻기 시작하면 쿼리 시간 초과 비율이 매우 높아집니다.이러한 유형의 쿼리에 대한 수동 인덱스를 설정하는 것이 좋습니다.예를 들어, 행 키의 값이 서로 다른 동일한 데이터를 같은 테이블에 저장할 수 있습니다.궁극적으로, 당신의 지역 앱이 사용률이 높지 않다면, 당신이 하고 있는 쿼리 유형에 훨씬 더 유연하기 때문에 SQL Azure를 사용할 것입니다.
업데이트: Azure는 테이블 스토리지 설계에 대한 훌륭한 가이드를 가지고 있어 제가 읽기를 추천합니다.http://azure.microsoft.com/en-us/documentation/articles/storage-table-design-guide/
저는 방금 이 문제를 겪었고 실제로 무효를 테스트하기 위한 멋진 닌자 트릭을 발견했습니다.저는 Azure Storage 인터페이스를 직접 사용하고 있지만, 당신이 그렇게 한다면 LINQ에서도 작동할 것이라고 90% 확신합니다.
가격(Int32?)이 null인지 확인하기 위해 수행한 작업은 다음과 같습니다.
not (Price lt 0 or Price gt 0)
저는 당신의 경우에 fooBar를 테스트하여 LINQ에서도 동일한 작업을 수행할 수 있다고 생각합니다.Termination_Date가 DateTime보다 작거나 큽니다.예를 들어 UtcNow.이와 같은 것:
where fooBar.PartitionKey == kPartitionID
&& fooBar.Code == kfooBarCode
&& fooBar.Effective_Date <= kFooBarDate.ToUniversalTime()
&& (fooBar.Termination_Date > kFooBarDate.ToUniversalTime()
|| (not (fooBar.Termination_Date < DateTime.UtcNow
or fooBar.Termination_Date > DateTime.UtcNow))
select fooBar;
MyColumn이라는 문자열 열에 대해 다음을 입력할 수 있었습니다.not(MyColumn gt '')
위의 Mike S 답변은 저를 올바른 길로 이끌었습니다.
문자열의 경우 빈 문자열과 비교할 수 있습니다.
IsNotBlank(value)
가능:
(Value gt '')
.NET용 AzureTables 클라이언트 라이브러리를 사용하여 쿼리null
GUID 값.
샘플 코드에서 속성의 이름은 MyColumn입니다.
var filter = Azure.Data.Tables.TableClient
.CreateQueryFilter($"not(MyColumn gt {Guid.Empty})");
테이블 클라이언트.CreateQueryFilter 메서드는 다음과 같이 필터를 생성합니다.
not(MyColumn gt guid'00000000-0000-0000-0000-000000000000')
언급URL : https://stackoverflow.com/questions/4228460/querying-azure-table-storage-for-null-values
'programing' 카테고리의 다른 글
Xcode: 빌드 실패, 오류 메시지 없음 (0) | 2023.05.18 |
---|---|
jQuery: 테이블의 행 수 카운트 (0) | 2023.05.18 |
Python 프로젝트에서 상대 경로를 사용하여 파일 읽기 (0) | 2023.05.18 |
UITapGesture Recognizer가 있는 뷰 내부의 UIButton (0) | 2023.05.18 |
키 값 데이터 저장소에 디렉터리 계층 저장 (0) | 2023.05.18 |