Настройка SQL Server в действии копирования
В этой статье описывается, как использовать действие копирования в конвейере данных для копирования данных с сервера SQL Server и из нее.
Поддерживаемая конфигурация
Для настройки каждой вкладки в действии копирования перейдите к следующим разделам соответственно.
Общие
Ознакомьтесь с руководством по общим параметрам, чтобы настроить вкладку "Общие параметры".
Исходный код
Следующие свойства поддерживаются для SQL Server на вкладке "Источник " действия копирования.
Требуются следующие свойства:
Тип хранилища данных: выберите "Внешний".
Подключение. Выберите подключение SQL Server из списка подключений. Если подключение не существует, создайте новое подключение SQL Server, нажав кнопку "Создать".
тип Подключение ion: выберите SQL Server.
Используйте запрос. Укажите способ чтения данных. Вы можете выбрать таблицу, запрос или хранимую процедуру. В следующем списке описана конфигурация каждого параметра:
Таблица: чтение данных из указанной таблицы. Выберите исходную таблицу из раскрывающегося списка или нажмите кнопку "Изменить ", чтобы ввести ее вручную.
Запрос. Укажите настраиваемый SQL-запрос для чтения данных. Например,
select * from MyTable
. Или щелкните значок карандаша для редактирования в редакторе кода.Хранимая процедура: используйте хранимую процедуру, которая считывает данные из исходной таблицы. Последней инструкцией SQL должна быть инструкция SELECT в хранимой процедуре.
Имя хранимой процедуры: выберите хранимую процедуру или укажите имя хранимой процедуры вручную при выборе параметра "Изменить ", чтобы считывать данные из исходной таблицы.
Параметры хранимой процедуры: укажите значения для параметров хранимой процедуры. Допустимые значения: пары имен или значений. Имена и регистр параметров должны совпадать с именами и регистром параметров хранимой процедуры. Параметры импорта можно выбрать для получения параметров хранимой процедуры.
В разделе "Дополнительно" можно указать следующие поля:
Время ожидания запроса (минуты): укажите время ожидания для выполнения команды запроса, значение по умолчанию — 120 минут. Если для этого свойства задан параметр, допустимые значения имеют интервал времени, например "02:00:00" (120 минут).
Уровень изоляции: указывает поведение блокировки транзакций для источника SQL. Допустимые значения: None, Read committed, Read uncommitted, Repeatable read, Serializable или Snapshot. Если значение не указано, используется уровень изоляции базы данных по умолчанию. Дополнительные сведения см. в разделе "Изоляция".
Параметр секционирования: укажите параметры секционирования данных, используемые для загрузки данных с SQL Server. Допустимые значения: Нет (по умолчанию), физические секции таблицы и динамический диапазон. Если параметр секции включен (т . е. нет), степень параллелизма для параллельной загрузки данных с СЕРВЕРА SQL управляется степенью параллелизма копирования на вкладке параметров действия копирования.
Нет. Выберите этот параметр, чтобы не использовать секцию.
Физические секции таблицы: при использовании физической секции столбец секции и механизм автоматически определяются на основе определения физической таблицы.
Динамический диапазон: при использовании запроса с параллельным включенным параметром секционирования
?DfDynamicRangePartitionCondition
диапазона требуется. Пример запроса:SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition
.Имя столбца секционирования: укажите имя исходного столбца в целочисленном или типе даты и даты и времени (
int
,,smallint
,smalldatetime
date
datetime
bigint
datetime2
, илиdatetimeoffset
), используемом секционированием диапазона для параллельной копии. Если значение не указано, автоматически определяется индекс или первичный ключ таблицы и используется в качестве столбца секционирования.Если для получения исходных данных используется запрос, подключите
?DfDynamicRangePartitionCondition
в предложении WHERE. Пример можно найти в разделе Параллельное копирование из базы данных SQL.Верхняя граница секции: укажите максимальное значение столбца секционирования для разделения диапазона секций. Это значение используется для выбора шага секционирования, а не для фильтрации строк в таблице. Все строки в таблице или результатах запроса будут секционированы и скопированы. Если значение не указано, действие копирования автоматически определяет значение. Пример можно найти в разделе Параллельное копирование из базы данных SQL.
Нижняя граница секции: укажите минимальное значение столбца секционирования для разделения диапазона секций. Это значение используется для выбора шага секционирования, а не для фильтрации строк в таблице. Все строки в таблице или результатах запроса будут секционированы и скопированы. Если значение не указано, действие копирования автоматически определяет значение. Пример можно найти в разделе Параллельное копирование из базы данных SQL.
Дополнительные столбцы: добавление дополнительных столбцов данных для хранения относительного пути или статического значения исходных файлов. Выражение поддерживается для последнего.
Обратите внимание на следующие аспекты:
- Если для источника задан запрос , действие копирования выполняет этот запрос к источнику SQL Server, чтобы получить данные. Кроме того, можно указать хранимую процедуру, указав имя хранимой процедуры и параметры хранимой процедуры, если хранимая процедура принимает параметры.
- При использовании хранимой процедуры в источнике для получения данных обратите внимание, что хранимая процедура предназначена для возврата другой схемы при передаче другого значения параметра, может возникнуть сбой или увидеть непредвиденный результат при импорте схемы из пользовательского интерфейса или при копировании данных в базу данных SQL с автоматическим созданием таблицы.
Назначение
Следующие свойства поддерживаются для SQL Server на вкладке "Назначение " действия копирования.
Требуются следующие свойства:
Тип хранилища данных: выберите "Внешний".
Подключение. Выберите подключение SQL Server из списка подключений. Если подключение не существует, создайте новое подключение SQL Server, нажав кнопку "Создать".
тип Подключение ion: выберите SQL Server.
Параметр таблицы: можно выбрать "Использовать существующую " для использования указанной таблицы. Или нажмите кнопку автоматического создания таблицы , чтобы автоматически создать целевую таблицу, если таблица не существует в исходной схеме, и обратите внимание, что этот выбор не поддерживается при использовании хранимой процедуры в качестве поведения записи.
Если выбрать "Использовать существующие", выполните следующие действия:
- Таблица. Выберите таблицу в целевой базе данных из раскрывающегося списка. Или проверка Изменить, чтобы ввести имя таблицы вручную.
При выборе: автоматическая создание таблицы:
- Таблица: укажите имя для созданной автоматически целевой таблицы.
В разделе "Дополнительно" можно указать следующие поля:
Поведение записи: определяет поведение записи, когда источник является файлами из файлового хранилища данных. Вы можете выбрать команду Insert, Upsert или Хранимую процедуру.
Вставка. Выберите этот параметр, используя поведение записи вставки для загрузки данных в SQL Server.
Upsert: выберите этот параметр, используя поведение записи upsert для загрузки данных в SQL Server.
Использование TempDB: укажите, следует ли использовать глобальную временную таблицу или физическую таблицу в качестве промежуточной таблицы для upsert. По умолчанию служба использует глобальную временную таблицу в качестве промежуточной таблицы, а это свойство выбрано.
Выберите схему пользовательской базы данных: если используется tempDB , укажите промежуточную схему для создания промежуточной таблицы, если используется физическая таблица.
Примечание.
Необходимо иметь разрешение на создание и удаление таблиц. По умолчанию промежуточная таблица будет совместно использовать ту же схему, что и целевая таблица.
Ключевые столбцы: укажите имена столбцов для уникальной идентификации строк. Можно использовать один ключ или ряд ключей. Если значение не указано, то используется первичный ключ.
Хранимая процедура: используйте хранимую процедуру, которая определяет, как применять исходные данные к целевой таблице. Эта хранимая процедура будет вызываться для каждого пакета. Для операций, которые выполняются только один раз и не имеют ничего общего с исходными данными, например удаление или усечение, используйте свойство скрипта предварительного копирования.
Имя хранимой процедуры: выберите хранимую процедуру или укажите имя хранимой процедуры вручную при проверка редактирования для чтения данных из исходной таблицы.
Параметры хранимой процедуры:
- Тип таблицы: укажите имя типа таблицы, используемое в хранимой процедуре. Действие копирования делает перемещаемые данные доступными во временной таблице с этим типом таблицы. Это позволяет при выполнении хранимой процедуры объединить копируемые и существующие данные.
- Имя параметра типа таблицы: укажите имя параметра типа таблицы, указанного в хранимой процедуре.
- Параметры: укажите значения для параметров хранимой процедуры. Допустимые значения: пары имен или значений. Имена и регистр параметров должны совпадать с именами и регистром параметров хранимой процедуры. Параметры импорта можно выбрать для получения параметров хранимой процедуры.
Блокировка таблицы массового вставки: нажмите кнопку "Да " или "Нет " (по умолчанию). Используйте этот параметр, чтобы повысить производительность копирования во время операции массового вставки в таблицу без индекса из нескольких клиентов. Это свойство можно указать при нажатии кнопки Insert или Upsert в качестве поведения записи. Дополнительные сведения см. в раздел BULK INSERT (Transact-SQL)
Скрипт предварительного копирования: укажите сценарий для действия копирования, который необходимо выполнить перед записью данных в целевую таблицу в каждой запуске. Это свойство можно использовать для очистки предварительно загруженных данных.
Время ожидания пакетной операции записи: укажите время ожидания завершения операции вставки пакета до истечения времени ожидания. Допустимое значение — интервал времени. Если значение не задано, по умолчанию используется время ожидания 02:00:00.
Размер пакета записи: укажите количество строк для вставки в таблицу SQL на пакет. Допустимое значение: целое число (количество строк). По умолчанию эта служба динамически определяет соответствующий размер пакета в зависимости от размера строки.
Максимальное число одновременных подключений: верхний предел одновременных подключений, установленных в хранилище данных во время выполнения действия. Указывайте значение только при необходимости ограничить количество одновременных подключений.
Сопоставление
Если вы не применяете SQL Server к автоматическому созданию таблицы в качестве назначения, перейдите в раздел "Сопоставление".
Если вы применяете SQL Server с автоматическим созданием таблицы в качестве назначения, за исключением конфигурации в сопоставлении, можно изменить тип для столбцов назначения. После выбора схемы импорта можно указать тип столбца в назначении.
Например, тип столбца идентификатора в источнике является int, и его можно изменить на float type при сопоставлении с целевым столбцом.
Настройки
Для настройки вкладки Параметры перейдите к разделу "Настройка других параметров" на вкладке "Параметры".
Параллельное копирование из базы данных SQL
Соединитель SQL Server в действии копирования обеспечивает встроенное секционирование данных для параллельного копирования данных. Параметры секционирования данных можно найти на вкладке Источник действия Copy.
Если включено копирование с секционированием, действие копирования выполняет параллельные запросы к источнику SQL Server для загрузки данных по секциям. Параллельная степень управляется степенью параллелизма копирования на вкладке параметров действия копирования. Например, если задать степень параллелизма копирования четыре, служба одновременно создает и выполняет четыре запроса на основе указанного параметра секции и параметров, а каждый запрос извлекает часть данных из SQL Server.
Рекомендуется включить параллельное копирование с секционированием данных, особенно при загрузке большого объема данных из SQL Server. Ниже приведены рекомендуемые конфигурации для разных сценариев. Если данные копируются в файловое хранилище данных, то рекомендуется сохранять данные в папку несколькими файлами (указывая только имя папки), так как производительность в таком случае будет выше, чем при записи в один файл.
Сценарий | Предлагаемые параметры |
---|---|
Полная загрузка из большой таблицы с физическими секциями. | Параметр секционирования. Физические секции таблицы. Во время выполнения служба автоматически определяет физические секции и копирует данные по секциям. Чтобы проверить, имеет ли таблица физическую секцию, выполните следующий запрос. |
Полная загрузка из большой таблицы без физических секций, когда таблица содержит столбец целочисленного типа или типа даты и времени для секционирования данных. | Параметры секции: секция динамического диапазона. Столбец секционирования (необязательно). Укажите столбец для секционирования данных. Если значение не указано, то используется столбец с первичным ключом. Верхняя граница секционирования и Нижняя граница секционирования (необязательно). Указывайте, если необходимо определить шаг секционирования. Эти значения не предназначены для фильтрации строк в таблице. Все строки в таблице будут секционированы и скопированы. Если не указано иное, копирование автоматически определяет значения, и это может занять много времени в зависимости от значений MIN и MAX. Рекомендуется указывать верхнюю и нижнюю границы. К примеру, если ваш столбец раздела "Идентификатор" имеет диапазон значений от 1 до 100 и вы установили нижнюю границу как 20, а верхнюю границу как 80 с параллельным копированием как 4, служба извлекает данные по 4 разделам — идентификаторы в диапазоне <=20, [21, 50], [51, 80] и >=81 соответственно. |
Загрузка большого объема данных пользовательским запросом без использования физических секций, однако с использованием столбца целочисленного типа или типа даты/даты и времени для секционирования данных. | Параметры секции: секция динамического диапазона. Запрос: SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause> .Столбец секционирования: укажите столбец, используемый для секционирования данных. Верхняя граница секционирования и Нижняя граница секционирования (необязательно). Указывайте, если необходимо определить шаг секционирования. Эти значения не предназначены для фильтрации строк в таблице. Все строки в результатах запроса будут секционированы и скопированы. Если значение не указано, действие копирования автоматически определяет значение. К примеру, если ваш столбец раздела "Идентификатор" имеет диапазон значений от 1 до 100, и вы установили нижнюю границу как 20, а верхнюю границу как 80, с параллельным копированием как 4, служба извлекает данные по 4 разделам — идентификаторы в диапазоне <=20, [21, 50], [51, 80] и >=81 соответственно. Ниже приведены дополнительные примеры запросов для различных сценариев. • Запросите всю таблицу: SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition • Запрос из таблицы с выделенным столбцом и дополнительными фильтрами предложения where: SELECT <column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause> • Запрос с вложенными запросами: SELECT <column_list> FROM (<your_sub_query>) AS T WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause> • Запрос с секцией в вложенных запросах: SELECT <column_list> FROM (SELECT <your_sub_query_column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition) AS T |
Ниже приведены рекомендации по загрузке данных с параметром секционирования.
- Чтобы избежать неравномерного распределения данных, выбирайте в качестве столбца секционирования отличительный столбец (например, первичный ключ или уникальный ключ).
- Если в таблице есть встроенные секции, используйте параметр "Физические секции таблицы " для повышения производительности.
Пример запроса для проверки физической секции
SELECT DISTINCT s.name AS SchemaName, t.name AS TableName, pf.name AS PartitionFunctionName, c.name AS ColumnName, iif(pf.name is null, 'no', 'yes') AS HasPartition
FROM sys.tables AS t
LEFT JOIN sys.objects AS o ON t.object_id = o.object_id
LEFT JOIN sys.schemas AS s ON o.schema_id = s.schema_id
LEFT JOIN sys.indexes AS i ON t.object_id = i.object_id
LEFT JOIN sys.index_columns AS ic ON ic.partition_ordinal > 0 AND ic.index_id = i.index_id AND ic.object_id = t.object_id
LEFT JOIN sys.columns AS c ON c.object_id = ic.object_id AND c.column_id = ic.column_id
LEFT JOIN sys.partition_schemes ps ON i.data_space_id = ps.data_space_id
LEFT JOIN sys.partition_functions pf ON pf.function_id = ps.function_id
WHERE s.name='[your schema]' AND t.name = '[your table name]'
Если таблица содержит физическую секцию, параметр HasPartition имеет значение yes, как показано ниже.
Сводка таблицы
Дополнительные сведения о действии копирования SQL Server см. в следующей таблице.
Сведения об источнике
Имя | Описание | Значение | Обязательное поле | Свойство скрипта JSON |
---|---|---|---|---|
Тип хранилища данных | Тип хранилища данных. | Внешний | Да | / |
Соединение | Подключение к исходному хранилищу данных. | < подключение > | Да | подключение |
Тип подключения | Тип подключения. Выберите SQL Server. | Сервер SQL Server | Да | / |
Использование запроса | Настраиваемый SQL-запрос для чтения данных. | •Таблице •Запроса • Хранимая процедура |
No | / |
Таблицу | Таблица исходных данных. | < имя таблицы> | No | Схемы table |
Запрос | Настраиваемый SQL-запрос для чтения данных. | < запрос > | No | sqlReaderQuery |
Имя хранимой процедуры | Это свойство содержит имя хранимой процедуры, которая считывает данные из исходной таблицы. Последней инструкцией SQL должна быть инструкция SELECT в хранимой процедуре. | < Имя хранимой процедуры > | No | sqlReaderStoredProcedureName |
Параметр хранимой процедуры | Это параметры для хранимой процедуры. Допустимые значения: пары имен или значений. Имена и регистр параметров должны совпадать с именами и регистром параметров хранимой процедуры. | < пары "имя" или "значение" > | No | storedProcedureParameters |
Время ожидания запроса | Время ожидания выполнения команды запроса. | timespan (значение по умолчанию — 120 минут) |
No | queryTimeout |
Уровень изоляции | Задает режим блокировки транзакций для источника данных SQL. | • Чтение зафиксировано • Чтение незафиксированного • Повторяемое чтение •Сериализуемый •Снимок |
No | isolationLevel: • ReadCommitted • ReadUncommitted • RepeatableRead •Сериализуемый •Снимок |
Параметр секции | Параметры секционирования данных, используемые для загрузки данных из SQL Server. | • Нет (по умолчанию) • Физические секции таблицы • Динамический диапазон |
No | partitionOption: • Нет (по умолчанию) • PhysicalPartitionsOfTable • DynamicRange |
Имя столбца секции | Имя исходного столбца в целочисленном или типе даты и даты и времени (int , , bigint smallint , datetime datetime2 date smalldatetime datetimeoffset или), используемом секционированием диапазона для параллельной копии. Если значение не указано, автоматически определяется индекс или первичный ключ таблицы и используется в качестве столбца секционирования. Если для получения исходных данных используется запрос, подключите ?DfDynamicRangePartitionCondition в предложении WHERE. |
< Имена столбцов секций > | No | partitionColumnName |
Верхняя граница секции | Максимальное значение столбца секционирования для разделения диапазона секций. Это значение используется для выбора шага секционирования, а не для фильтрации строк в таблице. Все строки в таблице или результатах запроса будут секционированы и скопированы. Если значение не указано, действие копирования автоматически определяет значение. | < верхняя граница секции > | No | partitionUpperBound |
Нижняя граница секции | Минимальное значение столбца секционирования для разделения диапазона секций. Это значение используется для выбора шага секционирования, а не для фильтрации строк в таблице. Все строки в таблице или результатах запроса будут секционированы и скопированы. Если значение не указано, действие копирования автоматически определяет значение. | < нижняя граница секции > | No | partitionLowerBound |
Дополнительные столбцы | Добавьте дополнительные столбцы данных для хранения относительного пути или статического значения исходных файлов. Выражение поддерживается для последнего. | • Имя •Значение |
No | additionalColumns: •Имя •Значение |
Сведения о назначении
Имя | Описание | Значение | Обязательное поле | Свойство скрипта JSON |
---|---|---|---|---|
Тип хранилища данных | Тип хранилища данных. | Внешний | Да | / |
Соединение | Подключение к целевому хранилищу данных. | < подключение > | Да | подключение |
Тип подключения | Тип подключения. Выберите SQL Server. | Сервер SQL Server | Да | / |
Параметр таблицы | Указывает, следует ли автоматически создавать целевую таблицу, если она не существует на основе исходной схемы. | • Использование существующих • Автоматическая создание таблицы |
No | tableOption: • autoCreate |
Таблицу | Целевая таблица данных. | <имя таблицы> | Да | Схемы table |
Поведение записи | Поведение записи для действия копирования для загрузки данных в базу данных SQL Server. | •Вставить • Upsert • Хранимая процедура |
No | writeBehavior: •Вставить • upsert sqlWriterStoredProcedureName, sqlWriterTableType, storedProcedureTableTypeParameterName, storedProcedureParameters |
Использование TempDB | Следует ли использовать глобальную временную или физическую таблицу в качестве промежуточной таблицы для upsert. | выбрано (по умолчанию) или не выбрано | No | useTempDB: true (по умолчанию) или false |
Выбор схемы пользовательской базы данных | Промежуточная схема для создания промежуточной таблицы, если используется физическая таблица. Примечание. Пользователь должен иметь разрешение на создание и удаление таблиц. По умолчанию промежуточная таблица будет совместно использовать ту же схему, что и целевая таблица. Применяется, если вы не выберете "Использовать TempDB". | выбрано (по умолчанию) или не выбрано | No | interimSchemaName |
Ключевые столбцы | Имена столбцов для уникальной идентификации строк. Можно использовать один ключ или ряд ключей. Если значение не указано, то используется первичный ключ. | < ваш ключевой столбец> | No | клиентом |
Имя хранимой процедуры | Имя хранимой процедуры, в которой определяется, как применить исходные данные в целевой таблице. Эта хранимая процедура будет вызываться для каждого пакета. Для операций, которые выполняются только один раз и не имеют ничего общего с исходными данными, например удаление или усечение, используйте свойство скрипта предварительного копирования. | < имя хранимой процедуры > | No | sqlWriterStoredProcedureName |
Тип таблицы | Имя типа таблицы для использования в хранимой процедуре. Действие копирования делает перемещаемые данные доступными во временной таблице с этим типом таблицы. Это позволяет при выполнении хранимой процедуры объединить копируемые и существующие данные. | < имя типа таблицы > | No | sqlWriterTableType |
Имя параметра типа таблицы | Имя параметра типа таблицы, указанного в хранимой процедуре. | < имя параметра типа таблицы > | No | storedProcedureTableTypeParameterName |
Параметры | Параметры для хранимой процедуры. Допустимые значения: пары "имя — значение". Имена и регистр параметров должны совпадать с именами и регистром параметров хранимой процедуры. | < Пары имен и значений > | No | storedProcedureParameters |
Блокировка таблицы массового вставки | Используйте этот параметр, чтобы повысить производительность копирования во время операции массового вставки в таблицу без индекса из нескольких клиентов. | Да или нет (по умолчанию) | No | sqlWriterUseTableLock: true или false (по умолчанию) |
Скрипт предварительного копирования | Скрипт действия копирования для выполнения перед записью данных в целевую таблицу в каждом запуске. Это свойство можно использовать для очистки предварительно загруженных данных. | < скрипт предварительного копирования > (строка) |
No | preCopyScript |
Время ожидания пакетной службы | Время ожидания до выполнения операции пакетной вставки, пока не закончится срок ее действия. | timespan (значение по умолчанию — "02:00:00") |
No | writeBatchTimeout |
Размер пакета записи | Количество строк для вставки в таблицу SQL на пакет. По умолчанию эта служба динамически определяет соответствующий размер пакета в зависимости от размера строки. | < количество строк > (целое число) |
No | writeBatchSize |
Максимальное число одновременных подключений | Верхний предел одновременных подключений, установленных для хранилища данных при выполнении действия. Указывайте значение только при необходимости ограничить количество одновременных подключений. | < верхний предел одновременных подключений > (целое число) |
No | maxConcurrentConnections |