Lakehouse-táblák optimalizálása állapotellenőrzések alapján

A következőkre vonatkozik:✅ SQL Analytics-végpont a Microsoft Fabricben

Ebben az útmutatóban megtanulhatja, hogyan hozhat létre egy Microsoft Fabric-folyamatot intelligens táblakarbantartás végrehajtására.

Ez a megoldás meghívja a sys.sp_get_table_health_metrics T-SQL tárolt eljárást a Lakehouse SQL Analytics-végponton, kiértékeli az eredményt, és csak akkor fut, OPTIMIZE ha a tábla valóban karbantartást igényel. Ez a „check-then-act” minta megakadályozza a megfelelően működő táblákon felmerülő felesleges számítási költségeket, miközben biztosítja, hogy a leromlott állapotú táblák karbantartása automatikusan történjen.

Miért van szükség karbantartásra?

A Lakehouse-táblák idővel túl sok kis Parquet-fájlt halmozhatnak fel, ami rontja a lekérdezési teljesítményt az SQL Analytics-végponton.

Ahelyett, hogy a táblázat állapotától függetlenül rögzített ütemezésben fut OPTIMIZE , ez a folyamat megalapozott döntést hoz: először ellenőrzi a tábla állapotát, és csak anomália észlelésekor aktiválja az optimalizálást.

Prerequisites

Mielőtt hozzákezdene, győződjön meg arról, hogy:

  • Egy Microsoft Fabric-munkaterület, amelyen közreműködői vagy annál magasabb szintű jogosultságokkal rendelkezik.
  • Egy Lakehouse a munkaterületen, amely legalább egy figyelni kívánt Delta-táblát tartalmaz. Ez az oktatóanyag egy SalesDataLakehouse nevű Lakehouse-t használja.
  • Az Fabric adatfolyamok ismerete.
  • A Fabric-jegyzetfüzetek ismerete.

Megoldásstruktúra

A befejezett folyamat a következő struktúrával rendelkezik:

  1. Szkripttevékenység: A céltáblán hajtja végre a(z) sp_get_table_health_metrics elemet, és a tábla állapotára vonatkozó mérőszámokat strukturált kimenet formájában adja vissza.
  2. If Condition tevékenység: Közvetlenül a Script kimenetéből olvassa ki a PotentialAnomalyType értékét, és ellenőrzi, hogy nagyobb-e nullánál. További információ a PotentialAnomalyTypelehetséges anomáliák típuskódjairól.
  3. Jegyzetfüzet-tevékenység (a(z) True ágon belül): A táblán futtatja a(z) OPTIMIZE elemet egy Spark-jegyzetfüzetből.

Ennek az oktatóanyagnak a végére lesz egy jegyzetfüzete, amely a folyamatból kap paramétereket, és indításkor optimalizál egy táblát.

1. lépés: Az optimalizálási jegyzetfüzet létrehozása

A jegyzetfüzet paraméterként fogadja el a cél Lakehouse-t, sémát és táblanevet a folyamatból, majd a Spark SQL használatával hajtja OPTIMIZE végre.

  1. A Fabric munkaterületen válassza az + Új elem>jegyzetfüzete lehetőséget.
  2. Nevezze el a jegyzetfüzet Optimize-Table nevét.
  3. A Hely területen válassza ki azt a Lakehouse-t, ahol az ellenőrizni kívánt táblákat tárolja a rendszer. Ez a gyakorlat egy SalesDataLakehouse nevű Lakehouse-t használ.
  4. Válassza a Create gombot.

A paramétercella hozzáadása

Az első cella határozza meg azokat a változókat, amelyeket a folyamat futásidőben felülbírál.

  1. Az első cellába írja be a következő paramétereket. Az értékek nem fontosak, és a folyamat futásidőben felülbírálja őket.

    # Parameters 
    lakehouse_name = "<LakehouseName>"
    schema_name    = "<SchemaName>"
    table_name     = "<TableName>"
    

    Important

    A paraméterezés működése Fabric jegyzetfüzetekben: Futásidőben Fabric közvetlenül azután injektál egy új cellát, hogy a paramétercella újra hozzárendeli ezeket a változókat a folyamat által átadott értékekkel. Az itt megadott értékek csak inicializálják a változókat, és javítják az olvashatóságot.

  2. Válassza ki a cellamenüt (...) >A paramétercella váltása a cella paramétercelláként való megjelöléséhez.

Az OPTIMIZE cella hozzáadása

A OPTIMIZE parancs egy Spark SQL-parancs, nem T-SQL-parancs. Spark-környezetekben, például jegyzetfüzetekben, Spark-feladatdefiníciókban vagy a Lakehouse Karbantartási felületén kell futtatnia. Az SQL Analytics-végpont és a Warehouse SQL-lekérdezésszerkesztő nem támogatja közvetlenül ezt a parancsot.

  1. A második cellába írja be a következőt:

    full_name = f"{lakehouse_name}.{schema_name}.{table_name}"
    print(f"Optimizing {full_name} ...")
    
    result = spark.sql(f"OPTIMIZE {full_name}")
    result.show(truncate=False)
    
  2. Szükség szerint vegye fel a Markdown-cellákat a jegyzetfüzet más felhasználók számára történő megfelelő dokumentálásához. A véglegesített jegyzetfüzetnek az alábbihoz hasonlóan kell kinéznie:

    Képernyőkép egy Fabric

Note

Ez a példa egy olyan Lakehouse-t tekint, amelynek sémái engedélyezve vannak. Ha nem használ Lakehouse-sémákat, módosítsa ennek megfelelően a full_name háromrészes nevet.

2. lépés: A folyamat létrehozása

  1. A Fabric-munkaterületen válassza az + Új elem>Folyamat lehetőséget.

  2. Nevezze el a folyamat ellenőrző és optimalizáló táblájának nevét.

  3. Válassza ki a folyamatvászon hátterét, majd nyissa meg a Paraméterek lapot. Adjon hozzá három paramétert:

    Name Típus Alapértelmezett érték
    lakehouse_name String SalesDataLakehouse
    schema_name String dbo
    table_name String FactSales

3. lépés: A szkripttevékenység hozzáadása

A szkripttevékenység az SQL Analytics-végponton fut sys.sp_get_table_health_metrics , és rögzíti az eredményt.

Important

Használja a szkripttevékenységet , nem a Tárolt eljárás tevékenységet. Csak a szkripttevékenység teszi elérhetővé az eredményhalmazt strukturált JSON-kimenetként, amelyet az alsóbb rétegbeli tevékenységek elemezhetnek.

  1. A Tevékenységek lapon válassza a Szkript lehetőséget a vászonra való felvételhez.
  2. Nevezze el Táblák állapotának ellenőrzése-nek.
  3. A Beállítások lapon:
    • Kapcsolat: Válassza ki a Lakehouse SQL Analytics-végpontját. Ha nem szerepel a listában, válassza a legördülő lista alján található Tallózás az összes között lehetőséget, majd keresse meg a Lakehouse SQL-analitikai végpontját.

    • Szkript típusa: Válassza a Lekérdezés lehetőséget.

    • Szkript: Válassza a Dinamikus tartalom hozzáadása lehetőséget, és írja be a következő kifejezést:

      @concat('EXEC sys.sp_get_table_health_metrics ''',
              pipeline().parameters.schema_name, '.',
              pipeline().parameters.table_name, '''')
      

Ez a kifejezés létrehozza azt az SQL-parancsot, amely végrehajtja a tárolt eljárást a céltáblán, például: EXEC sys.sp_get_table_health_metrics 'dbo.FactSales'.

A szkript kimenetének ellenőrzése

Futtassa egyszer a folyamatot, és vizsgálja meg a szkripttevékenység kimenetét. A következőhöz hasonló JSON-objektum jelenik meg:

{
  "resultSetCount": 1,
  "resultSets": [
    {
      "rowCount": 1,
      "rows": [
        {
          "PotentialAnomalyType": 3,
          "PotentialAnomalyDescription": "Too many small files...",
          "FileCount": 2688,
          "...": "..."
        }
      ]
    }
  ]
}

Important

A tényleges eredmény a tábla állapotától függően változhat. A lényeg az, hogy az sys.sp_get_table_health_metrics által elérhetővé tett oszlopokat adja vissza.

4. lépés: Az If Condition tevékenység hozzáadása

Az If Condition tevékenység közvetlenül a PotentialAnomalyType kimenetéből olvas be, és az eredmény alapján dönt. Kövesse az alábbi lépéseket:

  1. A Tevékenységek lapon válassza a Ha feltétel lehetőséget, ha tevékenységet szeretne hozzáadni a vászonhoz.

  2. Nevezze el Anomália keresése-nek.

  3. Rajzoljon egy Siker (zöld) nyilat a Tábla állapotának ellenőrzése és a Anomália ellenőrzése közé.

  4. A Ha feltétel tevékenység Tevékenységek lapján állítsa a Kifejezés értékét a következőre:

    @greater(int(activity('Check Table Health').output.resultSets[0].rows[0]['PotentialAnomalyType']), 0)
    

Ez a kifejezés kiolvassa az sys.sp_get_table_health_metrics által visszaadott első sort, a(z) PotentialAnomalyType értékét egész számmá alakítja, és értéke true, ha az érték nullánál nagyobb, ami a céltáblában észlelt rendellenességet jelez.

5. lépés: A jegyzetfüzet-tevékenység hozzáadása (igaz ág)

Ha a Ha feltétel tevékenység van kiválasztva, válassza a Szerkesztés (ceruza ikon) lehetőséget az Igaz mellett. A vászon a True ághoz tartozó alvászonra vált.

  1. Húzza a Notebook tevékenységet a True részvászonra.

  2. Nevezze el OPTIMIZE-nak.

  3. A Beállítások lapon:

    • Jegyzetfüzet: Válassza ki az 1. lépésben létrehozott Optimize-Table jegyzetfüzetet.

    • Bontsa ki az Alapparamétereket, majd adjon hozzá három sort:

      Name Típus Value
      lakehouse_name String @pipeline().parameters.lakehouse_name
      schema_name String @pipeline().parameters.schema_name
      table_name String @pipeline().parameters.table_name

A három névoszlop értékének pontosan meg kell egyeznie a jegyzetfüzet paramétercellájában lévő változónevekkel.

Note

A hamis tevékenységeket üresen hagyhatja. Az If Condition tevékenység egy üres False ágat úgy kezel, hogy nem hajt végre műveletet, és a folyamatot sikeresként jelenti.

A befejezett folyamatnak a következőképpen kell kinéznie:

Képernyőkép egy Fabric adatfolyamatról, amely egy Check Table Health szkripttevékenységet tartalmaz, amely egy Check Anomaly feltételes tevékenységhez kapcsolódik. A valódi ág optimalizálási jegyzetfüzet-tevékenységet futtat, míg a hamis ágnak nincsenek tevékenységei.

6. lépés: Ellenőrzés és futtatás

  1. A konfigurációs hibák ellenőrzéséhez válassza az Ellenőrzés lehetőséget a folyamat eszköztárán.

  2. Válassza a Futtatás lehetőséget a folyamat manuális végrehajtásához.

  3. Figyelje a futást, és erősítse meg:

    1. Tábla állapotának ellenőrzése: ellenőrizze a tevékenység kimenetét a futtatáskor. A tárolt eljárás kimenetének sys.sp_get_table_health_metrics JSON formátumban kell megjelennie.
    2. Ellenőrizze az anomáliát: helyesen kiértékeli a szkript kimenetéből való közvetlen olvasással PotentialAnomalyType .
    3. Futtassa az OPTIMIZE parancsot (csak akkor, ha PotentialAnomalyType > 0): ha az Anomália ellenőrzése tevékenység true értéket ad vissza, tekintse át a Run OPTIMIZE tevékenység bemenetét annak ellenőrzéséhez, hogy a megfelelő paramétereket (Lakehouse-név, séma és táblanév) használja-e, és ellenőrizze a kimenetet a OPTIMIZE művelet üzeneteinek áttekintéséhez.

Erőforrások tisztítása

Ha csak ehhez az oktatóanyaghoz hozott létre erőforrásokat, és már nincs rájuk szüksége, törölje a következő elemeket a munkaterületről:

  • A Táblaellenőrzési és -optimalizálási folyamat.
  • Az Optimize-Table jegyzetfüzet.