Przenoszenie danych do i z SQL Server 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 SQL Server connector w wersji 2.

W tym artykule wyjaśniono, jak za pomocą działania kopiowania w Azure Data Factory przenieść dane do/z bazy danych SQL Server. Jest on oparty na artykule Działania przenoszenia danych , który przedstawia ogólny przegląd przenoszenia danych za pomocą działania kopiowania.

Uwaga

Aby korzystać z platformy Azure, zalecany jest moduł Azure Az programu PowerShell. Zobacz Instalowanie Azure PowerShell, aby rozpocząć pracę. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.

Obsługiwane scenariusze

Dane z bazy danych SQL Server można skopiować do następujących magazynów danych:

Kategoria Magazyn danych
Azure Azure Blob Storage
Usługa Azure Data Lake Storage 1. generacji
Azure Cosmos DB (interfejs API SQL)
Azure SQL Database
Azure Synapse Analytics
indeks Azure Cognitive Search
Azure Table storage
Bazy danych SQL Server
Oracle
Plik System plików

Dane z następujących magazynów danych można skopiować do bazy danych SQL Server:

Kategoria Magazyn danych
Azure Azure Blob Storage
Azure Cosmos DB (interfejs API SQL)
Usługa Azure Data Lake Storage 1. generacji
Azure SQL Database
Azure Synapse Analytics
Azure Table storage
Bazy danych Amazon Redshift
DB2
MySQL
Oracle
PostgreSQL
SAP Business Warehouse
SAP HANA
SQL Server
Sybase
Teradata
NoSQL Cassandra
MongoDB
Plik Amazon S3
System plików
FTP
HDFS
SFTP
Inne Ogólne HTTP
Ogólne OData
Ogólne ODBC
Salesforce
Tabela internetowa (tabela z kodu HTML)

Obsługiwane wersje programu SQL Server

Ten łącznik SQL Server obsługuje kopiowanie danych z/do następujących wersji wystąpienia hostowanego lokalnie lub w usłudze Azure IaaS przy użyciu uwierzytelniania SQL i uwierzytelniania systemu Windows: SQL Server 2016, SQL Server 2014, SQL Server 2012, SQL Server 2008 R2, SQL Server 2008, SQL Server 2005

Włączanie łączności

Pojęcia i kroki wymagane do nawiązania połączenia z maszynami wirtualnymi SQL Server hostowanymi lokalnie lub w usłudze Azure IaaS (infrastruktura jako usługa) są takie same. W obu przypadkach należy użyć bramy Zarządzanie danymi na potrzeby łączności.

Zapoznaj się z artykułem dotyczącym przenoszenia danych między lokalizacjami lokalnymi i chmurą, aby dowiedzieć się więcej na temat usługi Zarządzanie danymi Gateway i instrukcji krok po kroku dotyczących konfigurowania bramy. Konfigurowanie wystąpienia bramy jest warunkiem wstępnym nawiązywania połączenia z SQL Server.

Bramę można zainstalować na tej samej maszynie lokalnej lub w wystąpieniu maszyny wirtualnej w chmurze co SQL Server, aby uzyskać lepszą wydajność, zalecamy zainstalowanie ich na oddzielnych maszynach. Posiadanie bramy i SQL Server na oddzielnych maszynach zmniejsza rywalizację o zasoby.

Wprowadzenie

Potok można utworzyć za pomocą działania kopiowania, które przenosi dane do/z bazy danych SQL Server przy użyciu różnych narzędzi/interfejsów API.

Najprostszym sposobem utworzenia potoku jest użycie Kreatora kopiowania. Zobacz Samouczek: tworzenie potoku przy użyciu Kreatora kopiowania , aby zapoznać się z szybkim przewodnikiem dotyczącym tworzenia potoku przy użyciu kreatora kopiowania danych.

Do utworzenia potoku można również użyć następujących narzędzi: Program Visual Studio, Azure PowerShell, szablon usługi Azure Resource Manager, interfejs API platformy .NET i interfejs API REST. Zobacz samouczek działanie Kopiuj, aby uzyskać instrukcje krok po kroku dotyczące tworzenia potoku za pomocą działania kopiowania.

Niezależnie od tego, czy używasz narzędzi, czy interfejsów API, należy wykonać następujące kroki, aby utworzyć potok, który przenosi dane z magazynu danych źródłowych do magazynu danych ujścia:

  1. Tworzenie fabryki danych. Fabryka danych może zawierać co najmniej jeden potok.
  2. Utwórz połączone usługi , aby połączyć wejściowe i wyjściowe magazyny danych z fabryką danych. Jeśli na przykład kopiujesz dane z bazy danych SQL Server do usługi Azure Blob Storage, utworzysz dwie połączone usługi, aby połączyć bazę danych SQL Server i konto usługi Azure Storage z fabryką danych. Aby uzyskać informacje o połączonych właściwościach usługi specyficznych dla bazy danych SQL Server, zobacz sekcję właściwości połączonej usługi.
  3. Utwórz zestawy danych do reprezentowania danych wejściowych i wyjściowych dla operacji kopiowania. W przykładzie wymienionym w ostatnim kroku utworzysz zestaw danych w celu określenia tabeli SQL w bazie danych SQL Server zawierającej dane wejściowe. Następnie utworzysz inny zestaw danych w celu określenia kontenera obiektów blob i folderu, w którym przechowywane są dane skopiowane z bazy danych SQL Server. Aby uzyskać informacje o właściwościach zestawu danych specyficznych dla SQL Server bazy danych, zobacz sekcję właściwości zestawu danych.
  4. Utwórz potok z działaniem kopiowania, które pobiera zestaw danych jako dane wejściowe i zestaw danych jako dane wyjściowe. W podanym wcześniej przykładzie jako źródło i obiekt BlobSink jako ujście działania kopiowania należy użyć usługi SqlSource. Podobnie, jeśli kopiujesz z Azure Blob Storage do usługi SQL Server Database, w działaniu kopiowania użyjesz usług BlobSource i SqlSink. Aby uzyskać informacje o właściwościach działania kopiowania specyficznych dla SQL Server Database, zobacz sekcję właściwości działania kopiowania. Aby uzyskać szczegółowe informacje na temat używania magazynu danych jako źródła lub ujścia, kliknij link w poprzedniej sekcji dla magazynu danych.

Podczas korzystania z kreatora definicje JSON dla tych jednostek usługi Data Factory (połączone usługi, zestawy danych i potok) są tworzone automatycznie. W przypadku korzystania z narzędzi/interfejsów API (z wyjątkiem interfejsu API platformy .NET) te jednostki usługi Data Factory są definiowane przy użyciu formatu JSON. Przykłady z definicjami JSON dla jednostek usługi Data Factory, które są używane do kopiowania danych do/z bazy danych SQL Server, zobacz sekcję przykładów JSON w tym artykule.

W poniższych sekcjach przedstawiono szczegółowe informacje o właściwościach JSON używanych do definiowania jednostek usługi Data Factory specyficznych dla SQL Server:

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

Utworzysz połączoną usługę typu OnPremisesSqlServer, aby połączyć bazę danych SQL Server z fabryką danych. Poniższa tabela zawiera opis elementów JSON specyficznych dla SQL Server połączonej usługi.

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

Właściwość Opis Wymagane
typ Właściwość typu powinna być ustawiona na: OnPremisesSqlServer. Tak
Parametry połączenia Określ informacje o połączeniu wymagane do nawiązania połączenia z bazą danych SQL Server przy użyciu uwierzytelniania SQL lub uwierzytelniania systemu Windows. Tak
gatewayName Nazwa bramy, która powinna być używana przez usługę Data Factory w celu nawiązania połączenia z bazą danych SQL Server. Tak
nazwa użytkownika Określ nazwę użytkownika, jeśli używasz uwierzytelniania systemu Windows. Przykład: nazwa_domeny\nazwa_użytkownika. Nie
hasło Określ hasło dla konta użytkownika określonego dla nazwy użytkownika. Nie

