Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önemli
Azure Synapse Analytics Veri Gezgini (Önizleme) 7 Ekim 2025'te kullanımdan kaldırılacaktır. Bu tarihten sonra Synapse Veri Gezgini'ne çalışan iş yükleri silinir ve ilişkili uygulama verileri kaybolur. Microsoft Fabric'te Eventhouse'a geçiş yapmanızı kesinlikle öneririz.
Microsoft Cloud Migration Factory (CMF) programı, müşterilere Fabric'e geçişte yardımcı olmak için tasarlanmıştır. Program, müşteriye hiçbir ücret ödemeden uygulamalı klavye kaynakları sunar. Bu kaynaklar, önceden tanımlanmış ve üzerinde anlaşmaya varılmış bir kapsama sahip 6-8 haftalık bir süre için atanır. Müşteri adaylıkları Microsoft hesabı ekibinden veya doğrudan CMF ekibine yardım isteği gönderilerek kabul edilir.
Azure Synapse Veri Gezgini, günlük ve telemetri verileri için hızlı ve yüksek oranda ölçeklenebilir bir veri araştırma hizmetidir. Azure Synapse Veri Gezgini, Event Hubs, IoT Hubs ve blob kapsayıcılarına yazılan bloblardan veri alımı (veri yükleme) sunar.
Bu makalede, C# kullanarak Azure Synapse Veri Gezgini için bir Event Hubs veri bağlantısı oluşturacaksınız.
Önkoşullar
Bir Azure aboneliği. Ücretsiz bir Azure hesabı oluşturun.
Synapse Studio'yu veya Azure portalını kullanarak Veri Gezgini havuzu oluşturma
Veri Gezgini veritabanı oluşturma.
Synapse Studio'da sol taraftaki bölmede Veri'yi seçin.
+ (Yeni kaynak ekle) >Veri Gezgini havuzu'nu seçin ve aşağıdaki bilgileri kullanın:
Setting Önerilen değer Description Havuz adı contosodataexplorer Kullanılacak Veri Gezgini havuzunun adı İsim TestDatabase Veritabanı adı küme içinde benzersiz olmalıdır. Varsayılan saklama süresi 365 Verilerin sorgulanabilir durumda tutulduğundan emin olunan süre (gün olarak). Zaman aralığı verilerin alındığı andan itibaren hesaplanır. Varsayılan önbellek dönemi 31 Sık sorgulanan verilerin daha uzun süreli depolama yerine SSD depolama veya RAM'de kullanılabilir durumda tutulması gereken zaman aralığı (gün cinsinden). Veritabanını oluşturmak için Oluştur'u seçin. Oluşturma işlemi genellikle bir dakikadan kısa sürer.
- Veri alımına yönelik olay hub'ı.
Uyarı
Synapse çalışma alanınız veri sızdırma koruması etkinleştirilmiş yönetilen bir sanal ağ kullanıyorsa, Event Hub'dan Veri Gezgini havuzlarına veri aktarma işlemi çalışmayacaktır.
- Visual Studio 2019, ücretsizVisual Studio 2019 Community Edition'ı indirin ve kullanın. Visual Studio kurulumu sırasında Azure geliştirmeyi etkinleştirin.
Test kümenizde tablo oluşturma
Dosyadaki StormEvents verilerin şemasıyla eşleşen adlı StormEvents.csv bir tablo oluşturun.
İpucu
Aşağıdaki kod parçacıkları, neredeyse her çağrı için bir istemci örneği oluşturur. Bu, her kod parçacığını ayrı ayrı çalıştırılabilir hale getirmek için yapılır. Üretimde istemci örnekleri tekrar girilebilir olup gerektiği kadar tutulmalıdır. URI başına tek bir istemci örneği, birden çok veritabanıyla çalışırken bile yeterlidir (veritabanı bir komut düzeyinde belirtilebilir).
var databaseName = "<DatabaseName>";
var table = "StormEvents";
using (var kustoClient = KustoClientFactory.CreateCslAdminProvider(kustoConnectionStringBuilder))
{
var command =
CslCommandGenerator.GenerateTableCreateCommand(
table,
new[]
{
Tuple.Create("StartTime", "System.DateTime"),
Tuple.Create("EndTime", "System.DateTime"),
Tuple.Create("EpisodeId", "System.Int32"),
Tuple.Create("EventId", "System.Int32"),
Tuple.Create("State", "System.String"),
Tuple.Create("EventType", "System.String"),
Tuple.Create("InjuriesDirect", "System.Int32"),
Tuple.Create("InjuriesIndirect", "System.Int32"),
Tuple.Create("DeathsDirect", "System.Int32"),
Tuple.Create("DeathsIndirect", "System.Int32"),
Tuple.Create("DamageProperty", "System.Int32"),
Tuple.Create("DamageCrops", "System.Int32"),
Tuple.Create("Source", "System.String"),
Tuple.Create("BeginLocation", "System.String"),
Tuple.Create("EndLocation", "System.String"),
Tuple.Create("BeginLat", "System.Double"),
Tuple.Create("BeginLon", "System.Double"),
Tuple.Create("EndLat", "System.Double"),
Tuple.Create("EndLon", "System.Double"),
Tuple.Create("EpisodeNarrative", "System.String"),
Tuple.Create("EventNarrative", "System.String"),
Tuple.Create("StormSummary", "System.Object"),
});
kustoClient.ExecuteControlCommand(databaseName, command);
}
Veri alımı eşlemesini tanımlayın
Gelen CSV verilerini tabloyu oluştururken kullanılan sütun adlarına eşleyin. Bu tabloda bir CSV sütun eşleme nesnesi sağlayın.
var tableMapping = "StormEvents_CSV_Mapping";
using (var kustoClient = KustoClientFactory.CreateCslAdminProvider(kustoConnectionStringBuilder))
{
var command =
CslCommandGenerator.GenerateTableMappingCreateCommand(
Data.Ingestion.IngestionMappingKind.Csv,
table,
tableMapping,
new[] {
new ColumnMapping() { ColumnName = "StartTime", Properties = new Dictionary<string, string>() { { MappingConsts.Ordinal, "0" } } },
new ColumnMapping() { ColumnName = "EndTime", Properties = new Dictionary<string, string>() { { MappingConsts.Ordinal, "1" } } },
new ColumnMapping() { ColumnName = "EpisodeId", Properties = new Dictionary<string, string>() { { MappingConsts.Ordinal, "2" } } },
new ColumnMapping() { ColumnName = "EventId", Properties = new Dictionary<string, string>() { { MappingConsts.Ordinal, "3" } } },
new ColumnMapping() { ColumnName = "State", Properties = new Dictionary<string, string>() { { MappingConsts.Ordinal, "4" } } },
new ColumnMapping() { ColumnName = "EventType", Properties = new Dictionary<string, string>() { { MappingConsts.Ordinal, "5" } } },
new ColumnMapping() { ColumnName = "InjuriesDirect", Properties = new Dictionary<string, string>() { { MappingConsts.Ordinal, "6" } } },
new ColumnMapping() { ColumnName = "InjuriesIndirect", Properties = new Dictionary<string, string>() { { MappingConsts.Ordinal, "7" } } },
new ColumnMapping() { ColumnName = "DeathsDirect", Properties = new Dictionary<string, string>() { { MappingConsts.Ordinal, "8" } } },
new ColumnMapping() { ColumnName = "DeathsIndirect", Properties = new Dictionary<string, string>() { { MappingConsts.Ordinal, "9" } } },
new ColumnMapping() { ColumnName = "DamageProperty", Properties = new Dictionary<string, string>() { { MappingConsts.Ordinal, "10" } } },
new ColumnMapping() { ColumnName = "DamageCrops", Properties = new Dictionary<string, string>() { { MappingConsts.Ordinal, "11" } } },
new ColumnMapping() { ColumnName = "Source", Properties = new Dictionary<string, string>() { { MappingConsts.Ordinal, "12" } } },
new ColumnMapping() { ColumnName = "BeginLocation", Properties = new Dictionary<string, string>() { { MappingConsts.Ordinal, "13" } } },
new ColumnMapping() { ColumnName = "EndLocation", Properties = new Dictionary<string, string>() { { MappingConsts.Ordinal, "14" } } },
new ColumnMapping() { ColumnName = "BeginLat", Properties = new Dictionary<string, string>() { { MappingConsts.Ordinal, "15" } } },
new ColumnMapping() { ColumnName = "BeginLon", Properties = new Dictionary<string, string>() { { MappingConsts.Ordinal, "16" } } },
new ColumnMapping() { ColumnName = "EndLat", Properties = new Dictionary<string, string>() { { MappingConsts.Ordinal, "17" } } },
new ColumnMapping() { ColumnName = "EndLon", Properties = new Dictionary<string, string>() { { MappingConsts.Ordinal, "18" } } },
new ColumnMapping() { ColumnName = "EpisodeNarrative", Properties = new Dictionary<string, string>() { { MappingConsts.Ordinal, "19" } } },
new ColumnMapping() { ColumnName = "EventNarrative", Properties = new Dictionary<string, string>() { { MappingConsts.Ordinal, "20" } } },
new ColumnMapping() { ColumnName = "StormSummary", Properties = new Dictionary<string, string>() { { MappingConsts.Ordinal, "21" } } }
});
kustoClient.ExecuteControlCommand(databaseName, command);
}
C# NuGet'i yükleme
Authentication
Aşağıdaki örneği çalıştırmak için kaynaklara erişebilen bir Microsoft Entra uygulamasına ve hizmet sorumlusuna ihtiyacınız vardır. Ücretsiz bir Microsoft Entra uygulaması oluşturmak ve abonelik düzeyinde rol ataması eklemek için bkz . Microsoft Entra uygulaması oluşturma. Ayrıca dizin (kiracı) kimliğine, uygulama kimliğine ve istemci gizliliğine ihtiyacınız vardır.
Event Hubs veri bağlantısı ekleme
Aşağıdaki örnekte program aracılığıyla Event Hubs veri bağlantısının nasıl ekleneceği gösterilmektedir. Azure portalını kullanarak bir Event Hubs veri bağlantısı ekleme hakkında bilgi için Event Hubs'a bağlanma bölümüne bakın.
var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";//Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";//Application ID
var clientSecret = "xxxxxxxxxxxxxx";//Client Secret
var subscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var authenticationContext = new AuthenticationContext($"https://login.windows.net/{tenantId}");
var credential = new ClientCredential(clientId, clientSecret);
var result = await authenticationContext.AcquireTokenAsync(resource: "https://management.core.windows.net/", clientCredential: credential);
var credentials = new TokenCredentials(result.AccessToken, result.AccessTokenType);
var kustoManagementClient = new KustoManagementClient(credentials)
{
SubscriptionId = subscriptionId
};
var resourceGroupName = "testrg";
//The cluster and database that are created as part of the Prerequisites
var clusterName = "mykustocluster";
var databaseName = "mykustodatabase";
var dataConnectionName = "myeventhubconnect";
//The Event Hub that is created as part of the Prerequisites
var eventHubResourceId = "/subscriptions/xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx/resourceGroups/xxxxxx/providers/Microsoft.EventHub/namespaces/xxxxxx/eventhubs/xxxxxx";
var consumerGroup = "$Default";
var location = "Central US";
//The table and column mapping are created as part of the Prerequisites
var tableName = "StormEvents";
var mappingRuleName = "StormEvents_CSV_Mapping";
var dataFormat = DataFormat.CSV;
var compression = "None";
await kustoManagementClient.DataConnections.CreateOrUpdateAsync(resourceGroupName, clusterName, databaseName, dataConnectionName,
new EventHubDataConnection(eventHubResourceId, consumerGroup, location: location, tableName: tableName, mappingRuleName: mappingRuleName, dataFormat: dataFormat, compression: compression));
| Setting | Önerilen değer | Alan açıklaması |
|---|---|---|
| tenantId | xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxxx | Kiracı kimliğiniz. Dizin kimliği olarak da bilinir. |
| subscriptionId | xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxxx | Kaynak oluşturmak için kullandığınız abonelik kimliği. |
| clientId | xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxxx | Kiracınızdaki kaynaklara erişebilen uygulamanın istemci kimliği. |
| clientSecret | xxxxxxxxxxx | Kiracınızdaki kaynaklara erişebilen uygulamanın istemci sırrı. |
| resourceGroupName | testrg | Kümenizi içeren kaynak grubunun adı. |
| kümeAdı | mykustocluster | Kümenizin adı. |
| databaseName | mykustodatabase | Kümenizdeki hedef veritabanının adı. |
| veriBağlantıAdı | myeventhubconnect | Veri bağlantınızın istenen adı. |
| tableName | StormEvents | Hedef veritabanındaki hedef tablonun adı. |
| mappingKuralAdı | FırtınaOlayları_CSV_Haritalama | Hedef tabloyla ilgili sütun eşlemenizin adı. |
| veri formatı | csv | İletinin veri biçimi. |
| EventHubKaynakKimliği | Kaynak Kimliği | Alım verilerini tutan olay hub'ınızın kaynak kimliği. |
| tüketici grubu | $Varsayılan | Olay hub'ınızın tüketici grubu. |
| location | Orta ABD | Veri bağlantısı kaynağının konumu. |
| compression | Gzip veya Yok | Veri sıkıştırma türü. |
Veri oluştur
Veri oluşturan ve bir olay hub'ına gönderen örnek uygulamaya bakın.
Bir olay, boyut sınırına kadar bir veya daha fazla kayıt içerebilir. Aşağıdaki örnekte iki olay gönderiyoruz, her birinde beş kayıt eklenmiştir:
var events = new List<EventData>();
var data = string.Empty;
var recordsPerEvent = 5;
var rand = new Random();
var counter = 0;
for (var i = 0; i < 10; i++)
{
// Create the data
var metric = new Metric { Timestamp = DateTime.UtcNow, MetricName = "Temperature", Value = rand.Next(-30, 50) };
var data += JsonConvert.SerializeObject(metric) + Environment.NewLine;
counter++;
// Create the event
if (counter == recordsPerEvent)
{
var eventData = new EventData(Encoding.UTF8.GetBytes(data));
events.Add(eventData);
counter = 0;
data = string.Empty;
}
}
// Send events
eventHubClient.SendAsync(events).Wait();
Kaynakları temizle
Veri bağlantısını silmek için aşağıdaki komutu kullanın:
kustoManagementClient.DataConnections.Delete(resourceGroupName, clusterName, databaseName, dataConnectionName);