Azure Data Factory ve Synapse Analytics işlem hatlarında kopyalama etkinliğinin hataya dayanıklılığı
UYGULANANLAR: Azure Data Factory
Azure Synapse Analytics
İpucu
Kuruluşlar için hepsi bir arada analiz çözümü olan Microsoft Fabric'te Data Factory'yi deneyin. Microsoft Fabric , veri taşımadan veri bilimine, gerçek zamanlı analize, iş zekasına ve raporlamaya kadar her şeyi kapsar. Yeni bir deneme sürümünü ücretsiz olarak başlatmayı öğrenin!
Verileri kaynaktan hedef depoya kopyaladığınızda kopyalama etkinliği, veri taşımanın ortasındaki hatalardan kaynaklanan kesintileri önlemek için belirli düzeyde hataya dayanıklılık sağlar. Örneğin, kaynaktan hedef depoya milyonlarca satır kopyalamış olursunuz; burada hedef veritabanında birincil anahtar oluşturulmuştur, ancak kaynak veritabanında tanımlı birincil anahtar yoktur. Yinelenen satırları kaynaktan hedefe kopyalamanız durumunda hedef veritabanında PK ihlali hatasıyla karşınıza çıkar. Şu anda kopyalama etkinliği size bu tür hataları işlemek için iki yol sunar:
- Herhangi bir hatayla karşılaşıldığında kopyalama etkinliğini durdurabilirsiniz.
- Uyumsuz verileri atlamak için hataya dayanıklılık özelliğini etkinleştirerek geri kalanını kopyalamaya devam edebilirsiniz. Örneğin, bu durumda yinelenen satırı atlayın. Ayrıca, kopyalama etkinliği içinde oturum günlüğünü etkinleştirerek atlanan verileri günlüğe kaydedebilirsiniz. Daha fazla ayrıntı için kopyalama etkinliğindeki oturum günlüğüne başvurabilirsiniz.
İkili dosyaları kopyalama
Hizmet, ikili dosyaları kopyalarken aşağıdaki hataya dayanıklılık senaryolarını destekler. Kopyalama etkinliğini durdurmayı veya gerisini kopyalamaya devam etmeyi aşağıdaki senaryolarda seçebilirsiniz:
- Hizmet tarafından kopyalanacak dosyalar diğer uygulamalar tarafından aynı anda siliniyor.
- Bu dosya veya klasörlerin ACL'leri yapılandırılan bağlantı bilgilerinden daha yüksek izin düzeyi gerektirdiğinden bazı belirli klasörler veya dosyalar hizmet erişimine izin vermez.
- Veri tutarlılığı doğrulama ayarını etkinleştirirseniz bir veya daha fazla dosyanın kaynak ve hedef depo arasında tutarlı olduğu doğrulanmaz.
Kullanıcı arabirimiyle hataya dayanıklılığı etkinleştirme
Kullanıcı arabirimine sahip bir işlem hattındaki Kopyalama etkinliği hataya dayanıklılık yapılandırmak için aşağıdaki adımları tamamlayın:
İşlem hattınız için zaten bir Kopyalama etkinliği oluşturmadıysanız, işlem hattı Etkinlikleri bölmesinde Kopyala'yı arayın ve veri kopyalama etkinliğini işlem hattı tuvaline sürükleyin.
Hataya dayanıklılığı yapılandırmak için tuvalde henüz seçili değilse yeni Veri Kopyalama etkinliğini ve Ayarlar sekmesini seçin.
Yapılandırma
İkili dosyaları depolama depoları arasında kopyalarken hataya dayanıklılık özelliğini aşağıdaki gibi etkinleştirebilirsiniz:
{
"name": "CopyActivityFaultTolerance",
"type": "Copy",
"typeProperties": {
"source": {
"type": "BinarySource",
"storeSettings": {
"type": "AzureDataLakeStoreReadSettings",
"recursive": true
}
},
"sink": {
"type": "BinarySink",
"storeSettings": {
"type": "AzureDataLakeStoreWriteSettings"
}
},
"skipErrorFile": {
"fileMissing": true,
"fileForbidden": true,
"dataInconsistency": true,
"invalidFileName": true
},
"validateDataConsistency": true,
"logSettings": {
"enableCopyActivityLog": true,
"copyActivityLogSettings": {
"logLevel": "Warning",
"enableReliableLogging": false
},
"logLocationSettings": {
"linkedServiceName": {
"referenceName": "ADLSGen2",
"type": "LinkedServiceReference"
},
"path": "sessionlog/"
}
}
}
}
Özellik | Açıklama | İzin verilen değerler | Zorunlu |
---|---|---|---|
skipErrorFile | Veri taşıma sırasında atlamak istediğiniz hata türlerini belirtmek için bir özellik grubu. | Hayır | |
fileMissing | Hizmetin kopyalama işlemini gerçekleştirdiği sırada diğer uygulamalar tarafından silinen dosyaları atlamak isteyip istemediğinizi belirlemek için skipErrorFile özellik paketi içindeki anahtar-değer çiftlerinden biri. -True: Diğer uygulamalar tarafından silinen dosyaları atlayarak geri kalanını kopyalamak istiyorsunuz. - Yanlış: Veri taşımanın ortasında herhangi bir dosya kaynak depodan silindikten sonra kopyalama etkinliğini durdurmak istiyorsunuz. Bu özelliğin varsayılan olarak true olarak ayarlandığını unutmayın. |
True(varsayılan) False |
Hayır |
fileForbidden | Bu dosya veya klasörlerin ACL'leri yapılandırılan bağlantıdan daha yüksek izin düzeyi gerektirdiğinde, belirli dosyaları atlamak isteyip istemediğinizi belirlemek için skipErrorFile özellik paketindeki anahtar-değer çiftlerinden biri. -True: Dosyaları atlayarak geri kalanını kopyalamak istiyorsunuz. - Yanlış: Klasörlerde veya dosyalarda izin sorununu aldıktan sonra kopyalama etkinliğini durdurmak istiyorsunuz. |
Doğru False(varsayılan) |
Hayır |
dataInconsistency | Kaynak ve hedef depo arasındaki tutarsız verileri atlamak isteyip istemediğinizi belirlemek için skipErrorFile özellik paketi içindeki anahtar-değer çiftlerinden biri. -True: Tutarsız verileri atlayarak geri kalanını kopyalamak istiyorsunuz. - Yanlış: Tutarsız veriler bulunduktan sonra kopyalama etkinliğini durdurmak istiyorsunuz. Bu özelliğin yalnızca validateDataConsistency değerini True olarak ayarladığınızda geçerli olduğunu unutmayın. |
Doğru False(varsayılan) |
Hayır |
invalidFileName | Hedef depo için dosya adları geçersiz olduğunda, belirli dosyaları atlamak isteyip istemediğinizi belirlemek için skipErrorFile özellik paketi içindeki anahtar-değer çiftlerinden biri. -True: Geçersiz dosya adlarına sahip dosyaları atlayarak geri kalanını kopyalamak istiyorsunuz. - Yanlış: Herhangi bir dosya geçersiz dosya adlarına sahip olduğunda kopyalama etkinliğini durdurmak istiyorsunuz. Bu özelliğin, herhangi bir depolama deposundan ADLS 2. Nesil'e ikili dosyaları kopyalarken veya ikili dosyaları AWS S3'ten yalnızca herhangi bir depolama deposuna kopyalarken çalıştığını unutmayın. |
Doğru False(varsayılan) |
Hayır |
logSettings | Atlanan nesne adlarını günlüğe kaydetmek istediğinizde belirtilebilen bir özellik grubu. | Hayır | |
linkedServiceName | Oturum günlüğü dosyalarını depolamak için Azure Blob Depolama veya Azure Data Lake Storage 2. Nesil bağlı hizmeti. | Günlük dosyasını depolamak AzureBlobStorage için kullandığınız örneğe başvuran veya AzureBlobFS türüne bağlı hizmetin adları. |
Hayır |
yol | Günlük dosyalarının yolu. | Günlük dosyalarını depolamak için kullandığınız yolu belirtin. Yol sağlamazsanız, hizmet sizin için bir kapsayıcı oluşturur. | Hayır |
Not
Aşağıdakiler, ikili dosyaları kopyalarken kopyalama etkinliğinde hataya dayanıklılığı etkinleştirmenin önkoşullarıdır. Belirli dosyalar kaynak depodan silinirken atlanması için:
- Kaynak veri kümesinin ve havuz veri kümesinin ikili biçimli olması gerekir ve sıkıştırma türü belirtilemez.
- Desteklenen veri deposu türleri Azure Blob depolama, Azure Data Lake Storage 1. Nesil, Azure Data Lake Storage 2. Nesil, Azure Dosyalar, Dosya Sistemi, FTP, SFTP, Amazon S3, Google Cloud Storage ve HDFS'dir.
- Yalnızca kaynak veri kümesinde klasör, joker karakter veya dosya listesi olabilecek birden çok dosya belirttiğinizde kopyalama etkinliği belirli hata dosyalarını atlayabilir. Kaynağa kopyalanacak kaynak veri kümesinde tek bir dosya belirtilirse, hata oluşursa kopyalama etkinliği başarısız olur.
Kaynak depodan erişimleri yasak olduğunda belirli dosyaları atlamak için:
- Kaynak veri kümesinin ve havuz veri kümesinin ikili biçimli olması gerekir ve sıkıştırma türü belirtilemez.
- Desteklenen veri deposu türleri Azure Blob depolama, Azure Data Lake Storage 1. Nesil, Azure Data Lake Storage 2. Nesil, Azure Dosyalar, SFTP, Amazon S3 ve HDFS'dir.
- Yalnızca kaynak veri kümesinde klasör, joker karakter veya dosya listesi olabilecek birden çok dosya belirttiğinizde kopyalama etkinliği belirli hata dosyalarını atlayabilir. Kaynağa kopyalanacak kaynak veri kümesinde tek bir dosya belirtilirse, hata oluşursa kopyalama etkinliği başarısız olur.
Kaynak ve hedef depo arasında tutarsız oldukları doğrulandığında belirli dosyaları atlamak için:
- Veri tutarlılığı belgesinden daha fazla ayrıntıya buradan ulaşabilirsiniz.
İzleme
Kopyalama etkinliğinden çıktı
Okunan, yazılan ve atlanan dosya sayısını, her kopyalama etkinliği çalıştırmasının çıktısı aracılığıyla alabilirsiniz.
"output": {
"dataRead": 695,
"dataWritten": 186,
"filesRead": 3,
"filesWritten": 1,
"filesSkipped": 2,
"throughput": 297,
"logFilePath": "myfolder/a84bf8d4-233f-4216-8cb5-45962831cd1b/",
"dataConsistencyVerification":
{
"VerificationResult": "Verified",
"InconsistentData": "Skipped"
}
}
Kopyalama etkinliğinden oturum günlüğü
Atlanan dosya adlarını günlüğe kaydedecek şekilde yapılandırdıysanız, günlük dosyasını şu yoldan bulabilirsiniz: https://[your-blob-account].blob.core.windows.net/[path-if-configured]/copyactivity-logs/[copy-activity-name]/[copy-activity-run-id]/[auto-generated-GUID].csv
.
Günlük dosyalarının csv dosyaları olması gerekir. Günlük dosyasının şeması aşağıdaki gibidir:
Sütun | Açıklama |
---|---|
Zaman damgası | Dosyanın atlandığı zaman damgası. |
Level | Bu öğenin günlük düzeyi. Dosya atlayan öğe için 'Uyarı' düzeyinde olacaktır. |
OperationName | Her dosyada işlem davranışını Kopyalama etkinliği. Atlanacak dosyayı belirtmek için 'FileSkip' olacaktır. |
OperationItem | Atlanacak dosya adları. |
İleti | Dosyanın neden atlandığını göstermek için daha fazla bilgi. |
Günlük dosyası örneği aşağıdaki gibidir:
Timestamp,Level,OperationName,OperationItem,Message
2020-03-24 05:35:41.0209942,Warning,FileSkip,"bigfile.csv","File is skipped after read 322961408 bytes: ErrorCode=UserErrorSourceBlobNotExist,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=The required Blob is missing. ContainerName: https://transferserviceonebox.blob.core.windows.net/skipfaultyfile, path: bigfile.csv.,Source=Microsoft.DataTransfer.ClientLibrary,'."
2020-03-24 05:38:41.2595989,Warning,FileSkip,"3_nopermission.txt","File is skipped after read 0 bytes: ErrorCode=AdlsGen2OperationFailed,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=ADLS Gen2 operation failed for: Operation returned an invalid status code 'Forbidden'. Account: 'adlsgen2perfsource'. FileSystem: 'skipfaultyfilesforbidden'. Path: '3_nopermission.txt'. ErrorCode: 'AuthorizationPermissionMismatch'. Message: 'This request is not authorized to perform this operation using this permission.'. RequestId: '35089f5d-101f-008c-489e-01cce4000000'..,Source=Microsoft.DataTransfer.ClientLibrary,''Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Operation returned an invalid status code 'Forbidden',Source=,''Type=Microsoft.Azure.Storage.Data.Models.ErrorSchemaException,Message='Type=Microsoft.Azure.Storage.Data.Models.ErrorSchemaException,Message=Operation returned an invalid status code 'Forbidden',Source=Microsoft.DataTransfer.ClientLibrary,',Source=Microsoft.DataTransfer.ClientLibrary,'."
Yukarıdaki günlükten, hizmet dosyayı kopyalarken başka bir uygulamanın bu dosyayı silmesi nedeniyle bigfile.csv atlandığını görebilirsiniz. Ayrıca 3_nopermission.txt, izin sorunu nedeniyle hizmete erişmesine izin verilmediğinden atlandı.
Tablosal verileri kopyalama
Desteklenen senaryolar
Kopyalama etkinliği uyumsuz tablo verilerini algılamak, atlamak ve günlüğe kaydetmek için üç senaryo destekler:
Kaynak veri türü ile havuz yerel türü arasındaki uyumsuzluk.
Örneğin: Blob depolamadaki bir CSV dosyasından, üç INT türü sütunu içeren şema tanımına sahip bir SQL veritabanına veri kopyalayın. 123.456.789 gibi sayısal veriler içeren CSV dosya satırları havuz deposuna başarıyla kopyalanır. Ancak, 123.456, abc gibi sayısal olmayan değerler içeren satırlar uyumsuz olarak algılanır ve atlanır.
Kaynak ile havuz arasındaki sütun sayısında uyuşmazlık.
Örneğin: Blob depolamadaki bir CSV dosyasından, altı sütun içeren şema tanımına sahip bir SQL veritabanına veri kopyalayın. Altı sütun içeren CSV dosya satırları havuz deposuna başarıyla kopyalanır. Altıdan fazla sütun içeren CSV dosya satırları uyumsuz olarak algılanır ve atlanır.
SQL Server/Azure SQL Veritabanı/Azure Cosmos DB'ye yazarken birincil anahtar ihlali.
Örneğin: SQL sunucusundan SQL veritabanına veri kopyalama. Havuz SQL veritabanında birincil anahtar tanımlanır, ancak kaynak SQL sunucusunda böyle bir birincil anahtar tanımlanmamıştır. Kaynakta bulunan yinelenen satırlar havuza kopyalanamaz. Kopyalama etkinliği kaynak verilerin yalnızca ilk satırını havuza kopyalar. Yinelenen birincil anahtar değerini içeren sonraki kaynak satırlar uyumsuz olarak algılanır ve atlanır.
Not
- PolyBase kullanarak Azure Synapse Analytics'e veri yüklemek için kopyalama etkinliğinde "polyBaseSettings" aracılığıyla reddetme ilkeleri belirterek PolyBase'in yerel hataya dayanıklılık ayarlarını yapılandırın. Aşağıda gösterildiği gibi PolyBase uyumsuz satırları Blob veya ADLS'ye yeniden yönlendirmeyi yine de etkinleştirebilirsiniz.
- Kopyalama etkinliği Amazon Redshift Unload'ı çağıracak şekilde yapılandırıldığında bu özellik geçerli değildir.
- Kopyalama etkinliği sql havuzundaki saklı yordamı çağıracak şekilde yapılandırıldığında veya SQL havuzuna veri yazmak için Upsert kullanıldığında bu özellik geçerli değildir.
Yapılandırma
Aşağıdaki örnek, kopyalama etkinliğindeki uyumsuz satırları atlayarak yapılandırmaya yönelik bir JSON tanımı sağlar:
"typeProperties": {
"source": {
"type": "AzureSqlSource"
},
"sink": {
"type": "AzureSqlSink"
},
"enableSkipIncompatibleRow": true,
"logSettings": {
"enableCopyActivityLog": true,
"copyActivityLogSettings": {
"logLevel": "Warning",
"enableReliableLogging": false
},
"logLocationSettings": {
"linkedServiceName": {
"referenceName": "ADLSGen2",
"type": "LinkedServiceReference"
},
"path": "sessionlog/"
}
}
},
Özellik | Açıklama | İzin verilen değerler | Zorunlu |
---|---|---|---|
enableSkipIncompatibleRow | Kopyalama sırasında uyumsuz satırların atlanıp atlanmayacağını belirtir. | True False (varsayılan) |
Hayır |
logSettings | Uyumsuz satırları günlüğe kaydetmek istediğinizde belirtilebilen bir özellik grubu. | Hayır | |
linkedServiceName | Atlanan satırları içeren günlüğü depolamak için Azure Blob Depolama veya Azure Data Lake Storage 2. Nesil bağlı hizmeti. | Günlük dosyasını depolamak AzureBlobStorage için kullandığınız örneğe başvuran veya AzureBlobFS türüne bağlı hizmetin adları. |
Hayır |
yol | Atlanan satırları içeren günlük dosyalarının yolu. | Uyumsuz verileri günlüğe kaydetmek için kullanmak istediğiniz yolu belirtin. Yol sağlamazsanız, hizmet sizin için bir kapsayıcı oluşturur. | Hayır |
Atlanan satırları izleme
Kopyalama etkinliği çalıştırması tamamlandıktan sonra, kopyalama etkinliğinin çıkışında atlanan satır sayısını görebilirsiniz:
"output": {
"dataRead": 95,
"dataWritten": 186,
"rowsCopied": 9,
"rowsSkipped": 2,
"copyDuration": 16,
"throughput": 0.01,
"logFilePath": "myfolder/a84bf8d4-233f-4216-8cb5-45962831cd1b/",
"errors": []
},
Uyumsuz satırları günlüğe kaydedecek şekilde yapılandırdıysanız, günlük dosyasını şu yoldan bulabilirsiniz: https://[your-blob-account].blob.core.windows.net/[path-if-configured]/copyactivity-logs/[copy-activity-name]/[copy-activity-run-id]/[auto-generated-GUID].csv
.
Günlük dosyaları csv dosyaları olacaktır. Günlük dosyasının şeması aşağıdaki gibidir:
Sütun | Açıklama |
---|---|
Zaman damgası | Uyumsuz satırların atlandığı zaman damgası |
Level | Bu öğenin günlük düzeyi. Bu öğe atlanan satırları gösterirse 'Uyarı' düzeyinde olacaktır |
OperationName | Her satırda işlem davranışını Kopyalama etkinliği. Belirli uyumsuz satırın atlandığını belirtmek için 'TabularRowSkip' olacaktır |
OperationItem | Kaynak veri deposundan atlanan satırlar. |
İleti | Bu satırın uyumsuzluğunu göstermek için daha fazla bilgi. |
Günlük dosyası içeriğine bir örnek aşağıdaki gibidir:
Timestamp, Level, OperationName, OperationItem, Message
2020-02-26 06:22:32.2586581, Warning, TabularRowSkip, """data1"", ""data2"", ""data3""," "Column 'Prop_2' contains an invalid value 'data3'. Cannot convert 'data3' to type 'DateTime'."
2020-02-26 06:22:33.2586351, Warning, TabularRowSkip, """data4"", ""data5"", ""data6"",", "Violation of PRIMARY KEY constraint 'PK_tblintstrdatetimewithpk'. Cannot insert duplicate key in object 'dbo.tblintstrdatetimewithpk'. The duplicate key value is (data4)."
Yukarıdaki örnek günlük dosyasından kaynaktan hedef depoya tür dönüştürme sorunu nedeniyle bir satır "veri1, veri2, veri3" atlandığını görebilirsiniz. Kaynaktan hedef depoya PK ihlali sorunu nedeniyle başka bir "data4, data5, data6" satırı atlandı.
Tablo verilerini kopyalama (eski):
Aşağıdaki yaklaşım, yalnızca tablo verilerini kopyalamak için hataya dayanıklılık sağlamanın eski yoludur. Yeni işlem hattı veya etkinlik oluşturuyorsanız, bunun yerine buradan başlamanız tavsiye edilir.
Yapılandırma
Aşağıdaki örnek, kopyalama etkinliğindeki uyumsuz satırları atlayarak yapılandırmaya yönelik bir JSON tanımı sağlar:
"typeProperties": {
"source": {
"type": "BlobSource"
},
"sink": {
"type": "SqlSink",
},
"enableSkipIncompatibleRow": true,
"redirectIncompatibleRowSettings": {
"linkedServiceName": {
"referenceName": "<Azure Storage or Data Lake Store linked service>",
"type": "LinkedServiceReference"
},
"path": "redirectcontainer/erroroutput"
}
}
Özellik | Açıklama | İzin verilen değerler | Zorunlu |
---|---|---|---|
enableSkipIncompatibleRow | Kopyalama sırasında uyumsuz satırların atlanıp atlanmayacağını belirtir. | True False (varsayılan) |
Hayır |
redirectIncompatibleRowSettings | Uyumsuz satırları günlüğe kaydetmek istediğinizde belirtilebilen bir özellik grubu. | Hayır | |
linkedServiceName | Atlanan satırları içeren günlüğü depolamak için Azure Depolama'nın veya Azure Data Lake Store'un bağlı hizmeti. | Günlük dosyasını depolamak AzureStorage için kullanmak istediğiniz örneğe başvuran veya AzureDataLakeStore türü bağlı hizmetin adları. |
Hayır |
yol | Atlanan satırları içeren günlük dosyasının yolu. | Uyumsuz verileri günlüğe kaydetmek için kullanmak istediğiniz yolu belirtin. Yol sağlamazsanız, hizmet sizin için bir kapsayıcı oluşturur. | Hayır |
Atlanan satırları izleme
Kopyalama etkinliği çalıştırması tamamlandıktan sonra, kopyalama etkinliğinin çıkışında atlanan satır sayısını görebilirsiniz:
"output": {
"dataRead": 95,
"dataWritten": 186,
"rowsCopied": 9,
"rowsSkipped": 2,
"copyDuration": 16,
"throughput": 0.01,
"redirectRowPath": "https://myblobstorage.blob.core.windows.net//myfolder/a84bf8d4-233f-4216-8cb5-45962831cd1b/",
"errors": []
},
Uyumsuz satırları günlüğe kaydedecek şekilde yapılandırdıysanız, günlük dosyasını şu yolda bulabilirsiniz: https://[your-blob-account].blob.core.windows.net/[path-if-configured]/[copy-activity-run-id]/[auto-generated-GUID].csv
.
Günlük dosyaları yalnızca csv dosyaları olabilir. Atlanan özgün veriler gerekirse sütun sınırlayıcısı olarak virgülle günlüğe kaydedilir. Günlük dosyasındaki özgün kaynak verilere ek olarak iki "ErrorCode" ve "ErrorMessage" sütunu daha ekliyoruz; burada uyumsuzluğun kök nedenini görebilirsiniz. ErrorCode ve ErrorMessage çift tırnak içine alınır.
Günlük dosyası içeriğine bir örnek aşağıdaki gibidir:
data1, data2, data3, "UserErrorInvalidDataValue", "Column 'Prop_2' contains an invalid value 'data3'. Cannot convert 'data3' to type 'DateTime'."
data4, data5, data6, "2627", "Violation of PRIMARY KEY constraint 'PK_tblintstrdatetimewithpk'. Cannot insert duplicate key in object 'dbo.tblintstrdatetimewithpk'. The duplicate key value is (data4)."
İlgili içerik
Diğer kopyalama etkinliği makalelerine bakın: