Przenoszenie danych z serwera SFTP przy użyciu Azure Data Factory

Uwaga

Ten artykuł dotyczy wersji 1 usługi Data Factory. Jeśli używasz bieżącej wersji usługi Data Factory, zobacz SFTPconnector w wersji 2.

W tym artykule opisano sposób użycia działania kopiowania w Azure Data Factory w celu przeniesienia danych z lokalnego/chmurowego serwera SFTP do obsługiwanego magazynu danych ujścia. Ten artykuł opiera się na artykule dotyczącym działań przenoszenia danych , który przedstawia ogólny przegląd przenoszenia danych z działaniem kopiowania oraz listę magazynów danych obsługiwanych jako źródła/ujścia.

Usługa Data Factory obsługuje obecnie tylko przenoszenie danych z serwera SFTP do innych magazynów danych, ale nie do przenoszenia danych z innych magazynów danych do serwera SFTP. Obsługuje zarówno serwery lokalne, jak i serwery SFTP w chmurze.

Uwaga

Działanie kopiowania nie usuwa pliku źródłowego po pomyślnym skopiowaniu go do miejsca docelowego. Jeśli musisz usunąć plik źródłowy po pomyślnym skopiowaniu, utwórz działanie niestandardowe, aby usunąć plik i użyć działania w potoku.

Obsługiwane scenariusze i typy uwierzytelniania

Tego łącznika SFTP można użyć do kopiowania danych zarówno z serwerów SFTP w chmurze, jak i lokalnych serwerów SFTP. Typy uwierzytelniania Podstawowe i SshPublicKey są obsługiwane podczas nawiązywania połączenia z serwerem SFTP.

Podczas kopiowania danych z lokalnego serwera SFTP należy zainstalować bramę Zarządzanie danymi w środowisku lokalnym/maszynie wirtualnej platformy Azure. Aby uzyskać szczegółowe informacje na temat bramy, zobacz Zarządzanie danymi Gateway. Zapoznaj się z artykułem dotyczącym przenoszenia danych między lokalizacjami lokalnymi i chmurą , aby uzyskać szczegółowe instrukcje dotyczące konfigurowania bramy i korzystania z niej.

Wprowadzenie

Potok można utworzyć za pomocą działania kopiowania, które przenosi dane ze źródła SFTP przy użyciu różnych narzędzi/interfejsów API.

Właściwości połączonej usługi

Poniższa tabela zawiera opis elementów JSON specyficznych dla połączonej usługi FTP.

Właściwość Opis Wymagane
typ Właściwość type musi być ustawiona na Sftp. Tak
host Nazwa lub adres IP serwera SFTP. Tak
port Port, na którym nasłuchuje serwer SFTP. Wartość domyślna to: 21 Nie
authenticationType Określ typ uwierzytelniania. Dozwolone wartości: Basic, SshPublicKey.

Zapoznaj się z sekcjami Korzystanie z uwierzytelniania podstawowego i Używanie uwierzytelniania klucza publicznego SSH , aby uzyskać więcej właściwości i przykładów JSON.
Tak
skipHostKeyValidation Określ, czy pominąć walidację klucza hosta. Nie. Wartość domyślna: false
hostKeyFingerprint Określ odcisk palca klucza hosta. Tak, jeśli ustawiono wartość skipHostKeyValidation false.
gatewayName Nazwa bramy Zarządzanie danymi do nawiązywania połączenia z lokalnym serwerem SFTP. Tak, jeśli kopiowanie danych z lokalnego serwera SFTP.
encryptedCredential Zaszyfrowane poświadczenia umożliwiające uzyskanie dostępu do serwera SFTP. Generowane automatycznie podczas określania uwierzytelniania podstawowego (nazwy użytkownika i hasła) lub uwierzytelniania SshPublicKey (nazwa użytkownika i ścieżka klucza prywatnego lub zawartość) w kreatorze kopiowania lub w oknie podręcznym ClickOnce. Nie. Zastosuj tylko w przypadku kopiowania danych z lokalnego serwera SFTP.

Korzystanie z uwierzytelniania podstawowego

Aby użyć uwierzytelniania podstawowego, ustaw authenticationType jako Basic, i określ następujące właściwości oprócz łącznika SFTP ogólne wprowadzone w ostatniej sekcji:

Właściwość Opis Wymagane
nazwa użytkownika Użytkownik, który ma dostęp do serwera SFTP. Tak
hasło Hasło użytkownika (nazwa użytkownika). Tak

Przykład: uwierzytelnianie podstawowe

{
    "name": "SftpLinkedService",
    "properties": {
        "type": "Sftp",
        "typeProperties": {
            "host": "mysftpserver",
            "port": 22,
            "authenticationType": "Basic",
            "username": "xxx",
            "password": "xxx",
            "skipHostKeyValidation": false,
            "hostKeyFingerPrint": "ssh-rsa 2048 xx:00:00:00:xx:00:x0:0x:0x:0x:0x:00:00:x0:x0:00",
            "gatewayName": "mygateway"
        }
    }
}

Przykład: uwierzytelnianie podstawowe z zaszyfrowanymi poświadczeniami

{
    "name": "SftpLinkedService",
    "properties": {
        "type": "Sftp",
        "typeProperties": {
            "host": "mysftpserver",
            "port": 22,
            "authenticationType": "Basic",
            "username": "xxx",
            "encryptedCredential": "xxxxxxxxxxxxxxxxx",
            "skipHostKeyValidation": false,
            "hostKeyFingerPrint": "ssh-rsa 2048 xx:00:00:00:xx:00:x0:0x:0x:0x:0x:00:00:x0:x0:00",
            "gatewayName": "mygateway"
        }
      }
}

Korzystanie z uwierzytelniania za pomocą klucza publicznego SSH

Aby użyć uwierzytelniania klucza publicznego SSH, ustaw authenticationType jako SshPublicKey, i określ następujące właściwości oprócz łącznika SFTP ogólne wprowadzone w ostatniej sekcji:

Właściwość Opis Wymagane
nazwa użytkownika Użytkownik, który ma dostęp do serwera SFTP Tak
privateKeyPath Określ ścieżkę bezwzględną do pliku klucza prywatnego, do którego brama może uzyskać dostęp. Określ wartość privateKeyPath lub privateKeyContent.

Zastosuj tylko w przypadku kopiowania danych z lokalnego serwera SFTP.
privateKeyContent Serializowany ciąg zawartości klucza prywatnego. Kreator kopiowania może odczytać plik klucza prywatnego i automatycznie wyodrębnić zawartość klucza prywatnego. Jeśli używasz dowolnego innego narzędzia/zestawu SDK, zamiast tego użyj właściwości privateKeyPath. Określ wartość privateKeyPath lub privateKeyContent.
Hasło Określ przekazywanie frazy/hasła, aby odszyfrować klucz prywatny, jeśli plik klucza jest chroniony przez frazę z przekazywaniem. Tak, jeśli plik klucza prywatnego jest chroniony przez frazę dostępu.

Uwaga

Łącznik SFTP obsługuje klucz RSA/DSA OpenSSH. Upewnij się, że zawartość pliku klucza rozpoczyna się od ciągu "-----BEGIN [RSA/DSA] KLUCZ PRYWATNY-----". Jeśli plik klucza prywatnego jest plikiem w formacie ppk, użyj narzędzia Putty, aby przekonwertować plik ppk na format OpenSSH.

Przykład: uwierzytelnianie SshPublicKey przy użyciu pliku klucza prywatnegoPath

{
    "name": "SftpLinkedServiceWithPrivateKeyPath",
    "properties": {
        "type": "Sftp",
        "typeProperties": {
            "host": "mysftpserver",
            "port": 22,
            "authenticationType": "SshPublicKey",
            "username": "xxx",
            "privateKeyPath": "D:\\privatekey_openssh",
            "passPhrase": "xxx",
            "skipHostKeyValidation": true,
            "gatewayName": "mygateway"
        }
    }
}

Przykład: uwierzytelnianie SshPublicKey przy użyciu zawartości klucza prywatnego

{
    "name": "SftpLinkedServiceWithPrivateKeyContent",
    "properties": {
        "type": "Sftp",
        "typeProperties": {
            "host": "mysftpserver.westus.cloudapp.azure.com",
            "port": 22,
            "authenticationType": "SshPublicKey",
            "username": "xxx",
            "privateKeyContent": "<base64 string of the private key content>",
            "passPhrase": "xxx",
            "skipHostKeyValidation": true
        }
    }
}

Właściwości zestawu danych

Aby uzyskać pełną listę właściwości sekcji & dostępnych do definiowania zestawów danych, zobacz artykuł Tworzenie zestawów danych . Sekcje, takie jak struktura, dostępność i zasady kodu JSON zestawu danych, są podobne dla wszystkich typów zestawów danych.

Sekcja typeProperties jest inna dla każdego typu zestawu danych. Zawiera on informacje specyficzne dla typu zestawu danych. Sekcja typeProperties zestawu danych typu FileShare zawiera następujące właściwości:

Właściwość Opis Wymagane
folderPath Ścieżka podrzędna do folderu. Użyj znaku ucieczki " \ " dla znaków specjalnych w ciągu. Zobacz Przykładowe połączone definicje usług i zestawów danych.

Tę właściwość można połączyć z partycjąBy , aby mieć ścieżki folderów na podstawie daty rozpoczęcia/zakończenia wycinka.
Tak
fileName Określ nazwę pliku w folderPath , jeśli chcesz, aby tabela odwołyła się do określonego pliku w folderze. Jeśli nie określisz żadnej wartości dla tej właściwości, tabela wskazuje wszystkie pliki w folderze.

Jeśli parametr fileName nie zostanie określony dla wyjściowego zestawu danych, nazwa wygenerowanego pliku będzie miała następujący format:

Data.<Guid>.txt (Przykład: Data.0a405f8a-93ff-4c6f-b3be-f69616f1df7a.txt
Nie
Filefilter Określ filtr, który ma być używany do wybierania podzestawu plików w folderPath, a nie wszystkich plików.

Dozwolone wartości to: * (wiele znaków) i ? (pojedynczy znak).

Przykłady 1: "fileFilter": "*.log"
Przykład 2: "fileFilter": 2014-1-?.txt"

fileFilter ma zastosowanie do wejściowego zestawu danych FileShare. Ta właściwość nie jest obsługiwana w systemie plików HDFS.
Nie
partitionedBy partitionedBy można użyć do określenia dynamicznego folderuPath, nazwy pliku dla danych szeregów czasowych. Na przykład folderPath sparametryzowany dla każdej godziny danych. Nie
format Obsługiwane są następujące typy formatów: TextFormat, JsonFormat, AvroFormat, OrcFormat, ParquetFormat. Ustaw właściwość type w formacie na jedną z tych wartości. Aby uzyskać więcej informacji, zobacz sekcje Format tekstu, Format Json, Avro Format, Orc Format i Parquet Format .

Jeśli chcesz skopiować pliki zgodnie z rzeczywistym użyciem między magazynami opartymi na plikach (kopiowaniem binarnym), pomiń sekcję formatowania zarówno w definicjach zestawu danych wejściowych, jak i wyjściowych.
Nie
kompresja Określ typ i poziom kompresji danych. Obsługiwane typy to: GZip, Deflate, BZip2 i ZipDeflate. Obsługiwane poziomy to: optymalne i najszybsze. Aby uzyskać więcej informacji, zobacz Formaty plików i kompresji w Azure Data Factory. Nie
useBinaryTransfer Określ, czy używasz trybu transferu binarnego. True dla trybu binarnego i false ASCII. Wartość domyślna: Prawda. Ta właściwość może być używana tylko wtedy, gdy skojarzony połączony typ usługi jest typu: FtpServer. Nie

Uwaga

Nazwy pliku i plikuFiltr nie można używać jednocześnie.

Używanie właściwości partionedBy

Jak wspomniano w poprzedniej sekcji, można określić dynamiczny folderPath, nazwę pliku dla danych szeregów czasowych z partycjamiBy. Możesz to zrobić za pomocą makr usługi Data Factory i zmiennej systemowej SliceStart, SliceEnd, która wskazuje okres logiczny dla danego wycinka danych.

Aby dowiedzieć się więcej na temat zestawów danych szeregów czasowych, planowania i wycinków, zobacz Artykuły Tworzenie zestawów danych, Planowanie & wykonywania i Tworzenie Pipelines.

Przykład 1:

"folderPath": "wikidatagateway/wikisampledataout/{Slice}",
"partitionedBy":
[
    { "name": "Slice", "value": { "type": "DateTime", "date": "SliceStart", "format": "yyyyMMddHH" } },
],

W tym przykładzie {Slice} jest zastępowana wartością zmiennej systemowej Usługi Data Factory SliceStart w określonym formacie (RRRRMDDDHH). Fragmentator Start odnosi się do godziny rozpoczęcia wycinka. FolderPath jest inny dla każdego wycinka. Przykład: wikidatagateway/wikisampledataout/2014100103 lub wikidatagateway/wikisampledataout/2014100104.

Przykład 2:

"folderPath": "wikidatagateway/wikisampledataout/{Year}/{Month}/{Day}",
"fileName": "{Hour}.csv",
"partitionedBy":
[
    { "name": "Year", "value": { "type": "DateTime", "date": "SliceStart", "format": "yyyy" } },
    { "name": "Month", "value": { "type": "DateTime", "date": "SliceStart", "format": "MM" } },
    { "name": "Day", "value": { "type": "DateTime", "date": "SliceStart", "format": "dd" } },
    { "name": "Hour", "value": { "type": "DateTime", "date": "SliceStart", "format": "hh" } }
],

W tym przykładzie rok, miesiąc, dzień i godzina fragmentatora Są wyodrębniane do oddzielnych zmiennych, które są używane przez właściwości folderPath i fileName.

Właściwości działania kopiowania

Aby uzyskać pełną listę właściwości sekcji & dostępnych do definiowania działań, zobacz artykuł Tworzenie Pipelines. Właściwości takie jak nazwa, opis, tabele wejściowe i wyjściowe oraz zasady są dostępne dla wszystkich typów działań.

Podczas gdy właściwości dostępne w sekcji typeProperties działania różnią się w zależności od każdego typu działania. W przypadku działanie Kopiuj właściwości typu różnią się w zależności od typów źródeł i ujściów.

W obszarze Działanie kopiowania, gdy źródło jest typu FileSystemSource, następujące właściwości są dostępne w sekcji typeProperties:

Właściwość Opis Dozwolone wartości Wymagane
Cykliczne Wskazuje, czy dane są odczytywane cyklicznie z podfolderów, czy tylko z określonego folderu. Prawda, Fałsz (wartość domyślna) Nie

Obsługiwane formaty plików i kompresji

Aby uzyskać szczegółowe informacje, zobacz formaty plików i kompresji w Azure Data Factory artykule.

Przykład JSON: kopiowanie danych z serwera SFTP do obiektu blob platformy Azure

Poniższy przykład zawiera przykładowe definicje JSON, których można użyć do utworzenia potoku przy użyciu Visual Studio lub Azure PowerShell. Pokazują one, jak skopiować dane ze źródła SFTP do Azure Blob Storage. Dane można jednak skopiować bezpośrednio z dowolnego źródła do dowolnego ujścia określonego tutaj przy użyciu działania kopiowania w Azure Data Factory.

Ważne

Ten przykład zawiera fragmenty kodu JSON. Nie zawiera instrukcji krok po kroku dotyczących tworzenia fabryki danych. Aby uzyskać szczegółowe instrukcje, zobacz przenoszenie danych między lokalizacjami lokalnymi i chmurą .

Przykład zawiera następujące jednostki fabryki danych:

Przykład kopiuje dane z serwera SFTP do obiektu blob platformy Azure co godzinę. Właściwości JSON używane w tych przykładach opisano w sekcjach opisanych poniżej przykładów.

Połączona usługa SFTP

W tym przykładzie użyto podstawowego uwierzytelniania z nazwą użytkownika i hasłem w postaci zwykłego tekstu. Możesz również użyć jednego z następujących sposobów:

  • Uwierzytelnianie podstawowe z zaszyfrowanymi poświadczeniami
  • Uwierzytelnianie za pomocą klucza publicznego SSH

Zobacz sekcję Połączona usługa FTP , aby użyć różnych typów uwierzytelniania.


{
    "name": "SftpLinkedService",
    "properties": {
        "type": "Sftp",
        "typeProperties": {
            "host": "mysftpserver",
            "port": 22,
            "authenticationType": "Basic",
            "username": "myuser",
            "password": "mypassword",
            "skipHostKeyValidation": false,
            "hostKeyFingerPrint": "ssh-rsa 2048 xx:00:00:00:xx:00:x0:0x:0x:0x:0x:00:00:x0:x0:00",
            "gatewayName": "mygateway"
        }
    }
}

Połączona usługa Azure Storage

{
  "name": "AzureStorageLinkedService",
  "properties": {
    "type": "AzureStorage",
    "typeProperties": {
      "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;AccountKey=<accountkey>"
    }
  }
}

Wejściowy zestaw danych SFTP

Ten zestaw danych odwołuje się do folderu mysharedfolder SFTP i pliku test.csv. Potok kopiuje plik do miejsca docelowego.

Ustawienie "external": "true" informuje usługę Data Factory, że zestaw danych jest zewnętrzny dla fabryki danych i nie jest generowany przez działanie w fabryce danych.

{
  "name": "SFTPFileInput",
  "properties": {
    "type": "FileShare",
    "linkedServiceName": "SftpLinkedService",
    "typeProperties": {
      "folderPath": "mysharedfolder",
      "fileName": "test.csv"
    },
    "external": true,
    "availability": {
      "frequency": "Hour",
      "interval": 1
    }
  }
}

Wyjściowy zestaw danych obiektów blob platformy Azure

Dane są zapisywane w nowym obiekcie blob co godzinę (częstotliwość: godzina, interwał: 1). Ścieżka folderu obiektu blob jest obliczana dynamicznie na podstawie czasu rozpoczęcia przetwarzanego wycinka. Ścieżka folderu używa części roku, miesiąca, dnia i godzin w czasie rozpoczęcia.

{
    "name": "AzureBlobOutput",
    "properties": {
        "type": "AzureBlob",
        "linkedServiceName": "AzureStorageLinkedService",
        "typeProperties": {
            "folderPath": "mycontainer/sftp/yearno={Year}/monthno={Month}/dayno={Day}/hourno={Hour}",
            "format": {
                "type": "TextFormat",
                "rowDelimiter": "\n",
                "columnDelimiter": "\t"
            },
            "partitionedBy": [
                {
                    "name": "Year",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "yyyy"
                    }
                },
                {
                    "name": "Month",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "MM"
                    }
                },
                {
                    "name": "Day",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "dd"
                    }
                },
                {
                    "name": "Hour",
                    "value": {
                        "type": "DateTime",
                        "date": "SliceStart",
                        "format": "HH"
                    }
                }
            ]
        },
        "availability": {
            "frequency": "Hour",
            "interval": 1
        }
    }
}

Potok z działanie Kopiuj

Potok zawiera działanie kopiowania skonfigurowane do korzystania z wejściowych i wyjściowych zestawów danych i jest zaplanowane do uruchamiania co godzinę. W definicji JSON potoku typ źródła jest ustawiony na FileSystemSource , a typ ujścia jest ustawiony na BlobSink.

{
    "name": "pipeline",
    "properties": {
        "activities": [{
            "name": "SFTPToBlobCopy",
            "inputs": [{
                "name": "SFTPFileInput"
            }],
            "outputs": [{
                "name": "AzureBlobOutput"
            }],
            "type": "Copy",
            "typeProperties": {
                "source": {
                    "type": "FileSystemSource"
                },
                "sink": {
                    "type": "BlobSink"
                }
            },
            "scheduler": {
                "frequency": "Hour",
                "interval": 1
            },
            "policy": {
                "concurrency": 1,
                "executionPriorityOrder": "NewestFirst",
                "retry": 1,
                "timeout": "00:05:00"
            }
        }],
        "start": "2017-02-20T18:00:00Z",
        "end": "2017-02-20T19:00:00Z"
    }
}

Wydajność i dostrajanie

Zobacz Przewodnik dostosowywania wydajności działania & kopiowania, aby dowiedzieć się więcej o kluczowych czynnikach wpływających na wydajność przenoszenia danych (działanie kopiowania) w Azure Data Factory i różnych sposobach ich optymalizacji.

Następne kroki

Zobacz następujące artykuły: