Kopiowanie danych do i z Azure SQL Database 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 Azure SQL Database connector in V2 (Łącznik Azure SQL Database w wersji 2).

W tym artykule wyjaśniono, jak używać działania kopiowania w Azure Data Factory do przenoszenia danych do i z Azure SQL Database. Jest on oparty na artykule Działania przenoszenia danych , który przedstawia ogólny przegląd przenoszenia danych za pomocą działania kopiowania.

Obsługiwane scenariusze

Dane z Azure SQL Database 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

Możesz skopiować dane z następujących magazynów danych do Azure SQL Database:

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ługiwany typ uwierzytelniania

łącznik Azure SQL Database obsługuje uwierzytelnianie podstawowe.

Wprowadzenie

Potok można utworzyć za pomocą działania kopiowania, które przenosi dane do/z Azure SQL Database 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: 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 usługi Azure Blob Storage do Azure SQL Database, utworzysz dwie połączone usługi, aby połączyć konto usługi Azure Storage i Azure SQL Database z fabryką danych. Aby uzyskać informacje o połączonych właściwościach usługi specyficznych dla Azure SQL Database, 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 kontenera obiektów blob i folderu zawierającego dane wejściowe. Następnie utworzysz inny zestaw danych, aby określić tabelę SQL w Azure SQL Database, która przechowuje dane skopiowane z magazynu obiektów blob. Aby uzyskać informacje o właściwościach zestawu danych specyficznych dla usługi Azure Data Lake Store, 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 użyjesz usługi BlobSource jako źródła i narzędzia SqlSink jako ujścia dla działania kopiowania. Podobnie, jeśli kopiujesz z Azure SQL Database do Azure Blob Storage, w działaniu kopiowania użyjesz usług SqlSource i BlobSink. Aby uzyskać informacje o właściwościach działania kopiowania specyficznych dla Azure SQL 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 Azure SQL Database, zobacz sekcję przykładów JSON w tym artykule.

Poniższe sekcje zawierają szczegółowe informacje o właściwościach JSON używanych do definiowania jednostek usługi Data Factory specyficznych dla Azure SQL Database:

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

Połączona usługa Azure SQL łączy Azure SQL Database z fabryką danych. Poniższa tabela zawiera opis elementów JSON specyficznych dla usługi połączonej Azure SQL.

Właściwość Opis Wymagane
typ Właściwość type musi być ustawiona na: AzureSqlDatabase Tak
Parametry połączenia Określ informacje potrzebne do nawiązania połączenia z wystąpieniem Azure SQL Database dla właściwości connectionString. Obsługiwane jest tylko uwierzytelnianie podstawowe. Tak

Ważne

Skonfiguruj Azure SQL Database Zapora serwera bazy danych, aby umożliwić usługom platformy Azure dostęp do serwera. Ponadto jeśli kopiujesz dane do Azure SQL Database spoza platformy Azure, w tym z lokalnych źródeł danych z bramą fabryki danych, skonfiguruj odpowiedni zakres adresów IP dla maszyny wysyłającej dane do Azure SQL Database.

Właściwości zestawu danych

Aby określić zestaw danych reprezentujący dane wejściowe lub wyjściowe w Azure SQL Database, należy ustawić właściwość typu zestawu danych na: AzureSqlTable. Ustaw właściwość linkedServiceName zestawu danych na nazwę połączonej usługi Azure SQL.

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 (Azure SQL, 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 AzureSqlTable ma następujące właściwości:

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

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

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.

Jeśli przenosisz dane z Azure SQL Database, należy ustawić typ źródła w działaniu kopiowania na sqlSource. Podobnie, jeśli przenosisz dane do Azure SQL Database, 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.

SqlSource

W działaniu kopiowania, gdy źródło 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. SQL ciągu zapytania. Przykład: select * from 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 Azure SQL Database 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 zestawu danych JSON są używane do kompilowania zapytania (select column1, column2 from mytable) do uruchamiania względem Azure SQL Database. 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.

Przykład usługi SqlSource

"source": {
    "type": "SqlSource",
    "sqlReaderStoredProcedureName": "CopyTestSrcStoredProcedureWithParameters",
    "storedProcedureParameters": {
        "stringData": { "value": "str3" },
        "identifier": { "value": "$$Text.Format('{0:yyyy}', SliceStart)", "type": "Int"}
    }
}

Definicja procedury składowanej:

CREATE PROCEDURE CopyTestSrcStoredProcedureWithParameters
(
    @stringData varchar(20),
    @identifier int
)
AS
SET NOCOUNT ON;
BEGIN
    select *
    from dbo.UnitTestSrcTable
    where dbo.UnitTestSrcTable.stringData != stringData
    and dbo.UnitTestSrcTable.identifier != identifier
END
GO

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 powtarzalną kopię. Instrukcja zapytania. Nie
sliceIdentifierColumnName Określ nazwę kolumny działania kopiowania, która ma być wypełniona automatycznie wygenerowanym identyfikatorem wycinka, który służy do czyszczenia danych określonego wycinka podczas ponownego uruchamiania. Aby uzyskać więcej informacji, zobacz powtarzalną kopię. Nazwa kolumny z typem danych binarnych (32). Nie
sqlWriterStoredProcedureName Nazwa procedury składowanej, która definiuje 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ę uruchamianą tylko raz i nie ma nic wspólnego z danymi źródłowymi, np. usuwanie/obcięcie, użyj sqlWriterCleanupScript właściwości .
Nazwa procedury 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
sqlWriterTableType Określ nazwę typu tabeli do użycia w procedurze składowanej. działanie Kopiuj sprawia, że dane są przenoszone w tabeli tymczasowej o tym typie tabeli. Kod procedury składowanej może następnie scalić dane kopiowane z istniejącymi danymi. Nazwa typu tabeli. Nie

Przykład usługi SqlSink

"sink": {
    "type": "SqlSink",
    "writeBatchSize": 1000000,
    "writeBatchTimeout": "00:05:00",
    "sqlWriterStoredProcedureName": "CopyTestStoredProcedureWithParameters",
    "sqlWriterTableType": "CopyTestTableType",
    "storedProcedureParameters": {
        "identifier": { "value": "1", "type": "Int" },
        "stringData": { "value": "str1" },
        "decimalData": { "value": "1", "type": "Decimal" }
    }
}

Przykłady JSON do kopiowania danych do i z SQL Database

W poniższych przykładach przedstawiono przykładowe definicje JSON, których można użyć do utworzenia potoku przy użyciu Visual Studio lub Azure PowerShell. Pokazują one, jak kopiować dane do i z Azure SQL Database i 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.

Przykład: kopiowanie danych z Azure SQL Database do usługi Azure Blob

To samo definiuje następujące jednostki usługi Data Factory:

  1. Połączona usługa typu AzureSqlDatabase.
  2. Połączona usługa typu AzureStorage.
  3. Wejściowy zestaw danych typu AzureSqlTable.
  4. Wyjściowy zestaw danych typu Azure Blob.
  5. Potok z działanie Kopiuj, który używa usług SqlSource i BlobSink.

Przykład kopiuje dane szeregów czasowych (co godzinę, codziennie itp.) z tabeli w Azure SQL Database do obiektu blob 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 Azure SQL Database:

{
  "name": "AzureSqlLinkedService",
  "properties": {
    "type": "AzureSqlDatabase",
    "typeProperties": {
      "connectionString": "Server=tcp:<servername>.database.windows.net,1433;Database=<databasename>;User ID=<username>@<servername>;Password=<password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30"
    }
  }
}

Zobacz sekcję Azure SQL Połączona usługa, aby uzyskać listę właściwości obsługiwanych przez tę połączoną usługę.

Połączona usługa Azure Blob Storage:

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

Aby uzyskać listę właściwości obsługiwanych przez tę połączoną usługę, zobacz artykuł Dotyczący obiektów blob platformy Azure .

Azure SQL wejściowy zestaw danych:

W przykładzie założono, że utworzono tabelę "MyTable" w Azure SQL i zawiera ona kolumnę o nazwie "timestampcolumn" dla danych szeregów czasowych.

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

{
  "name": "AzureSqlInput",
  "properties": {
    "type": "AzureSqlTable",
    "linkedServiceName": "AzureSqlLinkedService",
    "typeProperties": {
      "tableName": "MyTable"
    },
    "external": true,
    "availability": {
      "frequency": "Hour",
      "interval": 1
    },
    "policy": {
      "externalData": {
        "retryInterval": "00:01:00",
        "retryTimeout": "00:10:00",
        "maximumRetry": 3
      }
    }
  }
}

Zobacz sekcję właściwości typu zestawu danych Azure SQL, aby uzyskać listę właściwości obsługiwanych przez ten typ zestawu danych.

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 dla 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 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
    }
  }
}

Aby uzyskać listę właściwości obsługiwanych przez ten typ zestawu danych, zobacz sekcję Właściwości typu zestawu danych usługi Azure Blob .

