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
Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.
vytvořte účet úložiště, který má hierarchický obor názvů (Azure Data Lake Storage Gen2). V tomto kurzu se používá účet úložiště s názvem
contosoorders. ujistěte se, že váš uživatelský účet má přiřazenou roli přispěvatel dat objektu Blob Storage .přečtěte si téma vytvoření účtu úložiště pro použití s Azure Data Lake Storage Gen2.
Vytvoření instančního objektu. Viz Postup: použití portálu k vytvoření aplikace a instančního objektu služby Azure AD, který má přístup k prostředkům.
K dispozici je několik konkrétních věcí, které budete muset udělat při provádění kroků v tomto článku.
: heavy_check_mark: při provádění kroků v části přiřazení aplikace k roli v článku se ujistěte, že k instančnímu objektu přiřadíte roli přispěvatel dat služby Storage objektu Blob .
Důležité
ujistěte se, že roli přiřadíte v oboru účtu úložiště Data Lake Storage Gen2. K nadřazené skupině prostředků nebo předplatnému můžete přiřadit roli, ale chyby související s oprávněními obdržíte, dokud tato přiřazení role nerozšíříte do účtu úložiště.
: heavy_check_mark: při provádění kroků v části získat hodnoty pro přihlášení v článku Vložte ID TENANTA, ID aplikace a heslo do textového souboru. Tyto hodnoty budete potřebovat později.
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.
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.

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.
V kontejneru dat vytvořte složku s názvem input.
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 KingdomUložte tento soubor do místního počítače a pojmenujte ho data.csv.
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.
V Azure Portal vyberte vytvořit Azure Databricks prostředků > Analytics > .

V části Služba Azure Databricks zadejte hodnoty pro vytvoření pracovního prostoru 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
V Azure Portalpřejdete do pracovního prostoru Azure Databricks, který jste vytvořili, a pak vyberte Spustit pracovní prostor.
Budete přesměrováni na portál Azure Databricks. Na portálu vyberte Nový > cluster.

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

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á.
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
V levém podokně vyberte Pracovní prostor. V rozevíracím seznamu Pracovní prostor vyberte Vytvořit > Poznámkový blok.

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.

Vyberte Vytvořit.
Vytvoření a naplnění tabulky Delta datacihly
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
appIdpasswordtenantzá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: bystespark.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.Stiskněte klávesy SHIFT + ENTER a spusťte kód v tomto bloku.
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.
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.
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.
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.
Klikněte na úlohy.
Na stránce úlohy klikněte na vytvořit úlohu.
Pojmenujte úlohu a pak zvolte
upsert-order-datasešit.
Vytvoření funkce Azure Function
Vytvořte funkci Azure, která spustí úlohu.
V horním rohu pracovního prostoru Databricks zvolte ikonu lidé a pak zvolte Uživatelská nastavení.

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.
Vyberte tlačítko Vytvořit prostředek v levém horním rohu okna Azure Portal pak vyberte Compute > Function App.

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.

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

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

Přidejte následující nastavení:
Název nastavení Hodnota DBX_INSTANCE Oblast vašeho pracovního prostoru Databricks. Příklad: westus2.azuredatabricks.netDBX_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.Na stránce přehledu aplikace funkcí klikněte na tlačítko Nová funkce.

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.
V podokně Nová funkce pojmete funkci UpsertOrder a potom klikněte na tlačítko Vytvořit.
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.
Na stránce s kódem funkce klikněte na tlačítko Event Grid předplatného.

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ě.

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
Vytvořte soubor s názvem , vložte do něj následující informace a
customer-order.csvulož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 LeoneV 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ě.
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.
Výběrem úlohy otevřete stránku úlohy.

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

V nové buňce sešitu spusťte tento dotaz v buňce, abyste viděli aktualizovanou tabulku delta.
%sql select * from customer_dataVrácená tabulka zobrazuje nejnovější záznam.

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.csvulož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 LeoneTento soubor CSV je téměř stejný jako u předchozího, s výjimkou množství objednávky, která se změnila z
228na22.V Průzkumník služby Storage soubor nahrajte do vstupní složky vašeho účtu úložiště.
Spusťte dotaz
selectznovu, abyste viděli aktualizovanou tabulku Delta.%sql select * from customer_dataVrácená tabulka zobrazuje aktualizovaný záznam.

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.