Öğretici: Databricks Delta tablosu güncelleştirmek için data lake yakalama desenini uygulama
Bu öğreticide, hiyerarşik ad alanına sahip bir depolama hesabında olayları işleme hakkında bilgi ve açıklama bulabilirsiniz.
Bir kullanıcının bir satış siparişlerini açıklayan virgülle ayrılmış değerler (csv) dosyasını karşıya yükerek Databricks Delta tablosu oluşturmalarını sağlayan küçük bir çözüm derleyebilirsiniz. Bu çözümü derlemek için bir Event Grid aboneliği, Azure İşlevi ve Azure Databricks.
Bu öğreticide şunları yapacaksınız:
- Azure İşlevi Event Grid çağıran bir abonelik oluşturun.
- Bir olaydan bildirim alan ve işi bir olayda çalıştıran bir Azure İşlevi Azure Databricks.
- Depolama hesabında bulunan bir Databricks Delta tablosuna müşteri siparişi ekseren bir Databricks işi oluşturun.
Bu çözümü çalışma alanıyla başlayarak ters sırada Azure Databricks oluşturuz.
Ön koşullar
Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
Hiyerarşik ad alanına sahip bir depolama hesabı oluşturun (Azure Data Lake Depolama 2. Nesil). Bu öğretici, adlı bir depolama hesabı
contosoorderskullanır. Kullanıcı hesabınıza blob verisi katkıda bulunan Depolama rolü atandığından emin olun.Bkz. Azure Data Lake ile kullanmak için depolama hesabı oluşturma Depolama 2. Nesil.
Hizmet sorumlusu oluşturun. Bkz. Nasıl: Portalı kullanarak kaynaklara erişen bir Azure AD uygulaması ve hizmet sorumlusu oluşturma.
Bu makaledeki adımları gerçekleştirmeniz için gerçekleştirmeniz gereken birkaç özel işlem vardır.
✔️ Uygulamayı bir role atama makalesinde yer alan adımları gerçekleştirerek blob verisi katkıda bulunan rolünü hizmet sorumlusuna Depolama emin olun.
Önemli
Rolü Data Lake Depolama 2. Nesil depolama hesabı kapsamında atayın. Üst kaynak grubuna veya aboneliğe rol atabilirsiniz, ancak bu rol atamaları depolama hesabına yaynana kadar izinlerle ilgili hatalar alırsınız.
✔️ Makalenin Oturum açma için değerleri al bölümündeki adımları gerçekleştirerek kiracı kimliğini, uygulama kimliğini ve parola değerlerini bir metin dosyasına yapıştırın. Bu değerlere daha sonra ihtiyacınız olacak.
Satış siparişi oluşturma
İlk olarak, satış siparişlerini açıklayan bir csv dosyası oluşturun ve ardından bu dosyayı depolama hesabına yükleyin. Daha sonra, Databricks Delta tablomuzdaki ilk satırı doldurmak için bu dosyadaki verileri kullanacağız.
Yeni Azure Depolama Gezgini. Ardından depolama hesabınıza gidin ve Blob Kapsayıcıları bölümünde data adlı yeni bir kapsayıcı oluşturun.

Depolama Gezgini kullanma hakkında daha fazla bilgi için bkz. Azure Data Lake Azure Depolama Gezgini 2.Nesil hesabında verileri yönetmek için Depolama kullanma.
Veri kapsayıcısı içinde input adlı bir klasör oluşturun.
Aşağıdaki metni bir metin düzenleyicisine yapıştırın.
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 KingdomBu dosyayı yerel bilgisayarınıza kaydedin ve dosyanın adını data.csv.
Bu Depolama Gezgini giriş klasörüne yükleyin.
Azure Databricks'de iş oluşturma
Bu bölümde şu görevleri gerçekleştirebilirsiniz:
- Çalışma alanı Azure Databricks oluşturun.
- Bir not defteri oluşturun.
- Databricks Delta tablosu oluşturma ve bu tabloyu doldurmak.
- Databricks Delta tablosuna satır ekli kod ekleyin.
- bir İş oluşturun.
Azure Databricks çalışma alanı oluşturma
Bu bölümde Azure portalını kullanarak bir Azure Databricks çalışma alanı oluşturursunuz.
Kaynak Azure portal Kaynak analizi oluştur'Azure Databricks. > >

Azure Databricks Hizmeti bölümünde, Databricks çalışma alanı oluşturmak için değerler sağlayın.

Çalışma alanının oluşturulması birkaç dakika sürer. İşlem durumunu izlemek için üstteki ilerleme çubuğunu görüntüleme.
Databricks’te Spark kümesi oluşturma
Uygulama Azure portal,oluşturduğunuz Azure Databricks çalışma alanına gidin ve Ardından Çalışma Alanını Başlat'ı seçin.
Azure Databricks portalına yönlendirilirsiniz. Portaldan Yeni Küme'yi > seçin.

Yeni küme sayfasında, bir küme oluşturmak için değerleri girin.

