Kurz: implementace vzoru Data Lake Capture pro aktualizaci rozdílové tabulky datacihly

V tomto kurzu se dozvíte, jak zpracovávat události v účtu úložiště, který má hierarchický obor názvů.

Vytvoříte malé řešení, které umožní uživateli naplnit rozdílovou tabulku datacihly tím, že nahraje textový soubor s oddělovači (CSV), který popisuje prodejní objednávku. Toto řešení sestavíte tak, že spojíte Event Grid předplatné, funkci Azure a úlohu v Azure Databricks.

V tomto kurzu:

  • Vytvoření předplatného Event Grid, které volá funkci Azure Functions.
  • Vytvořte funkci Azure, která obdrží oznámení od události a pak úlohu spustí v Azure Databricks.
  • Vytvořte úlohu datacihly, která vloží objednávku zákazníka do tabulky Delta datacihly, která se nachází v účtu úložiště.

Toto řešení sestavíme v obráceném pořadí, počínaje Azure Databricks pracovním prostorem.

Požadavky

Vytvoření prodejní objednávky

Nejdřív vytvořte soubor CSV, který popisuje prodejní objednávku, a pak tento soubor nahrajte do účtu úložiště. Později použijete data z tohoto souboru k naplnění prvního řádku v naší tabulce Delta datacihly.

  1. otevřete Průzkumník služby Azure Storage. Pak přejděte do svého účtu úložiště a v části kontejnery objektů BLOB vytvořte nový kontejner s názvem data.

    Složka dat

    další informace o tom, jak používat Průzkumník služby Storage, najdete v tématu použití Průzkumník služby Azure Storage ke správě dat v účtu Azure Data Lake Storage Gen2.

  2. V kontejneru dat vytvořte složku s názvem input.

  3. Vložte následující text do textového editoru.

    InvoiceNo,StockCode,Description,Quantity,InvoiceDate,UnitPrice,CustomerID,Country
    536365,85123A,WHITE HANGING HEART T-LIGHT HOLDER,6,12/1/2010 8:26,2.55,17850,United Kingdom
    
  4. Uložte tento soubor do místního počítače a pojmenujte ho data.csv.

  5. v Průzkumník služby Storage nahrajte tento soubor do vstupní složky.

Vytvořit úlohu v Azure Databricks

V této části provedete následující úlohy:

  • Vytvořte pracovní prostor Azure Databricks.
  • Vytvořte poznámkový blok.
  • Vytvoření a naplnění tabulky Delta datacihly.
  • Přidejte kód, který vloží řádky do tabulky Delta datacihly.
  • Vytvořte úlohu.

Vytvoření pracovního prostoru Azure Databricks

V této části vytvoříte pomocí portálu Azure pracovní prostor služby Azure Databricks.

  1. V Azure Portal vyberte vytvořit Azure Databricks prostředků > Analytics > .

    Datacihly na Azure Portal

  2. V části Služba Azure Databricks zadejte hodnoty pro vytvoření pracovního prostoru Databricks.

    Vytvoření pracovního prostoru Azure Databricks

    Vytvoření pracovního prostoru trvá několik minut. Chcete-li monitorovat stav operace, zobrazte indikátor průběhu v horní části.

Vytvoření clusteru Spark ve službě Databricks

  1. V Azure Portalpřejdete do pracovního prostoru Azure Databricks, který jste vytvořili, a pak vyberte Spustit pracovní prostor.

  2. Budete přesměrováni na portál Azure Databricks. Na portálu vyberte Nový > cluster.

    Datacihly v Azure

  3. Na stránce New cluster (Nový cluster) zadejte hodnoty pro vytvoření clusteru.

    Vytvoření clusteru datacihly Spark v Azure

    Přijměte všechny výchozí hodnoty kromě následujících:

    • Zadejte název clusteru.
    • Nezapomeňte zaškrtnout políčko Terminate after 120 minutes of inactivity (Ukončit po 120 minutách nečinnosti). Zadejte dobu (v minutách), po které se má ukončit činnost clusteru, pokud se cluster nepoužívá.
  4. Vyberte vytvořit cluster. Po spuštění clusteru můžete ke clusteru připojit poznámkové bloky a spouštět úlohy Spark.

Další informace o vytváření clusterů najdete v tématu Vytvoření clusteru Spark v Azure Databricks.

Vytvoření poznámkového bloku

  1. V levém podokně vyberte Pracovní prostor. V rozevíracím seznamu Pracovní prostor vyberte Vytvořit > Poznámkový blok.

    Vytvoření poznámkového bloku v datacihlech

  2. V dialogovém okně Vytvořit poznámkový blok zadejte název poznámkového bloku. Jako jazyk vyberte Python a pak vyberte cluster Spark, který jste vytvořili dříve.

    Snímek obrazovky, který zobrazuje dialogové okno vytvořit Poznámkový blok a kde vybrat Python jako jazyk

    Vyberte Vytvořit.

Vytvoření a naplnění tabulky Delta datacihly

  1. V poznámkovém bloku, který jste vytvořili, zkopírujte a vložte následující blok kódu do první buňky, ale tento kód ještě nespustíte.

    Nahraďte appId password tenant zástupné hodnoty v tomto bloku kódu hodnotami, které jste shromáždili při dokončování požadavků tohoto kurzu.

    dbutils.widgets.text('source_file', "", "Source File")
    
    spark.conf.set("fs.azure.account.auth.type", "OAuth")
    spark.conf.set("fs.azure.account.oauth.provider.type", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
    spark.conf.set("fs.azure.account.oauth2.client.id", "<appId>")
    spark.conf.set("fs.azure.account.oauth2.client.secret", "<password>")
    spark.conf.set("fs.azure.account.oauth2.client.endpoint", "https://login.microsoftonline.com/<tenant>/oauth2/token")
    
    adlsPath = 'abfss://data@contosoorders.dfs.core.windows.net/'
    inputPath = adlsPath + dbutils.widgets.get('source_file')
    customerTablePath = adlsPath + 'delta-tables/customers'
    

    Tento kód vytvoří pomůcku s názvem source_file. Později vytvoříte funkci Azure, která tento kód volá a předá do této pomůcky cestu k souboru. Tento kód také ověřuje váš instanční objekt s účtem úložiště a vytváří některé proměnné, které budete používat v jiných buňkách.

    Poznámka

    V nastavení produkčního prostředí zvažte uložení ověřovacího klíče v Azure Databricks. Pak místo ověřovacího klíče přidejte do bloku kódu vyhledávací klíč.

    Například namísto použití tohoto řádku kódu: byste spark.conf.set("fs.azure.account.oauth2.client.secret", "<password>") použili následující řádek kódu: spark.conf.set("fs.azure.account.oauth2.client.secret", dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>")) .

    po dokončení tohoto kurzu si přečtěte článek Azure Data Lake Storage Gen2 na webu Azure Databricks a podívejte se na příklady tohoto přístupu.

  2. Stiskněte klávesy SHIFT + ENTER a spusťte kód v tomto bloku.

  3. Zkopírujte následující blok kódu a vložte ho do jiné buňky a stiskněte klávesy SHIFT + ENTER pro spuštění kódu v tomto bloku.

    from pyspark.sql.types import StructType, StructField, DoubleType, IntegerType, StringType
    
    inputSchema = StructType([
    StructField("InvoiceNo", IntegerType(), True),
    StructField("StockCode", StringType(), True),
    StructField("Description", StringType(), True),
    StructField("Quantity", IntegerType(), True),
    StructField("InvoiceDate", StringType(), True),
    StructField("UnitPrice", DoubleType(), True),
    StructField("CustomerID", IntegerType(), True),
    StructField("Country", StringType(), True)
    ])
    
    rawDataDF = (spark.read
     .option("header", "true")
     .schema(inputSchema)
     .csv(adlsPath + 'input')
    )
    
    (rawDataDF.write
      .mode("overwrite")
      .format("delta")
      .saveAsTable("customer_data", path=customerTablePath))
    

    Tento kód vytvoří v účtu úložiště rozdílovou tabulku datacihly a potom načte některá počáteční data ze souboru CSV, který jste nahráli dříve.

  4. Po úspěšném spuštění tohoto bloku kódu odeberte z poznámkového bloku tento blok kódu.

Přidejte kód, který vloží řádky do tabulky Delta datacihly.

  1. Zkopírujte následující blok kódu a vložte ho do jiné buňky, ale tuto buňku nespouštějte.

    upsertDataDF = (spark
      .read
      .option("header", "true")
      .csv(inputPath)
    )
    upsertDataDF.createOrReplaceTempView("customer_data_to_upsert")
    

    Tento kód vloží data do tabulkového zobrazení v dočasné tabulce pomocí dat ze souboru CSV. Cesta k tomuto souboru CSV pochází ze vstupní pomůcky, kterou jste vytvořili v předchozím kroku.

  2. Přidejte následující kód pro sloučení obsahu dočasného zobrazení tabulky s tabulkou Delta datacihly.

    %sql
    MERGE INTO customer_data cd
    USING customer_data_to_upsert cu
    ON cd.CustomerID = cu.CustomerID
    WHEN MATCHED THEN
      UPDATE SET
        cd.StockCode = cu.StockCode,
        cd.Description = cu.Description,
        cd.InvoiceNo = cu.InvoiceNo,
        cd.Quantity = cu.Quantity,
        cd.InvoiceDate = cu.InvoiceDate,
        cd.UnitPrice = cu.UnitPrice,
        cd.Country = cu.Country
    WHEN NOT MATCHED
      THEN INSERT (InvoiceNo, StockCode, Description, Quantity, InvoiceDate, UnitPrice, CustomerID, Country)
      VALUES (
        cu.InvoiceNo,
        cu.StockCode,
        cu.Description,
        cu.Quantity,
        cu.InvoiceDate,
        cu.UnitPrice,
        cu.CustomerID,
        cu.Country)
    

Vytvoření úlohy

Vytvořte úlohu, která spustí Poznámkový blok, který jste vytvořili dříve. Později vytvoříte funkci Azure, která tuto úlohu spustí při vyvolání události.

  1. Klikněte na úlohy.

  2. Na stránce úlohy klikněte na vytvořit úlohu.

  3. Pojmenujte úlohu a pak zvolte upsert-order-data sešit.

    Vytvoření úlohy

Vytvoření funkce Azure Function

Vytvořte funkci Azure, která spustí úlohu.

  1. V horním rohu pracovního prostoru Databricks zvolte ikonu lidé a pak zvolte Uživatelská nastavení.

    Správa účtu

  2. Klikněte na tlačítko Generate new token (Vygenerovat nový token) a pak klikněte na tlačítko Generate (Vygenerovat).

    Nezapomeňte token zkopírovat na bezpečné místo. Vaše funkce Azure potřebuje tento token k ověření ve službě Databricks, aby bylo možné spustit úlohu.

  3. Vyberte tlačítko Vytvořit prostředek v levém horním rohu okna Azure Portal pak vyberte Compute > Function App.

    Vytvoření funkce Azure

  4. Na stránce Vytvořit aplikace funkcí vyberte jako zásobník modulu runtime možnost .NET Core a nezapomeňte nakonfigurovat instanci Přehledy aplikace.

    Konfigurace aplikace Function App

  5. Na stránce Přehled aplikace funkcí klikněte na Konfigurace.

    Snímek obrazovky se zvýrazněnou možností Konfigurace v části Nakonfigurované funkce

  6. Na stránce Nastavení aplikace přidejte jednotlivá nastavení pomocí tlačítka Nastavení nové aplikace.

    Přidání nastavení konfigurace

    Přidejte následující nastavení:

    Název nastavení Hodnota
    DBX_INSTANCE Oblast vašeho pracovního prostoru Databricks. Příklad: westus2.azuredatabricks.net
    DBX_PAT Osobní přístupový token, který jste vygeneroval dříve.
    DBX_JOB_ID Identifikátor spuštěné úlohy. V našem případě je tato hodnota 1 .
  7. Na stránce přehledu aplikace funkcí klikněte na tlačítko Nová funkce.

    Nová funkce

  8. Zvolte Azure Event Grid Trigger.

    Pokud se zobrazí výzva, nainstalujte rozšíření Microsoft.Azure.WebJobs.Extensions.EventGrid. Pokud ho musíte nainstalovat, budete muset znovu zvolit Azure Event Grid trigger a vytvořit funkci.

    Zobrazí se podokno Nová funkce.

  9. V podokně Nová funkce pojmete funkci UpsertOrder a potom klikněte na tlačítko Vytvořit.

  10. Obsah souboru kódu nahraďte tímto kódem a potom klikněte na tlačítko Uložit:

    using "Microsoft.Azure.EventGrid"
    using "Newtonsoft.Json"
    using Microsoft.Azure.EventGrid.Models;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    
    private static HttpClient httpClient = new HttpClient();
    
    public static async Task Run(EventGridEvent eventGridEvent, ILogger log)
    {
        log.LogInformation("Event Subject: " + eventGridEvent.Subject);
        log.LogInformation("Event Topic: " + eventGridEvent.Topic);
        log.LogInformation("Event Type: " + eventGridEvent.EventType);
        log.LogInformation(eventGridEvent.Data.ToString());
    
        if (eventGridEvent.EventType == "Microsoft.Storage.BlobCreated" | | eventGridEvent.EventType == "Microsoft.Storage.FileRenamed") {
            var fileData = ((JObject)(eventGridEvent.Data)).ToObject<StorageBlobCreatedEventData>();
            if (fileData.Api == "FlushWithClose") {
                log.LogInformation("Triggering Databricks Job for file: " + fileData.Url);
                var fileUrl = new Uri(fileData.Url);
                var httpRequestMessage = new HttpRequestMessage {
                    Method = HttpMethod.Post,
                    RequestUri = new Uri(String.Format("https://{0}/api/2.0/jobs/run-now", System.Environment.GetEnvironmentVariable("DBX_INSTANCE", EnvironmentVariableTarget.Process))),
                    Headers = {
                        { System.Net.HttpRequestHeader.Authorization.ToString(), "Bearer " +  System.Environment.GetEnvironmentVariable ("DBX_PAT", EnvironmentVariableTarget.Process)},
                        { System.Net.HttpRequestHeader.ContentType.ToString (), "application/json" }
                    },
                    Content = new StringContent(JsonConvert.SerializeObject(new {
                        job_id = System.Environment.GetEnvironmentVariable ("DBX_JOB_ID", EnvironmentVariableTarget.Process) ,
                        notebook_params = new {
                            source_file = String.Join("", fileUrl.Segments.Skip(2))
                        }
                    }))
                 };
                var response = await httpClient.SendAsync(httpRequestMessage);
                response.EnsureSuccessStatusCode();
            }
        }
    }
    

Tento kód analyzuje informace o vyvolané události úložiště a pak vytvoří zprávu požadavku s adresou URL souboru, který událost aktivoval. V rámci zprávy funkce předá hodnotu do widgetu source_file, který jste vytvořili dříve. Kód funkce odešle zprávu do úlohy Databricks a použije token, který jste získali dříve jako ověřování.

Vytvoření odběru Event Gridu

V této části vytvoříte předplatné služby Event Grid, které při nahrání souborů do účtu úložiště volá funkci Azure.

  1. Na stránce s kódem funkce klikněte na tlačítko Event Grid předplatného.

    Snímek obrazovky se zvýrazněnou tlačítkem Event Grid předplatného

  2. Na stránce Vytvořit odběr události zadejte název předplatného a pak pomocí polí na stránce vyberte svůj účet úložiště.

    Nové odběry událostí

  3. V rozevíracím seznamu Filtrovat na typy událostí vyberte události Vytvořené objekty blob a Odstraněné objekty blob a potom klikněte na tlačítko Vytvořit.

Testování Event Grid předplatného

  1. Vytvořte soubor s názvem , vložte do něj následující informace a customer-order.csv uložte ho do místního počítače.

    InvoiceNo,StockCode,Description,Quantity,InvoiceDate,UnitPrice,CustomerID,Country
    536371,99999,EverGlow Single,228,1/1/2018 9:01,33.85,20993,Sierra Leone
    
  2. V Průzkumník služby Storage soubor nahrajte do vstupní složky vašeho účtu úložiště.

    Nahrání souboru vyvolá Microsoft.Storage. Událost BlobCreated. Event Grid událost upozorní všechny odběratele. V našem případě je jediným odběratelem funkce Azure. Funkce Azure analyzuje parametry události a určí, ke které události došlo. Pak předá adresu URL souboru do úlohy Databricks. Úloha Databricks přečte soubor a přidá řádek do tabulky Databricks Delta, která se nachází ve vašem účtu úložiště.

  3. Pokud chcete zkontrolovat, jestli úloha proběhla úspěšně, otevřete pracovní prostor Databricks, klikněte na tlačítko Úlohy a pak otevřete svou úlohu.

  4. Výběrem úlohy otevřete stránku úlohy.

    Úloha Sparku

    Po dokončení úlohy se zobrazí stav dokončení.

    Úloha byla úspěšně dokončena.

  5. V nové buňce sešitu spusťte tento dotaz v buňce, abyste viděli aktualizovanou tabulku delta.

    %sql select * from customer_data
    

    Vrácená tabulka zobrazuje nejnovější záznam.

    V tabulce se zobrazí nejnovější záznam.

  6. Pokud chcete tento záznam aktualizovat, vytvořte soubor s názvem , vložte do něj následující informace a customer-order-update.csv uložte ho do místního počítače.

    InvoiceNo,StockCode,Description,Quantity,InvoiceDate,UnitPrice,CustomerID,Country
    536371,99999,EverGlow Single,22,1/1/2018 9:01,33.85,20993,Sierra Leone
    

    Tento soubor CSV je téměř stejný jako u předchozího, s výjimkou množství objednávky, která se změnila z 228 na 22 .

  7. V Průzkumník služby Storage soubor nahrajte do vstupní složky vašeho účtu úložiště.

  8. Spusťte dotaz select znovu, abyste viděli aktualizovanou tabulku Delta.

    %sql select * from customer_data
    

    Vrácená tabulka zobrazuje aktualizovaný záznam.

    Aktualizovaný záznam se zobrazí v tabulce

Vyčištění prostředků

Pokud už je nepotřebujete, odstraňte skupinu prostředků a všechny související prostředky. Pokud to chcete udělat, vyberte skupinu prostředků pro účet úložiště a vyberte Odstranit.

Další kroky