Poświadczenia można szyfrować przy użyciu polecenia cmdlet New-AzDataFactoryEncryptValue i użyć ich w parametrach połączenia, jak pokazano w poniższym przykładzie (właściwość EncryptedCredential ):

"connectionString": "Data Source=<servername>;Initial Catalog=<databasename>;Integrated Security=True;EncryptedCredential=<encrypted credential>",

Przykłady

Kod JSON do korzystania z uwierzytelniania SQL

{
    "name": "MyOnPremisesSQLDB",
    "properties":
    {
        "type": "OnPremisesSqlServer",
        "typeProperties": {
            "connectionString": "Data Source=<servername>;Initial Catalog=MarketingCampaigns;Integrated Security=False;User ID=<username>;Password=<password>;",
            "gatewayName": "<gateway name>"
        }
    }
}

Kod JSON do korzystania z uwierzytelniania systemu Windows

Zarządzanie danymi Gateway personifikuje określone konto użytkownika w celu nawiązania połączenia z bazą danych SQL Server.

{
    "Name": " MyOnPremisesSQLDB",
    "Properties":
    {
        "type": "OnPremisesSqlServer",
        "typeProperties": {
            "ConnectionString": "Data Source=<servername>;Initial Catalog=MarketingCampaigns;Integrated Security=True;",
            "username": "<domain\\username>",
            "password": "<password>",
            "gatewayName": "<gateway name>"
        }
    }
}

Właściwości zestawu danych

W przykładach użyto zestawu danych typu SqlServerTable do reprezentowania tabeli w bazie danych SQL Server.

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 (SQL Server, obiektów blob platformy Azure, tabel platformy Azure itp.).

Sekcja typeProperties jest inna dla każdego typu zestawu danych i zawiera informacje o lokalizacji danych w magazynie danych. Sekcja typeProperties dla zestawu danych typu SqlServerTable ma następujące właściwości:

Właściwość Opis Wymagane
tableName Nazwa tabeli lub widoku w wystąpieniu bazy danych SQL Server, do którego odwołuje się połączona usługa. Tak

Właściwości działania kopiowania

Jeśli przenosisz dane z bazy danych SQL Server, ustawisz typ źródłowy w działaniu kopiowania na sqlSource. Podobnie, jeśli przenosisz dane do bazy danych SQL Server, ustawisz typ ujścia w działaniu kopiowania na SqlSink. Ta sekcja zawiera listę właściwości obsługiwanych przez usługi SqlSource i SqlSink.

Aby uzyskać pełną listę właściwości sekcji & dostępnych do definiowania działań, zobacz artykuł Tworzenie potoków . 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ń.

Uwaga

Działanie kopiowania przyjmuje tylko jedno dane wejściowe i generuje tylko jedno dane wyjściowe.

Natomiast 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 różnią się w zależności od typów źródeł i ujściów.

SqlSource

Gdy źródło w działaniu kopiowania jest typu SqlSource, następujące właściwości są dostępne w sekcji typeProperties :

Właściwość Opis Dozwolone wartości Wymagane
sqlReaderQuery Użyj zapytania niestandardowego do odczytywania danych. Ciąg zapytania SQL. Na przykład: wybierz pozycję * z tabeli MyTable. Może odwoływać się do wielu tabel z bazy danych, do których odwołuje się wejściowy zestaw danych. Jeśli nie zostanie określona, wykonywana instrukcja SQL: wybierz pozycję MyTable. Nie
sqlReaderStoredProcedureName Nazwa procedury składowanej, która odczytuje dane z tabeli źródłowej. Nazwa procedury składowanej. Ostatnia instrukcja SQL musi być instrukcją SELECT w procedurze składowanej. Nie
storedProcedureParameters Parametry procedury składowanej. Pary nazw/wartości. Nazwy i wielkość liter parametrów muszą być zgodne z nazwami i wielkością parametrów procedury składowanej. Nie

Jeśli parametr sqlReaderQuery jest określony dla usługi SqlSource, działanie kopiowania uruchamia to zapytanie względem źródła bazy danych SQL Server w celu pobrania danych.

Alternatywnie można określić procedurę składowaną, określając sqlReaderStoredProcedureName i storedProcedureParameters (jeśli procedura składowana przyjmuje parametry).

Jeśli nie określisz wartości sqlReaderQuery lub sqlReaderStoredProcedureName, kolumny zdefiniowane w sekcji struktury są używane do tworzenia zapytania wyboru do uruchamiania względem bazy danych SQL Server. Jeśli definicja zestawu danych nie ma struktury, wszystkie kolumny są wybierane z tabeli.

Uwaga

Jeśli używasz sqlReaderStoredProcedureName, nadal musisz określić wartość właściwości tableName w formacie JSON zestawu danych. Nie ma jednak żadnych walidacji wykonywanych w tej tabeli.

SqlSink

Usługa SqlSink obsługuje następujące właściwości:

Właściwość Opis Dozwolone wartości Wymagane
writeBatchTimeout Czas oczekiwania na ukończenie operacji wstawiania wsadowego przed przekroczeniem limitu czasu. zakres czasu

Przykład: "00:30:00" (30 minut).
Nie
writeBatchSize Wstawia dane do tabeli SQL, gdy rozmiar buforu osiągnie wartość writeBatchSize. Liczba całkowita (liczba wierszy) Nie (wartość domyślna: 10000)
sqlWriterCleanupScript Określ zapytanie dotyczące działania kopiowania w celu wykonania, aby dane określonego wycinka zostały wyczyszczone. Aby uzyskać więcej informacji, zobacz sekcję powtarzalnego kopiowania . Instrukcja zapytania. Nie
sliceIdentifierColumnName Określ nazwę kolumny dla działania kopiowania do wypełnienia za pomocą automatycznie wygenerowanego identyfikatora wycinka, który służy do czyszczenia danych określonego wycinka podczas ponownego uruchamiania. Aby uzyskać więcej informacji, zobacz powtarzalną sekcję kopiowania . Nazwa kolumny kolumny z typem danych binary(32). Nie
sqlWriterStoredProcedureName Nazwa procedury składowanej definiującej sposób stosowania danych źródłowych do tabeli docelowej, np. do wykonywania operacji upsert lub przekształcania przy użyciu własnej logiki biznesowej.

Należy pamiętać, że ta procedura składowana zostanie wywołana na partię. Jeśli chcesz wykonać operację, która jest uruchamiana tylko raz i nie ma nic wspólnego z danymi źródłowymi, np. usuwanie/obcinanie, użyj sqlWriterCleanupScript właściwości .
Nazwa procedury składowanej. Nie
storedProcedureParameters Parametry procedury składowanej. Pary nazwa/wartość. Nazwy i wielkość liter parametrów muszą być zgodne z nazwami i wielkością liter parametrów procedury składowanej. Nie
sqlWriterTableType Określ nazwę typu tabeli, która ma być używana w procedurze składowanej. działanie Kopiuj udostępnia dane przenoszone w tabeli tymczasowej przy użyciu tego typu tabeli. Kod procedury składowanej może następnie scalić skopiowane dane z istniejącymi danymi. Nazwa typu tabeli. Nie

Przykłady kodu JSON do kopiowania danych z i do SQL Server

W poniższych przykładach przedstawiono przykładowe definicje JSON, których można użyć do utworzenia potoku przy użyciu programu Visual Studio lub Azure PowerShell. W poniższych przykładach pokazano, jak kopiować dane do i z SQL Server i Azure Blob Storage. Jednak dane można skopiować bezpośrednio z dowolnego źródła do dowolnego ujścia określonego w tym miejscu przy użyciu działania kopiowania w Azure Data Factory.

Przykład: kopiowanie danych z SQL Server do obiektu blob platformy Azure

W poniższym przykładzie pokazano:

  1. Połączona usługa typu OnPremisesSqlServer.
  2. Połączona usługa typu AzureStorage.
  3. Wejściowy zestaw danych typu SqlServerTable.
  4. Wyjściowy zestaw danych typu AzureBlob.
  5. Potok z działanie Kopiuj, który korzysta z usług SqlSource i BlobSink.

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

Pierwszym krokiem jest skonfigurowanie bramy zarządzania danymi. Instrukcje znajdują się w artykule dotyczącym przenoszenia danych między lokalizacjami lokalnymi i chmurą .

połączona usługa SQL Server

{
  "Name": "SqlServerLinkedService",
  "properties": {
    "type": "OnPremisesSqlServer",
    "typeProperties": {
      "connectionString": "Data Source=<servername>;Initial Catalog=<databasename>;Integrated Security=False;User ID=<username>;Password=<password>;",
      "gatewayName": "<gatewayname>"
    }
  }
}

Połączona usługa Azure Blob Storage

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

SQL Server wejściowy zestaw danych

W przykładzie założono, że utworzono tabelę "MyTable" w SQL Server i zawiera ona kolumnę o nazwie "timestampcolumn" dla danych szeregów czasowych. Zapytania dotyczące wielu tabel w tej samej bazie danych można wykonywać przy użyciu jednego zestawu danych, ale dla właściwości typeProperty zestawu danych musi być używana pojedyncza tabela.

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": "SqlServerInput",
  "properties": {
    "type": "SqlServerTable",
    "linkedServiceName": "SqlServerLinkedService",
    "typeProperties": {
      "tableName": "MyTable"
    },
    "external": true,
    "availability": {
      "frequency": "Hour",
      "interval": 1
    },
    "policy": {
      "externalData": {
        "retryInterval": "00:01:00",
        "retryTimeout": "00:10:00",
        "maximumRetry": 3
      }
    }
  }
}

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": "StorageLinkedService",
    "typeProperties": {
      "folderPath": "mycontainer/myfolder/yearno={Year}/monthno={Month}/dayno={Day}/hourno={Hour}",
      "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"
          }
        }
      ],
      "format": {
        "type": "TextFormat",
        "columnDelimiter": "\t",
        "rowDelimiter": "\n"
      }
    },
    "availability": {
      "frequency": "Hour",
      "interval": 1
    }
  }
}

Potok z działanie Kopiuj

Potok zawiera działanie kopiowania skonfigurowane do korzystania z tych 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 SqlSource , a typ ujścia jest ustawiony na BlobSink. Zapytanie SQL określone dla właściwości SqlReaderQuery wybiera dane w ciągu ostatniej godziny do skopiowania.

{
  "name":"SamplePipeline",
  "properties":{
    "start":"2016-06-01T18:00:00",
    "end":"2016-06-01T19:00:00",
    "description":"pipeline for copy activity",
    "activities":[
      {
        "name": "SqlServertoBlob",
        "description": "copy activity",
        "type": "Copy",
        "inputs": [
          {
            "name": " SqlServerInput"
          }
        ],
        "outputs": [
          {
            "name": "AzureBlobOutput"
          }
        ],
        "typeProperties": {
          "source": {
            "type": "SqlSource",
            "SqlReaderQuery": "$$Text.Format('select * from MyTable where timestampcolumn >= \\'{0:yyyy-MM-dd HH:mm}\\' AND timestampcolumn < \\'{1:yyyy-MM-dd HH:mm}\\'', WindowStart, WindowEnd)"
          },
          "sink": {
            "type": "BlobSink"
          }
        },
        "scheduler": {
          "frequency": "Hour",
          "interval": 1
        },
        "policy": {
          "concurrency": 1,
          "executionPriorityOrder": "OldestFirst",
          "retry": 0,
          "timeout": "01:00:00"
        }
      }
    ]
  }
}

W tym przykładzie parametr sqlReaderQuery jest określony dla elementu SqlSource. Działanie kopiowania uruchamia to zapytanie względem źródła bazy danych SQL Server w celu pobrania danych. Alternatywnie można określić procedurę składowaną, określając parametr sqlReaderStoredProcedureName i storedProcedureParameters (jeśli procedura składowana przyjmuje parametry). Zapytanie sqlReaderQuery może odwoływać się do wielu tabel w bazie danych, do których odwołuje się wejściowy zestaw danych. Nie jest ona ograniczona tylko do tabeli ustawionej jako typ tableName zestawu danychWłaściwość.

Jeśli nie określisz parametru sqlReaderQuery lub sqlReaderStoredProcedureName, kolumny zdefiniowane w sekcji struktury są używane do tworzenia zapytania wyboru do uruchamiania względem bazy danych SQL Server. Jeśli definicja zestawu danych nie ma struktury, wszystkie kolumny są wybierane z tabeli.

Aby uzyskać listę właściwości obsługiwanych przez usługę SqlSource i BlobSink, zobacz sekcję Źródło SQL i obiekt BlobSink .

Przykład: kopiowanie danych z obiektu blob platformy Azure do SQL Server

W poniższym przykładzie pokazano:

  1. Połączona usługa typu OnPremisesSqlServer.
  2. Połączona usługa typu AzureStorage.
  3. Wejściowy zestaw danych typu AzureBlob.
  4. Wyjściowy zestaw danych typu SqlServerTable.
  5. Potok z działanie Kopiuj, który korzysta z usług BlobSource i SqlSink.

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

połączona usługa SQL Server

{
  "Name": "SqlServerLinkedService",
  "properties": {
    "type": "OnPremisesSqlServer",
    "typeProperties": {
      "connectionString": "Data Source=<servername>;Initial Catalog=<databasename>;Integrated Security=False;User ID=<username>;Password=<password>;",
      "gatewayName": "<gatewayname>"
    }
  }
}

Połączona usługa Azure Blob Storage

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

Wejściowy zestaw danych obiektów blob platformy Azure

Dane są pobierane z nowego obiektu blob co godzinę (częstotliwość: godzina, interwał: 1). Ścieżka folderu i nazwa pliku obiektu blob są dynamicznie oceniane na podstawie czasu rozpoczęcia przetwarzanego wycinka. Ścieżka folderu używa roku, miesiąca i dnia części czasu rozpoczęcia, a nazwa pliku używa części godziny w czasie rozpoczęcia. "external": ustawienie "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": "AzureBlobInput",
  "properties": {
    "type": "AzureBlob",
    "linkedServiceName": "StorageLinkedService",
    "typeProperties": {
      "folderPath": "mycontainer/myfolder/yearno={Year}/monthno={Month}/dayno={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"
          }
        }
      ],
      "format": {
        "type": "TextFormat",
        "columnDelimiter": ",",
        "rowDelimiter": "\n"
      }
    },
    "external": true,
    "availability": {
      "frequency": "Hour",
      "interval": 1
    },
    "policy": {
      "externalData": {
        "retryInterval": "00:01:00",
        "retryTimeout": "00:10:00",
        "maximumRetry": 3
      }
    }
  }
}

SQL Server wyjściowy zestaw danych

Przykład kopiuje dane do tabeli o nazwie "MyTable" w SQL Server. Utwórz tabelę w SQL Server z taką samą liczbą kolumn, jak oczekiwano, że plik CSV obiektu blob będzie zawierać. Nowe wiersze są dodawane do tabeli co godzinę.

{
  "name": "SqlServerOutput",
  "properties": {
    "type": "SqlServerTable",
    "linkedServiceName": "SqlServerLinkedService",
    "typeProperties": {
      "tableName": "MyOutputTable"
    },
    "availability": {
      "frequency": "Hour",
      "interval": 1
    }
  }
}

Potok z działanie Kopiuj

Potok zawiera działanie kopiowania skonfigurowane do korzystania z tych 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 BlobSource , a typ ujścia jest ustawiony na SqlSink.

