Aracılığıyla paylaş


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:

  1. Hizmet tarafından kopyalanacak dosyalar diğer uygulamalar tarafından aynı anda siliniyor.
  2. 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.
  3. 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:

  1. İş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.

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

    Ayarlar sekmesinde hataya dayanıklılık yapılandırması vurgulanmış şekilde Veri Kopyalama etkinliğinin kullanıcı arabirimini gösterir.

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:

İ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)."

Diğer kopyalama etkinliği makalelerine bakın: