Azure Database for MySQL 유연한 서버의 데이터 인덱싱

Important

MySQL 지원은 현재 추가 사용 약관에 따라 공개 미리 보기로 제공됩니다. 콘텐츠 인덱스를 만들려면 미리 보기 REST API(2020-06-30-preview 이상)를 사용하여 콘텐츠 인덱스를 만듭니다. 현재 포털 지원이 없습니다.

이 문서에서는 Azure Database for MySQL에서 콘텐츠를 가져오고 Azure AI 검색에서 검색할 수 있도록 만드는 인덱서를 구성하는 방법을 알아봅니다. 인덱서에 대한 입력은 단일 테이블 또는 뷰의 행입니다. 출력은 개별 필드에 검색 가능한 콘텐츠가 있는 검색 인덱스입니다.

이 문서에서는 Azure Database for MySQL 유연한 서버의 인덱싱과 관련된 정보를 사용하여 인덱서 만들기를 보완합니다. REST API를 사용하여 모든 인덱서에 공통적인 세 부분으로 구성된 워크플로(데이터 원본 만들기, 인덱스 만들기, 인덱서 만들기)를 보여 줍니다. 데이터 추출은 인덱서 만들기 요청을 제출할 때 발생합니다.

상위 워터마크 및 일시 삭제를 포함하도록 구성되는 경우 인덱서는 MySQL 데이터베이스에 대한 모든 변경, 업로드 및 삭제를 수행합니다. 이러한 변경 내용은 검색 인덱스에 반영됩니다. 데이터 추출은 인덱서 만들기 요청을 제출할 때 발생합니다.

필수 조건

미리 보기 제한 사항

현재 날짜 또는 타임스탬프가 모든 행에 대해 균일한 경우 변경 내용 추적 및 삭제 검색이 작동하지 않습니다. 이 제한 사항은 미리 보기 업데이트에서 해결해야 하는 알려진 문제입니다. 이 문제가 해결될 때까지는 기술 세트를 MySQL 인덱서에 추가하지 마세요.

미리 보기는 기하 도형 형식 및 Blob을 지원하지 않습니다.

앞에서 설명한 대로 포털에서 인덱서 만들기를 지원하지 않지만, MySQL 인덱서 및 데이터 원본이 있으면 포털에서 이를 관리할 수 있습니다. 예를 들어 정의를 편집하고 인덱서를 다시 설정, 실행 또는 예약할 수 있습니다.

데이터 원본 정의

데이터 원본 정의는 인덱싱할 데이터, 자격 증명 및 데이터 변경 내용을 식별하기 위한 정책을 지정합니다. 데이터 소스는 독립 리소스로 정의되므로 여러 인덱서에서 사용할 수 있습니다.

데이터 원본 만들기 또는 업데이트는 정의를 지정합니다. 데이터 원본을 만들 때 미리 보기 REST API 버전(2020-06-30-Preview 이상)을 사용해야 합니다.

{   
    "name" : "hotel-mysql-ds",
    "description" : "[Description of MySQL data source]",
    "type" : "mysql",
    "credentials" : { 
        "connectionString" : 
            "Server=[MySQLServerName].MySQL.database.azure.com; Port=3306; Database=[DatabaseName]; Uid=[UserName]; Pwd=[Password]; SslMode=Preferred;" 
    },
    "container" : { 
        "name" : "[TableName]" 
    },
    "dataChangeDetectionPolicy" : { 
        "@odata.type": "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
        "highWaterMarkColumnName": "[HighWaterMarkColumn]"
    }
}

주요 정보:

  • type"mysql"로 설정합니다(필수).

  • credentials를 ADO.NET 연결 문자열로 설정합니다. 연결 문자열은 Azure Portal의 MySQL에 대한 연결 문자열 페이지에서 확인할 수 있습니다.

  • container를 테이블 이름으로 설정합니다.

  • 데이터가 휘발성이고 후속 실행 시 인덱서에서 새 항목과 업데이트된 항목만 선택하도록 하려면 dataChangeDetectionPolicy를 설정합니다.

  • 원본 항목이 삭제될 때 검색 인덱서에서 검색 문서를 제거하려면 dataDeletionDetectionPolicy를 설정합니다.

인덱스 만들기

인덱스 만들기 또는 업데이트는 인덱 스 스키마를 지정합니다.