{
  "name":"SamplePipeline",
  "properties":{
    "start":"2014-06-01T18:00:00",
    "end":"2014-06-01T19:00:00",
    "description":"pipeline with copy activity",
    "activities":[
      {
        "name": "AzureBlobtoSQL",
        "description": "Copy Activity",
        "type": "Copy",
        "inputs": [
          {
            "name": "AzureBlobInput"
          }
        ],
        "outputs": [
          {
            "name": " SqlServerOutput "
          }
        ],
        "typeProperties": {
          "source": {
            "type": "BlobSource",
            "blobColumnSeparators": ","
          },
          "sink": {
            "type": "SqlSink"
          }
        },
        "scheduler": {
          "frequency": "Hour",
          "interval": 1
        },
        "policy": {
          "concurrency": 1,
          "executionPriorityOrder": "OldestFirst",
          "retry": 0,
          "timeout": "01:00:00"
        }
      }
    ]
  }
}

Rozwiązywanie problemów z połączeniem

  1. Skonfiguruj SQL Server do akceptowania połączeń zdalnych. Uruchom SQL Server Management Studio, kliknij prawym przyciskiem myszy serwer, a następnie kliknij polecenie Właściwości. Wybierz pozycję Połączenia z listy i zaznacz pole wyboru Zezwalaj na połączenia zdalne z serwerem.

    Włącz połączenia zdalne

    Aby uzyskać szczegółowe instrukcje, zobacz Konfigurowanie opcji konfiguracji serwera dostępu zdalnego .

  2. Uruchom SQL Server Configuration Manager. Rozwiń węzeł SQL Server Konfiguracja sieci dla żądanego wystąpienia, a następnie wybierz pozycję Protokoły dla serwera MSSQLSERVER. Protokoły powinny być widoczne w okienku po prawej stronie. Włącz protokół TCP/IP, klikając prawym przyciskiem myszy pozycję TCP/IP i klikając pozycję Włącz.

    Włączanie protokołu TCP/IP

    Aby uzyskać szczegółowe informacje i alternatywne sposoby włączania protokołu TCP/IP, zobacz Włączanie lub wyłączanie protokołu sieciowego serwera .

  3. W tym samym oknie kliknij dwukrotnie pozycję TCP/IP , aby uruchomić okno Właściwości protokołu TCP/IP .

  4. Przejdź do karty Adresy IP . Przewiń w dół, aby wyświetlić sekcję IPAll . Zanotuj port TCP (wartość domyślna to 1433).

  5. Utwórz regułę zapory systemu Windows na maszynie, aby zezwolić na ruch przychodzący przez ten port.

  6. Sprawdź połączenie: aby nawiązać połączenie z SQL Server przy użyciu w pełni kwalifikowanej nazwy, użyj SQL Server Management Studio z innej maszyny. Na przykład: "<maszyna>.< domain.corp>.< company.com,1433>"."

    Ważne

    Aby uzyskać szczegółowe informacje, zobacz Przenoszenie danych między źródłami lokalnymi a chmurą za pomocą usługi Zarządzanie danymi Gateway.

    Zobacz Rozwiązywanie problemów z bramą , aby uzyskać porady dotyczące rozwiązywania problemów związanych z połączeniem/bramą.

Kolumny tożsamości w docelowej bazie danych

Ta sekcja zawiera przykład, który kopiuje dane z tabeli źródłowej bez kolumny tożsamości do tabeli docelowej z kolumną tożsamości.

Tabela źródłowa:

create table dbo.SourceTbl
(
    name varchar(100),
    age int
)

Tabela docelowa:

create table dbo.TargetTbl
(
    identifier int identity(1,1),
    name varchar(100),
    age int
)

Zwróć uwagę, że tabela docelowa ma kolumnę tożsamości.

Definicja JSON zestawu danych źródłowych

{
    "name": "SampleSource",
    "properties": {
        "published": false,
        "type": " SqlServerTable",
        "linkedServiceName": "TestIdentitySQL",
        "typeProperties": {
            "tableName": "SourceTbl"
        },
        "availability": {
            "frequency": "Hour",
            "interval": 1
        },
        "external": true,
        "policy": {}
    }
}

Definicja docelowego zestawu danych JSON

{
    "name": "SampleTarget",
    "properties": {
        "structure": [
            { "name": "name" },
            { "name": "age" }
        ],
        "published": false,
        "type": "AzureSqlTable",
        "linkedServiceName": "TestIdentitySQLSource",
        "typeProperties": {
            "tableName": "TargetTbl"
        },
        "availability": {
            "frequency": "Hour",
            "interval": 1
        },
        "external": false,
        "policy": {}
    }
}

Zwróć uwagę, że ponieważ tabela źródłowa i docelowa mają inny schemat (element docelowy ma dodatkową kolumnę z tożsamością). W tym scenariuszu należy określić właściwość struktury w docelowej definicji zestawu danych, która nie zawiera kolumny tożsamości.

Wywoływanie procedury składowanej z ujścia SQL

Zobacz Wywoływanie procedury składowanej dla ujścia SQL w artykule dotyczącym działania kopiowania, aby zapoznać się z przykładem wywoływania procedury składowanej z ujścia SQL w działaniu kopiowania potoku.

Mapowanie typów dla programu SQL Server

Jak wspomniano w artykule dotyczącym działań przenoszenia danych, działanie Kopiuj wykonuje automatyczne konwersje typów z typów źródłowych na typy ujścia przy użyciu następującego podejścia 2-krokowego:

  1. Konwertowanie z natywnych typów źródłowych na typ platformy .NET
  2. Konwertowanie z typu platformy .NET na natywny typ ujścia

Podczas przenoszenia danych z & serwera SQL następujące mapowania są używane z typu SQL do typu platformy .NET i odwrotnie.

Mapowanie jest takie samo jak mapowanie typu danych SQL Server dla ADO.NET.

typ aparatu bazy danych SQL Server Typ programu .NET Framework
bigint Int64
binarny Bajt[]
bit Wartość logiczna
char Ciąg, Znak[]
data DateTime
Datetime (data/godzina) DateTime
datetime2 DateTime
Datetimeoffset Datetimeoffset
Liczba dziesiętna Liczba dziesiętna
ATRYBUT FILESTREAM (varbinary(max)) Bajt[]
Float Double
image (obraz) Bajt[]
int Int32
pieniędzy Liczba dziesiętna
nchar Ciąg, Znak[]
Ntext Ciąg, Znak[]
numeryczne Liczba dziesiętna
nvarchar Ciąg, Znak[]
liczba rzeczywista Pojedynczy
Rowversion Bajt[]
smalldatetime DateTime
smallint Int16
smallmoney Liczba dziesiętna
Sql_variant Obiekt *
tekst Ciąg, Znak[]
time przedział_czasu
sygnatura czasowa Bajt[]
tinyint Byte
uniqueidentifier Guid (identyfikator GUID)
varbinary Bajt[]
varchar Ciąg, Znak[]
xml Xml

Mapowanie źródła na kolumny ujścia

Aby mapować kolumny ze źródłowego zestawu danych na kolumny z zestawu danych ujścia, zobacz Mapowanie kolumn zestawu danych w Azure Data Factory.

Powtarzalna kopia

Podczas kopiowania danych do bazy danych SQL Server działanie kopiowania domyślnie dołącza dane do tabeli ujścia. Aby zamiast tego wykonać operację UPSERT, zobacz Artykuł Powtarzalny zapis w usłudze SqlSink .

Podczas kopiowania danych z relacyjnych magazynów danych należy pamiętać o powtarzalności, aby uniknąć niezamierzonych wyników. W Azure Data Factory możesz ponownie uruchomić wycinek ręcznie. Można również skonfigurować zasady ponawiania dla zestawu danych, aby wycinek był ponownie uruchamiany po wystąpieniu awarii. Gdy wycinek zostanie ponownie uruchomiony w dowolny sposób, musisz upewnić się, że te same dane są odczytywane bez względu na liczbę uruchomień wycinka. Zobacz Powtarzalne odczytywanie ze źródeł relacyjnych.

Wydajność i dostrajanie

Zobacz Podręcznik dostrajania 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.