Zoekindexen in volledige tekst in beheerde tabellen in Unity Catalog

Important

Deze functie bevindt zich in de bètaversie. Werkruimtebeheerders kunnen de toegang tot deze functie beheren vanaf de pagina Previews . Zie Azure Databricks previews beheren.

Een zoekindex in volledige tekst versnelt zoekopdrachten op een of meer tekstkolommen van een beheerde Delta Lake- of Iceberg-tabel. De index biedt ondersteuning voor subtekenreekskoppeling en woordkoppeling. Wanneer u een query uitvoert op de tabel met de functies search of isearch, gebruikt Azure Databricks de index om bestanden over te slaan die gegarandeerd geen overeenkomende rijen bevatten. Dit vermindert de hoeveelheid gescande gegevens aanzienlijk, met name voor selectieve zoekacties.

Important

Indexen die tijdens de bètarelease zijn gemaakt, zijn niet gegarandeerd compatibel met latere releases. Wanneer de functie openbare preview bereikt, moet u bestaande indexen verwijderen en nieuwe indexen maken.

Requirements

Zoekindexen in volledige tekst hebben vereisten voor berekenings-, basistabel- en schemamachtigingen en basistabelconfiguratie.

Compute

Zoekindexen voor volledige tekst zijn alleen beschikbaar in Azure Databricks Runtime 18.2 en hoger. U moet deze bètafunctie inschakelen in uw werkruimte-instellingen. Zie Azure Databricks previews beheren.

Permissions

Een zoekindex maken:

  • U moet de MODIFY machtiging hebben voor de tabel waarnaar wordt verwezen in de zoekindex.
  • U moet over de CREATE TABLE machtiging beschikken voor het bovenliggende schema. Een schema-eigenaar of gebruiker met de bevoegdheid BEHEREN kan u CREATE TABLE bevoegdheden verlenen voor het schema.

Tabelconfiguratie

Voordat u een zoekindex voor volledige tekst maakt, moet de basistabel aan het volgende voldoen:

  • U moet de index maken in dezelfde catalogus en hetzelfde schema als de basistabel.
  • De tabel is een beheerde Delta Lake-tabel of een beheerde Iceberg-tabel.
  • Het traceren van rijen is ingeschakeld (delta.enableRowTracking = true). Zie Tracering van rijen in Azure Databricks.
  • Geïndexeerde kolommen zijn van het type STRING, VARIANTof STRUCTARRAY. STRING kolommen gebruiken de UTF8_BINARY sortering.
  • Een STRUCT kolom bevat ten minste één STRING, VARIANTof ARRAY bladveld op een nestdiepte; andere bladvelden worden genegeerd.
  • De tabel gebruikt geen functies uit de lijst met beperkingen, waaronder: OpenSharing, ondiep klonen, op kenmerken gebaseerd toegangsbeheer, beveiligingsbeleid op rijniveau en kolommaskers. Zie Beperkingen.

Zie voor meer informatie over tabelprotocolvereisten, die van toepassing zijn op delta lake- en icebergtabellen, de compatibiliteit en protocollen van Delta Lake-functies.

Een zoekindex voor volledige tekst maken

U kunt maximaal vier indexen maken voor één tabel, elk op een andere kolom.

Hiermee CREATE SEARCH INDEX maakt u een index over een of meer tekstkolommen. In het volgende voorbeeld worden twee tekstkolommen van een bestaande logboektabel geïndexeert:

CREATE SEARCH INDEX log_idx
ON logs (message, error_detail);

De volledige syntaxis is:

CREATE SEARCH INDEX [IF NOT EXISTS] index_name
  ON table_name ( column_name [, column_name ...] )
  [OPTIONS ( option_key = option_value [, ... ] )]

index_name moet uniek zijn binnen het schema en mag niet overeenkomen met een bestaande tabelnaam.

Zie Opties als u wilt bepalen hoe de tekst wordt getokeniseerd.

Warning

Als CREATE SEARCH INDEX en REFRESH INDEX mislukt tijdens de uitvoering, voert u uit REFRESH INDEX om te herstellen van een gedeeltelijke fout.

Opties

De OPTIONS component accepteert de volgende sleutels:

Key Waarden Verstek Description
tokenizer ngram, split ngram Hoe de tekst wordt getokeniseerd voor indexering. Zie Een tokenizer selecteren voor uw use-case.
ngram_size geheel getal in [3, 10] 5 Lengte van de gegenereerde n-grammen. Alleen geldig wanneer tokenizer = 'ngram'.
min_token_length geheel getal >= 1 3 Minimale lengte van tokens die moeten worden bewaard. Tokens korter dan dit worden verwijderd tijdens het indexeren. Alleen geldig wanneer tokenizer = 'split'.

Voor gedetailleerde informatie over fouten met ongeldige opties, zie de foutconditie SEARCH_INDEX_INVALID_PARAMETERS.

Selecteer een tokenizer voor uw use-case

Zoekindexen hebben 2 tokenizeropties beschikbaar, afhankelijk van uw use-case:

Tokenizer Gebruiksituatie Description
ngram Subtekenreekskoppeling. Splitst tekst op in overlappende n-grammen met een lengte van ngram_size.
split Insluitingscontroles voor hele woorden. Hiermee wordt tekst gesplitst in woordtokens. Een token is een uitvoering van Unicode-letters (\p{L}) en combinatiemarkeringen (\p{M}); een ander teken is een scheidingsteken.

Een n-gram-index maken met een n-gramgrootte van 4:

CREATE SEARCH INDEX log_ngram_idx
  ON logs (message)
  OPTIONS (tokenizer = 'ngram', ngram_size = 4);

Een index maken split met een minimale tokenlengte van 2:

CREATE SEARCH INDEX log_word_idx
  ON logs (message)
  OPTIONS (tokenizer = 'split', min_token_length = 2);

Query's uitvoeren op gegevens met behulp van search en isearch

Azure Databricks heeft twee SQL-functies om te testen of een zoekpatroon aanwezig is in een of meer tekstdoelen:

  • search: Hoofdlettergevoelig.
  • isearch: Niet hoofdlettergevoelig.

Selecteer search of isearch op basis van uw hoofdlettergevoeligheidsvereiste. Wanneer de geïndexeerde kolommen worden gedekt door een zoekindex in volledige tekst, gebruikt Azure Databricks de index om bestanden over te slaan die gegarandeerd geen overeenkomende rijen bevatten. Zoekindexen hebben geen invloed op resultaten.

Indexen versnellen query's het meest wanneer het zoekpatroon wordt weergegeven in een klein deel van de bestanden van de tabel.

search( target [, target ... ] , 'pattern' [, mode => 'substring' | 'word' ] )
isearch( target [, target ... ] , 'pattern' [, mode => 'substring' | 'word' ] )

Arguments

search en isearch accepteer de volgende argumenten:

  • target moet van het type STRING, VARIANT, STRUCTof ARRAY, dezelfde typen zijn die indexering toestaat. Doelen worden ontdubbeld.
  • pattern moet een letterlijke tekenreeks zijn die niet null is.
  • mode geeft aan hoe pattern overeenkomt met elk target:
    • substring (standaard): pattern komt overeen als een subtekenreeks binnen elke target.
    • word: pattern wordt gesplitst in woordtokens met behulp van dezelfde regel als de split tokenizer. De functie retourneert true als elk woord in pattern in ten minste één doelitem voorkomt, ongeacht de volgorde. Zie Een tokenizer selecteren voor uw use-case.

Returns

search en isearch retourneert een BOOLEAN waarde met drie waardenlogica:

  • true als ten minste één doel dat niet null is, overeenkomt.
  • null als geen enkele niet-null-waarde overeenkomt, maar ten minste één waarde null is.
  • false als alle doelwaarden niet-null zijn en geen enkele overeenkomt.

Examples

In de volgende voorbeelden ziet u veelvoorkomende search query's en isearch query's:

-- Case-insensitive substring search across one column.
SELECT * FROM logs
WHERE isearch(message, 'connection refused');

-- Case-sensitive substring search across multiple columns.
SELECT * FROM logs
WHERE search(message, error_detail, '550e8400-e29b-41d4-a716-446655440000');

-- Word search: matches rows containing all three words, in any order.
SELECT * FROM audit_logs
WHERE search(message, 'user admin login', mode => 'word');

Indexen beheren

Important

Zoekindexen in volledige tekst worden niet automatisch bijgewerkt wanneer de basistabel wordt gewijzigd. Zie Een index vernieuwen.

Azure Databricks de juistheid van query's behoudt, ongeacht de nieuwheid van de index. Wanneer een tabel niet-geïndexeerde gegevens bevat, gebruikt de query de bestaande index om de toegang tot de geïndexeerde records te versnellen en gebruikt een tabelscan voor de niet-geïndexeerde records.

Gebruik de volgende bewerkingen om zoekindexen in volledige tekst te beheren:

Een index beschrijven of weergeven

Informatie over een index weergeven:

DESCRIBE INDEX log_idx;

Een index vernieuwen

Zoekindexen in volledige tekst worden niet automatisch bijgewerkt wanneer de basistabel wordt gewijzigd.

Als u de index wilt bijwerken, voegt u vermeldingen toe voor nieuwe rijen:

REFRESH INDEX log_idx;

REFRESH INDEX is een incrementele bewerking waarbij uitsluitend wordt toegevoegd. Het indexeert nieuwe gegevens, maar verwijdert geen vermeldingen voor verwijderde rijen.

Als u de index wilt bijwerken, voegt REFRESH INDEX ... FULLu zowel vermeldingen voor nieuwe rijen toe als verwijdert u vermeldingen voor verwijderde rijen:

REFRESH INDEX log_idx FULL;

Een volledige vernieuwing vereist meer rekenresources dan een incrementele vernieuwing. Na verloop van tijd verzamelen incrementele vernieuwingen verouderde vermeldingen, waardoor de grootte van de index wordt vergroot en de prestaties negatief worden beïnvloed.

Verwijder een index

Voer het volgende uit om een index te verwijderen:

DROP INDEX log_idx;

Als u een fout voor ontbrekende indexen wilt voorkomen, gebruikt u:

DROP INDEX IF EXISTS log_idx;

Note

Als u de basistabel verwijdert, worden met de opdracht ook de zoekindexen in volledige tekst verwijderd.

Beperkingen

Zoekindexen in volledige tekst hebben de volgende beperkingen:

  • Het wijzigen van de naam van een geïndexeerde kolom in de basistabel of het wijzigen van het gegevenstype wordt niet ondersteund.
  • Tabellen met OpenSharing worden niet ondersteund. Als u de basistabel toevoegt als een OpenSharing-bron of -doel nadat u de index hebt gemaakt, negeert Azure Databricks de zoekindex.
  • Tabellen met ondiepe klonen worden niet ondersteund. Als u de basistabel toevoegt als een ondiepe kloonbron nadat u de index hebt gemaakt, Azure Databricks de zoekindex negeert.
  • Tabellen met op kenmerken gebaseerde toegangsbeheer, kolommaskers of beveiligingsbeleid op rijniveau worden niet ondersteund. Als u een van deze besturingselementen toevoegt aan een tabel met een zoekindex, negeert Azure Databricks de zoekindex. Zie basisconcepten voor op kenmerken gebaseerd toegangsbeheer (ABAC).