Aşağıdakiler dışında diğer tüm varsayılan değerleri kabul edin:
- Küme için bir ad girin.
- 120 dakika işlem yapılmadığında sonlandır onay kutusunu seçtiğinizden emin olun. Küme kullanılmazsa kümenin sonlandırılması için biz süre (dakika cinsinden) belirtin.
Küme oluştur'a seçin. Küme çalışmaya başladıktan sonra kümeye not defterleri ekleyebilir ve Spark işleri çalıştırabilirsiniz.
Küme oluşturma hakkında daha fazla bilgi için bkz. Azure Databricks üzerinde Spark kümesi oluşturma.
Not defteri oluşturma
Sol bölmede Çalışma Alanı’nı seçin. Çalışma Alanı açılır listesinden Oluştur > Not Defteri’ni seçin.

Not Defteri Oluştur iletişim kutusunda, not defterinizin adını girin. Dil olarak Python'ı ve ardından daha önce oluşturduğunuz Spark kümesi'ni seçin.

Oluştur’u seçin.
Databricks Delta tablosu oluşturma ve tabloyu doldurmak
Oluşturduğunuz not defterinde aşağıdaki kod bloğuna kopyalayıp ilk hücreye yapıştırın, ancak henüz bu kodu çalıştırmayın.
Bu kod bloğundaki , , yer tutucu değerlerini, bu öğreticinin önkoşullarını
appIdpasswordtenanttamamladıktan sonra toplanmış olan değerlerle değiştirin.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'Bu kod, source_file adlı bir pencere öğesi oluşturur. Daha sonra, bu kodu çağıran ve bu pencere öğesine bir dosya yolu iletir bir Azure İşlevi oluşturacağız. Bu kod ayrıca depolama hesabıyla hizmet sorumlusu kimliğini doğrular ve diğer hücrelerde kullanabileceğiniz bazı değişkenler oluşturur.
Not
Bir üretim ayarında, kimlik doğrulama anahtarınızı bir üretim Azure Databricks. Ardından, kimlik doğrulama anahtarı yerine kod bloğuna bir look up anahtarı ekleyin.
Örneğin, bu kod satırı yerine şuspark.conf.set("fs.azure.account.oauth2.client.secret", "<password>")kod satırı kullanılır:spark.conf.set("fs.azure.account.oauth2.client.secret", dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>")).
Bu öğreticiyi tamamlandıktan sonra, bu yaklaşımın örneklerini görmek için Azure Databricks Web Sitesinin Azure Data Lake Depolama 2. Nesil makalesine bakın.Bu blokta kodu çalıştırmak için SHIFT + ENTER tuşlarına basın.
Aşağıdaki kod bloğuna kopyalayıp farklı bir hücreye yapıştırın ve ardından SHIFT + ENTER tuşlarına basarak bu blokta kodu çalıştırın.
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))Bu kod, depolama hesabınıza Databricks Delta tablosu oluşturur ve ardından daha önce karşıya yüklediğiniz csv dosyasından bazı ilk verileri yükler.
Bu kod bloğu başarıyla çalıştırıldıktan sonra, not defterinize bu kod bloğundan kaldırın.
Databricks Delta tablosuna satır ekli kod ekleme
Aşağıdaki kod bloğuna kopyalayıp farklı bir hücreye yapıştırın, ancak bu hücreyi çalıştırmayın.
upsertDataDF = (spark .read .option("header", "true") .csv(inputPath) ) upsertDataDF.createOrReplaceTempView("customer_data_to_upsert")Bu kod, csv dosyasındaki verileri kullanarak geçici bir tablo görünümüne veri ekler. Bu csv dosyasının yolu, önceki bir adımda oluşturduğunuz giriş pencere öğesinden gelir.
Geçici tablo görünümünün içeriğini Databricks Delta tablosuyla birleştirmek için aşağıdaki kodu ekleyin.
%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)
İş Oluşturma
Daha önce oluşturduğunuz not defterini çalıştıran bir İş oluşturun. Daha sonra, bir olay olduğunda bu işi çalıştıran bir Azure İşlevi oluşturacağız.
İşler'e tıklayın.
İşler sayfasında İş Oluştur'a tıklayın.
İş için bir ad girin ve çalışma kitabını
upsert-order-dataseçin.
Azure İşlevi oluşturma
Işi çalıştıran bir Azure Işlevi oluşturun.
Databricks çalışma alanının üst köşesinde kişiler simgesini ve ardından Kullanıcı ayarları' nı seçin.

Yeni belirteç oluştur düğmesine tıklayın ve ardından Oluştur düğmesine tıklayın.
Belirteci güvenli bir yere kopyalamadığınızdan emin olun. Azure Işlevinizde bu belirtecin, Işi çalıştırabilmesi için Databricks ile kimlik doğrulaması yapması gerekir.
Azure portal sol üst köşesinde bulunan kaynak oluştur düğmesini seçin ve ardından işlem > işlev uygulaması' yı seçin.

İşlev Uygulaması oluştur sayfasında, çalışma zamanı yığını için .net Core ' u seçtiğinizden emin olun ve bir Application Insights örneği yapılandırdığınızdan emin olun.

