Azure Database for MySQL 유연한 서버의 데이터 인덱싱
Important
MySQL 지원은 현재 추가 사용 약관에 따라 공개 미리 보기로 제공됩니다. 2020-06-30-preview 이상을 사용하여 콘텐츠를 인덱싱할 수 있습니다. 최신 미리 보기 API를 사용하는 것이 좋습니다. 현재 포털 지원이 없습니다.
이 문서에서는 Azure Database for MySQL에서 콘텐츠를 가져오고 Azure AI 검색에서 검색할 수 있도록 만드는 인덱서를 구성하는 방법을 알아봅니다. 인덱서에 대한 입력은 단일 테이블 또는 뷰의 행입니다. 출력은 개별 필드에 검색 가능한 콘텐츠가 있는 검색 인덱스입니다.
이 문서에서는 Azure Database for MySQL 유연한 서버의 인덱싱과 관련된 정보를 사용하여 인덱서 만들기를 보완합니다. REST API를 사용하여 모든 인덱서에 공통적인 세 부분으로 구성된 워크플로(데이터 원본 만들기, 인덱스 만들기, 인덱서 만들기)를 보여 줍니다. 데이터 추출은 인덱서 만들기 요청을 제출할 때 발생합니다.
상위 워터마크 및 일시 삭제를 포함하도록 구성되는 경우 인덱서는 MySQL 데이터베이스에 대한 모든 변경, 업로드 및 삭제를 수행합니다. 이러한 변경 내용은 검색 인덱스에 반영됩니다. 데이터 추출은 인덱서 만들기 요청을 제출할 때 발생합니다.
필수 조건
시나리오 피드백을 제공하려면 미리 보기에 등록합니다. 양식 제출 후 자동으로 기능에 액세스할 수 있습니다.
Azure Database for MySQL 유연한 서버 및 샘플 데이터입니다. 데이터는 테이블 또는 뷰에 있어야 합니다. 기본 키가 필요합니다. 보기를 사용하는 경우 상위 워터마크 열이 있어야 합니다.
읽기 권한. 모든 권한 연결 문자열에는 콘텐츠에 대한 액세스 권한을 부여하는 키가 포함되지만, Azure 역할을 사용하는 경우 검색 서비스 관리 ID에 MySQL에 대한 읽기 권한자 권한이 있는지 확인합니다.
데이터 원본, 인덱스 및 인덱서를 만들기 위한 REST 클라이언트.
.NET용 Azure SDK를 사용할 수도 있습니다. 포털은 인덱서를 만드는 데 사용할 수 없지만, 만들어진 인덱서 및 데이터 원본을 관리할 수 있습니다.
미리 보기 제한 사항
현재 날짜 또는 타임스탬프가 모든 행에 대해 균일한 경우 변경 내용 추적 및 삭제 검색이 작동하지 않습니다. 이 제한 사항은 미리 보기 업데이트에서 해결해야 하는 알려진 문제입니다. 이 문제가 해결될 때까지는 기술 세트를 MySQL 인덱서에 추가하지 마세요.
미리 보기는 기하 도형 형식 및 Blob을 지원하지 않습니다.
앞에서 설명한 대로 포털에서 인덱서 만들기를 지원하지 않지만, MySQL 인덱서 및 데이터 원본이 있으면 포털에서 이를 관리할 수 있습니다. 예를 들어 정의를 편집하고 인덱서를 다시 설정, 실행 또는 예약할 수 있습니다.
데이터 원본 정의
데이터 원본 정의는 인덱싱할 데이터, 자격 증명 및 데이터 변경 내용을 식별하기 위한 정책을 지정합니다. 데이터 소스는 독립 리소스로 정의되므로 여러 인덱서에서 사용할 수 있습니다.
데이터 원본 만들기 또는 업데이트는 정의를 지정합니다. 데이터 원본을 만들 때 미리 보기 REST API를 사용해야 합니다.
{
"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 |
Edm.Int32, Edm.Int64, Edm.String | |
bigint |
Edm.Int64, Edm.Int64, Edm.String |
Edm.Double, Edm.String | |
Edm.DateTimeOffset, Edm.String | |
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
}
주요 정보:
필드 이름 또는 형식이 다르거나 검색 인덱스에서 여러 버전의 원본 필드가 필요한 경우 필드 매핑을 지정합니다.
인덱서가 만들어지면 자동으로 실행됩니다.
disabled
를true
로 설정하여 실행되지 않도록 방지할 수 있습니다. 인덱서 실행을 제어하려면 요청 시 인덱서를 실행하거나 일정에 배치합니다.
인덱서 상태 확인
인덱서 상태 가져오기 요청을 보내 인덱서 실행을 모니터링합니다.
GET https://myservice.search.windows.net/indexers/myindexer/status?api-version=2024-05-01-preview
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 데이터베이스의 상위 워터마크 열에서 충족해야 하는 요구 사항은 다음과 같습니다.
- 모든 데이터 삽입에서 열의 값을 지정해야 합니다.
- 항목에 대한 모든 업데이트는 열의 값도 변경합니다.
- 삽입 또는 업데이트할 때마다 이 열의 값이 증가합니다.
- 다음과 같은
WHERE
및ORDER 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에서 콘텐츠를 끌어오는 인덱서에 적용됩니다.