{
    "name" : "hotels-mysql-ix",
    "fields": [
        { "name": "ID", "type": "Edm.String", "key": true, "searchable": false },
        { "name": "HotelName", "type": "Edm.String", "searchable": true, "filterable": false },
        { "name": "Category", "type": "Edm.String", "searchable": false, "filterable": true, "sortable": true  },
        { "name": "City", "type": "Edm.String", "searchable": false, "filterable": true, "sortable": true },
        { "name": "Description", "type": "Edm.String", "searchable": false, "filterable": false, "sortable": false  }     
    ]
}

원본 테이블의 기본 키가 문서 키(이 경우 "ID")와 일치하면 인덱서에서 기본 키를 문서 키로 가져옵니다.

데이터 형식 매핑

다음 표에서는 MySQL 데이터베이스를 해당하는 Azure AI 검색에 매핑합니다. 자세한 내용은 지원되는 데이터 형식(Azure AI 검색)을 참조하세요.

참고 항목

미리 보기는 기하 도형 형식 및 Blob을 지원하지 않습니다.

MySQL 데이터 형식 Azure AI 검색 필드 형식
bool, boolean Edm.Boolean, Edm.String
tinyint, smallint, mediumint, int, integeryear Edm.Int32, Edm.Int64, Edm.String
bigint Edm.Int64, Edm.Int64, Edm.String
float, , doublereal Edm.Double, Edm.String
date, , datetimetimestamp Edm.DateTimeOffset, Edm.String
char,varchar, tinytext, mediumtext, text, longtextenum, settime Edm.String
unsigned numerical data, serial, decimal, dec, bit, blob, binary, geometry 해당 없음

MySQL 인덱서 구성 및 실행

인덱스와 데이터 원본이 만들어지면 인덱서를 만들 준비가 된 것입니다. 인덱서 구성은 런타임 동작을 제어하는 입력, 매개 변수 및 속성을 지정합니다.

이름을 지정하고 데이터 원본 및 대상 인덱스를 참조하여 인덱서를 만들거나 업데이트합니다.

{
    "name" : "hotels-mysql-idxr",
    "dataSourceName" : "hotels-mysql-ds",
    "targetIndexName" : "hotels-mysql-ix",
    "disabled": null,
    "schedule": null,
    "parameters": {
        "batchSize": null,
        "maxFailedItems": null,
        "maxFailedItemsPerBatch": null,
        "base64EncodeKeys": null,
        "configuration": { }
        },
    "fieldMappings" : [ ],
    "encryptionKey": null
}

주요 정보:

  • 필드 이름 또는 형식이 다르거나 검색 인덱스에서 여러 버전의 원본 필드가 필요한 경우 필드 매핑을 지정합니다.

  • 인덱서가 만들어지면 자동으로 실행됩니다. disabledtrue로 설정하여 실행되지 않도록 방지할 수 있습니다. 인덱서 실행을 제어하려면 요청 시 인덱서를 실행하거나 일정에 배치합니다.

인덱서 상태 확인

인덱서 실행 모니터링을 위해 인덱서 상태 가져오기 요청을 보냅니다.

GET https://myservice.search.windows.net/indexers/myindexer/status?api-version=2023-11-01
  Content-Type: application/json  
  api-key: [admin key]

응답에는 상태 및 처리된 항목 수가 포함됩니다. 다음 예와 유사해야 합니다.

{
    "status":"running",
    "lastResult": {
        "status":"success",
        "errorMessage":null,
        "startTime":"2024-02-21T00:23:24.957Z",
        "endTime":"2024-02-21T00:36:47.752Z",
        "errors":[],
        "itemsProcessed":1599501,
        "itemsFailed":0,
        "initialTrackingState":null,
        "finalTrackingState":null
    },
    "executionHistory":
    [
        {
            "status":"success",
            "errorMessage":null,
            "startTime":"2024-02-21T00:23:24.957Z",
            "endTime":"2024-02-21T00:36:47.752Z",
            "errors":[],
            "itemsProcessed":1599501,
            "itemsFailed":0,
            "initialTrackingState":null,
            "finalTrackingState":null
        },
        ... earlier history items
    ]
}

실행 기록에는 최대 50개의 가장 최근에 완료된 실행이 포함되며, 가장 최근의 실행이 먼저 나오도록 시간 역순으로 정렬됩니다.

새 행 및 변경된 행 인덱싱