İşlev Uygulaması genel bakış sayfasında yapılandırma' ya tıklayın.

uygulama Ayarlar sayfasında, her bir ayarı eklemek için yeni uygulama ayarı düğmesini seçin.

Aşağıdaki ayarları ekleyin:
Ayar adı Değer DBX_INSTANCE Databricks çalışma alanınızın bölgesi. Örnek: westus2.azuredatabricks.netDBX_PAT Daha önce oluşturduğunuz kişisel erişim belirteci. DBX_JOB_ID Çalışan işin tanımlayıcısı. Bu durumda, bu değer 1.İşlev uygulamasının genel bakış sayfasında, yeni işlev düğmesine tıklayın.

Azure Event Grid tetikleyiciyi seçin.
İstenirse Microsoft. Azure. WebJobs. Extensions. EventGrid uzantısını yükleyebilirsiniz. Yüklemek gerekirse, işlevi oluşturmak için Azure Event Grid tetikleyiciyi yeniden seçmeniz gerekir.
Yeni işlev bölmesi görüntülenir.
Yeni işlev bölmesinde, UpsertOrder Işlevini adlandırın ve ardından Oluştur düğmesine tıklayın.
Kod dosyasının içeriğini bu kodla değiştirin ve Kaydet düğmesine tıklayın:
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(); } } }
Bu kod, yükseltilen depolama olayı hakkında bilgi ayrıştırır ve sonra olayı tetikleyen dosyanın URL 'si ile bir istek iletisi oluşturur. İleti bir parçası olarak, işlev daha önce oluşturduğunuz source_file pencere öğesine bir değer geçirir. işlev kodu, iletiyi Databricks Işine gönderir ve daha önce kimlik doğrulaması olarak edindiğiniz belirteci kullanır.
Event Grid aboneliği oluşturma
Bu bölümde, depolama hesabına dosyalar yüklendiğinde Azure Işlevini çağıran bir Event Grid aboneliği oluşturacaksınız.
İşlev kodu sayfasında Event Grid abonelik Ekle düğmesine tıklayın.

Olay aboneliği oluştur sayfasında, aboneliği adlandırın ve ardından depolama hesabınızı seçmek için sayfadaki alanları kullanın.

Olay türlerine Filtre Uygula aşağı açılan listesinde, oluşturulan blobu ve BLOB silinen olayları seçin ve ardından Oluştur düğmesine tıklayın.
Event Grid aboneliğini test etme
Adlı bir dosya oluşturun
customer-order.csv, aşağıdaki bilgileri bu dosyaya yapıştırın ve yerel bilgisayarınıza kaydedin.InvoiceNo,StockCode,Description,Quantity,InvoiceDate,UnitPrice,CustomerID,Country 536371,99999,EverGlow Single,228,1/1/2018 9:01,33.85,20993,Sierra LeoneDepolama Gezgini, bu dosyayı depolama hesabınızın giriş klasörüne yükleyin.
bir dosyayı karşıya yüklemek, Microsoft. Depolama oluşturur. BlobCreated olayı. Event Grid tüm abonelere bu olaya bildirir. Bu durumda, Azure Işlevi tek abonemdir. Azure Işlevi, hangi olayın oluştuğunu belirleyen olay parametrelerini ayrıştırır. Daha sonra dosyanın URL 'sini Databricks Işine geçirir. Databricks Işi dosyayı okur ve depolama hesabınızda bulunan Databricks Delta tablosuna bir satır ekler.
İşin başarılı olup olmadığını denetlemek için, databricks çalışma alanınızı açın, işler düğmesine tıklayın ve ardından işinizi açın.
İş sayfasını açmak için işi seçin.

İş tamamlandığında, bir tamamlanma durumu görürsünüz.

Yeni bir çalışma kitabı hücresinde, güncelleştirilmiş Delta tablosunu görmek için bu sorguyu bir hücrede çalıştırın.
%sql select * from customer_dataDöndürülen tabloda en son kayıt gösterilmektedir.

Bu kaydı güncelleştirmek için adlı bir dosya oluşturun
customer-order-update.csv, aşağıdaki bilgileri bu dosyaya yapıştırın ve yerel bilgisayarınıza kaydedin.InvoiceNo,StockCode,Description,Quantity,InvoiceDate,UnitPrice,CustomerID,Country 536371,99999,EverGlow Single,22,1/1/2018 9:01,33.85,20993,Sierra LeoneBu CSV dosyası, siparişin miktarı ' den ' e değiştirilmedikçe öncekiyle neredeyse aynıdır
22822.Depolama Gezgini, bu dosyayı depolama hesabınızın giriş klasörüne yükleyin.
selectGüncelleştirilmiş Delta tablosunu görmek için sorguyu yeniden çalıştırın.%sql select * from customer_dataDöndürülen tablo, güncelleştirilmiş kaydı gösterir.

Kaynakları temizleme
Artık gerekli olmadığında kaynak grubunu ve tüm ilgili kaynakları silin. Bunu yapmak için depolama hesabına ait kaynak grubunu seçin ve Sil' i seçin.