다음을 통해 공유


.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
}