인덱서에서 검색 인덱스가 완전히 채워지면 후속 인덱서 실행에서 데이터베이스의 새 행 변경된 행만 증분 방식으로 인덱싱할 수 있습니다.

증분 인덱싱을 사용하도록 설정하려면 데이터 원본 정의에서 dataChangeDetectionPolicy 속성을 설정합니다. 이 속성은 데이터에 사용되는 변경 내용 추적 메커니즘을 인덱서에 알려줍니다.

Azure Database for MySQL 인덱서의 경우 지원되는 유일한 정책은 HighWaterMarkChangeDetectionPolicy입니다.

인덱서의 변경 검색 정책은 행 버전 또는 행이 마지막으로 업데이트된 날짜 및 시간을 캡처하는 상위 워터마크 열이 있는지 여부에 따라 달라집니다. 상위 워터 마크 열에 대한 요구 사항을 충족하는 데 충분한 세분성의 DATE, DATETIME 또는 TIMESTAMP 열인 경우가 많습니다.

MySQL 데이터베이스의 상위 워터마크 열에서 충족해야 하는 요구 사항은 다음과 같습니다.

  • 모든 데이터 삽입에서 열의 값을 지정해야 합니다.
  • 항목에 대한 모든 업데이트는 열의 값도 변경합니다.
  • 삽입 또는 업데이트할 때마다 이 열의 값이 증가합니다.
  • 다음과 같은 WHEREORDER BY 절이 있는 쿼리를 효율적으로 실행할 수 있습니다. WHERE [High Water Mark Column] > [Current High Water Mark Value] ORDER BY [High Water Mark Column]

다음 예제에서는 변경 검색 정책이 있는 데이터 원본 정의를 보여 줍니다.

{
    "name" : "[Data source name]",
    "type" : "mysql",
    "credentials" : { "connectionString" : "[connection string]" },
    "container" : { "name" : "[table or view name]" },
    "dataChangeDetectionPolicy" : {
        "@odata.type" : "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
        "highWaterMarkColumnName" : "[last_updated column name]"
    }
}

Important

보기를 사용하는 경우 인덱서 데이터 원본에서 상위 워터마크 정책을 설정해야 합니다.

상위 워터마크 열에 대한 인덱스가 원본 테이블에 없으면 MySQL 인덱서에서 사용하는 쿼리에서 시간을 초과할 수 있습니다. 특히 테이블에 많은 행이 포함된 경우 효율적으로 실행하기 위해 ORDER BY [High Water Mark Column] 절에 인덱스가 필요합니다.

삭제된 행 인덱싱

테이블 또는 보기에서 행이 삭제되면 일반적으로 검색 인덱스에서도 해당 행을 삭제하려고 합니다. 그러나 테이블에서 행이 실제로 제거되면 인덱서에는 더 이상 존재하지 않는 레코드의 현재 상태를 유추할 방법이 없습니다. 현재 상태를 일시 삭제 기술을 사용하여 행을 테이블에서 제거하지 않고 논리적으로 삭제하는 것입니다. 테이블 또는 뷰에 열을 추가하고 이 열을 사용하여 행을 삭제된 것으로 표시합니다.

삭제 상태를 제공하는 열이 지정되면 삭제 상태가 true로 설정된 모든 검색 문서를 제거하도록 인덱서를 구성할 수 있습니다. 이 동작을 지원하는 구성 속성은 다음과 같이 데이터 원본 정의에 지정된 데이터 삭제 검색 정책입니다.

{
    …,
    "dataDeletionDetectionPolicy" : {
        "@odata.type" : "#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",
        "softDeleteColumnName" : "[a column name]",
        "softDeleteMarkerValue" : "[the value that indicates that a row is deleted]"
    }
}

softDeleteMarkerValue은 문자열이어야 합니다. 예를 들어 삭제된 행이 값 1로 표시된 정수 열이 있는 경우 "1"을 사용합니다. 삭제된 행이 부울 true 값으로 표시된 BIT 열이 있는 경우 True 또는 true 문자열 리터럴(대/소문자 구분 안 함)을 사용합니다.

다음 단계

이제 인덱서를 실행하거나, 상태를 모니터링하거나, 인덱서 실행을 예약할 수 있습니다. 다음 문서는 Azure MySQL에서 콘텐츠를 끌어오는 인덱서에 적용됩니다.