Działanie kopiowania w potoku z SQL źródłem i ujściem obiektów blob:

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 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":"2014-06-01T18:00:00",
    "end":"2014-06-01T19:00:00",
    "description":"pipeline for copy activity",
    "activities":[
      {
        "name": "AzureSQLtoBlob",
        "description": "copy activity",
        "type": "Copy",
        "inputs": [
          {
            "name": "AzureSQLInput"
          }
        ],
        "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 usługi SqlSource. Działanie kopiowania uruchamia to zapytanie względem źródła Azure SQL Database 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 zestawu danych JSON są używane do tworzenia zapytania do uruchamiania względem Azure SQL Database. Na przykład: select column1, column2 from mytable. 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 Azure SQL Database

Przykład definiuje następujące jednostki usługi Data Factory:

  1. Połączona usługa typu AzureSqlDatabase.
  2. Połączona usługa typu AzureStorage.
  3. Wejściowy zestaw danych typu AzureBlob.
  4. Wyjściowy zestaw danych typu AzureSqlTable.
  5. Potok z działanie Kopiuj używający usług BlobSource i SqlSink.

Przykład kopiuje dane szeregów czasowych (co godzinę, codziennie itp.) z obiektu blob platformy Azure do tabeli w Azure SQL Database 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 Azure SQL:

{
  "name": "AzureSqlLinkedService",
  "properties": {
    "type": "AzureSqlDatabase",
    "typeProperties": {
      "connectionString": "Server=tcp:<servername>.database.windows.net,1433;Database=<databasename>;User ID=<username>@<servername>;Password=<password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30"
    }
  }
}

Zobacz sekcję Azure SQL Połączona usługa, aby uzyskać listę właściwości obsługiwanych przez tę połączoną usługę.

Połączona usługa Azure Blob Storage:

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

Aby uzyskać listę właściwości obsługiwanych przez tę połączoną usługę, zobacz artykuł Dotyczący obiektów blob platformy Azure .

Zestaw danych wejściowych 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 części czasu rozpoczęcia, miesiąca i dnia, a nazwa pliku używa części godziny rozpoczęcia. Ustawienie "external": "true" informuje usługę Data Factory, że ta tabela jest zewnętrzna dla fabryki danych i nie jest wytwarzana 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
      }
    }
  }
}

Aby uzyskać listę właściwości obsługiwanych przez ten typ zestawu danych, zobacz sekcję Właściwości typu zestawu danych usługi Azure Blob .

Azure SQL Database wyjściowy zestaw danych:

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

{
  "name": "AzureSqlOutput",
  "properties": {
    "type": "AzureSqlTable",
    "linkedServiceName": "AzureSqlLinkedService",
    "typeProperties": {
      "tableName": "MyOutputTable"
    },
    "availability": {
      "frequency": "Hour",
      "interval": 1
    }
  }
}

Zobacz sekcję właściwości typu zestawu danych Azure SQL, aby uzyskać listę właściwości obsługiwanych przez ten typ zestawu danych.

Działanie kopiowania w potoku ze źródłem obiektów blob i ujściem SQL:

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 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": "AzureSqlOutput"
          }
        ],
        "typeProperties": {
          "source": {
            "type": "BlobSource",
            "blobColumnSeparators": ","
          },
          "sink": {
            "type": "SqlSink"
          }
        },
        "scheduler": {
          "frequency": "Hour",
          "interval": 1
        },
        "policy": {
          "concurrency": 1,
          "executionPriorityOrder": "OldestFirst",
          "retry": 0,
          "timeout": "01:00:00"
        }
      }
    ]
  }
}

Aby uzyskać listę właściwości obsługiwanych przez usługę SqlSink i BlobSource, zobacz sekcję ujścia SQL i obiekt BlobSource .

Kolumny tożsamości w docelowej bazie danych

Ta sekcja zawiera przykład kopiowania danych z tabeli źródłowej bez kolumny tożsamości do tabeli docelowej z kolumną tożsamości 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": {
        "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" }
        ],
        "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

Przykład wywoływania procedury składowanej z ujścia SQL w działaniu kopiowania potoku można znaleźć w artykule Invoke stored procedure for SQL sink in copy activity (Wywoływanie procedury składowanej dla ujścia SQL w działaniu kopiowania).

Mapowanie typów dla Azure SQL Database

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 do i z Azure SQL Database następujące mapowania są używane z SQL typu 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

Mapuj źródło na kolumny ujścia

Aby dowiedzieć się więcej na temat mapowania kolumn w źródłowym zestawie danych na kolumny w zestawie 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.