.replace extents 명령
적용 대상: ✅Azure Data Explorer
이 명령은 특정 데이터베이스의 컨텍스트 내에서 단일 트랜잭션의 익스텐트를 삭제하고 이동합니다. 이 명령은 대상 테이블에서 지정된 익스텐트만 삭제하고 지정된 익스텐트에서 원본 테이블로 이동합니다.
참고 항목
데이터 분할된 데이터베이스를 익스텐트라고 하며 모든 명령은 동의어로 "익스텐트" 또는 "익스텐트"를 사용합니다. 익스텐트(데이터 분할)에 대한 자세한 내용은 익스텐트(데이터 분할) 개요를 참조하세요.
사용 권한
원본 및 대상 테이블에 대한 테이블 관리자 권한 이상이 있어야 합니다.
제한 사항
- 원본 테이블과 대상 테이블은 모두 컨텍스트 데이터베이스에 있어야 합니다.
- ExtentsToDropQuery에 지정된 모든 익스텐트에서 대상 테이블에 속해야 합니다.
- 원본 테이블의 모든 열은 이름과 데이터 형식이 같은 대상 테이블에 존재해야 합니다.
- 대상 테이블이 구체화된 뷰의 원본 테이블인 경우 구체화된 뷰가 이동된 익스텐트의 레코드를 처리할 수 없으므로 명령이 실패할 수 있습니다. 구체화된 뷰 제한 사항 페이지에서 자세한 내용을 참조하세요. 이동 명령 중에 새 수집 시간을 설정하여 이 오류를 해결할 수 있습니다. 지원되는 속성을 참조하세요.
setNewIngestionTime
구문
.replace
[async
] extents
in
table
DestinationTableName [ with
(
PropertyName =
PropertyValue [,
...]] <|
{
)
ExtentsToDropQuery},{
ExtentsToMoveQuery}
구문 규칙에 대해 자세히 알아봅니다.
매개 변수
이름 | Type | 필수 | 설명 |
---|---|---|---|
async |
string |
지정된 경우 명령은 비동기적으로 실행됩니다. | |
DestinationTableName | string |
✔️ | 익스텐트 이동을 위한 테이블의 이름입니다. |
FromDate | datetime |
쿼리 창 시작 날짜입니다. | |
ToDate | datetime |
쿼리 창 종료 날짜입니다. | |
PropertyName, PropertyValue | string |
하나 이상의 지원되는 속성입니다. | |
ExtentsToDropQuery | string |
✔️ | 이 쿼리의 결과에는 대상 테이블에서 제거할 익스텐트 ID가 포함된 열이 포함되어 ExtentId 야 합니다. |
ExtentsToMoveQuery | string |
✔️ | 이 쿼리의 결과에는 원본 테이블과 TableName 대상 테이블로 이동할 익스텐트 ID가 포함된 열과 열이 포함되어 ExtentId 야 합니다. |
지원되는 속성
Property name | Type | 필수 | 설명 |
---|---|---|---|
setNewIngestionTime |
bool |
이 값으로 true 설정하면 새 수집 시간이 이동되는 범위의 모든 레코드에 할당됩니다. 이는 구체화된 뷰 및 연속 데이터 내보내기와 같이 데이터베이스 커서에 의존하는 워크로드에서 레코드를 처리할 때 유용합니다. |
|
extentCreatedOnFrom |
datetime |
✔️ | 이 시점 이후에 만든 익스텐트에서 적용합니다. |
extentCreatedOnTo |
datetime |
✔️ | 이 시점 이전에 만든 익스텐트에서 적용합니다. |
참고 항목
성능을 향상시키려면 extentCreatedOnFrom 및 extentCreatedOnTo 매개 변수를 가능한 가장 작은 범위로 설정합니다.
반품
명령이 동기적으로 실행되면 다음 스키마가 있는 테이블이 반환됩니다.
출력 매개 변수 | Type | 설명 |
---|---|---|
OriginalExtentId | string |
대상 테이블로 이동된 원본 테이블의 원래 익스텐트 또는 삭제된 대상 테이블의 익스텐트에 대한 고유 식별자(GUID)입니다. |
ResultExtentId | string |
원본 테이블에서 대상 테이블로 이동한 결과 익스텐트용 고유 식별자(GUID)입니다. 대상 테이블에서 익스텐트 삭제된 경우 비어 있습니다. 실패 시: "실패했습니다." |
세부 정보 | string |
작업이 실패하는 경우 오류 세부 정보를 포함합니다. |
명령이 비동기적으로 실행되면 작업 ID(GUID)가 반환됩니다. .show operations 명령을 사용하여 작업의 상태를 모니터링하고 .show 작업 세부 정보 명령을 사용하여 성공적인 실행 결과를 검색합니다.
참고 항목
ExtentsToDropQuery 쿼리에서 반환된 익스텐스가 대상 테이블에 없으면 명령이 실패합니다. 이 문제는 replace 명령이 실행되기 전에 익스텐트 병합된 경우에 발생할 수 있습니다. 누락된 익스텐트에서 명령이 실패하는지 확인하려면 쿼리가 예상된 ExtentId를 반환하는지 확인합니다. 테이블 MyOtherTable에 삭제 범위가 없으면 첫 번째 예제가 실패합니다. 그러나 두 번째 예제는 삭제할 쿼리가 익스텐트 ID를 반환하지 않았기 때문에 삭제 범위가 없더라도 성공합니다.
예제
지정된 생성 시간 범위의 모든 익스텐트를 두 테이블에서 이동
지정된 생성 시간 범위의 두 특정 테이블(MyTable1
, MyTable2
)에서 테이블MyOtherTable
로 모든 익스텐트를 이동하고 태그가 지정된 모든 익스텐트를 다음과 같이 drop-by:MyTag
삭제합니다MyOtherTable
.
.replace extents in table MyOtherTable with (extentCreatedOnFrom=datetime(2023-03-10), extentCreatedOnTo=datetime(2023-03-12)) <|
{
.show table MyOtherTable extents where tags has 'drop-by:MyTag'
},
{
.show tables (MyTable1,MyTable2) extents
}
샘플 출력
OriginalExtentId | ResultExtentId | 세부 정보 |
---|---|---|
e133f050-a1e2-4dad-8552-1f5cf47cab69 | 0d96ab2d-9dd2-4d2c-a45e-b24c65aa6687 | |
cdbeb35b-87ea-499f-b545-defbae091b57 | a90a303c-8a14-4207-8f35-d8ea94ca45be | |
4fcb4598-9a31-4614-903c-0c67c286da8c | 97aafea1-59ff-4312-b06b-08f42187872f | |
2dfdef64-62a3-4950-a130-96b5b1083b5a | 0fb7f3da-5e28-4f09-a000-e62eb41592df |
지정한 생성 시간 범위의 모든 익스텐트를 한 테이블에서 다른 테이블로 이동하고 특정 익스텐트를 삭제합니다.
지정된 생성 시간 범위의 모든 익스텐트를 특정 테이블(MyTable1
)에서 테이블 MyOtherTable
로 이동하고 ID에 따라 특정 익스텐 MyOtherTable
트를 삭제합니다.
.replace extents in table MyOtherTable with (extentCreatedOnFrom=datetime(2023-03-10), extentCreatedOnTo=datetime(2023-03-12)) <|
{
print ExtentId = "2cca5844-8f0d-454e-bdad-299e978be5df"
},
{
.show table MyTable1 extents
}
.replace extents in table MyOtherTable with (extentCreatedOnFrom=datetime(2023-03-10), extentCreatedOnTo=datetime(2023-03-12)) <|
{
.show table MyOtherTable extents
| where ExtentId == guid(2cca5844-8f0d-454e-bdad-299e978be5df)
},
{
.show table MyTable1 extents
}
idempotent 논리 구현
테이블에서 테이블로 이동할 t_source
t_dest
범위가 있는 경우에만 Kusto가 테이블에서 t_dest
익스텐트를 삭제하도록 idempotent 논리를 구현합니다.
.replace async extents in table t_dest with (extentCreatedOnFrom=datetime(2023-03-10), extentCreatedOnTo=datetime(2023-03-12)) <|
{
let any_extents_to_move = toscalar(
t_source
| where extent_tags() has 'drop-by:blue'
| summarize count() > 0
);
let extents_to_drop =
t_dest
| where any_extents_to_move and extent_tags() has 'drop-by:blue'
| summarize by ExtentId = extent_id()
;
extents_to_drop
},
{
let extents_to_move =
t_source
| where extent_tags() has 'drop-by:blue'
| summarize by ExtentId = extent_id(), TableName = 't_source'
;
extents_to_move
}