Поделиться через


Загрузчик командной строки dwloader для параллельного хранилища данных

Dwloader — это средство командной строки для параллельного хранилища данных (PDW), которое загружает строки таблиц массово в существующую таблицу. При загрузке строк можно добавить все строки в конец таблицы (режим добавления или режим fastappend), добавить новые строки и обновить существующие строки (режим upsert) или удалить все существующие строки перед загрузкой, а затем вставить все строки в пустую таблицу (режим перезагрузки).

Процесс загрузки данных

  1. Подготовьте исходные данные.

    Используйте собственный процесс ETL для создания исходных данных, которые требуется загрузить. Исходные данные должны быть отформатированы, чтобы соответствовать схеме целевой таблицы. Сохраните исходные данные в одном или нескольких текстовых файлах и скопируйте текстовые файлы в тот же каталог на сервере загрузки. Сведения о сервере загрузки см. в разделе "Получение и настройка сервера загрузки"

  2. Подготовьте параметры загрузки.

    Определите, какие параметры загрузки вы будете использовать. Сохраните параметры загрузки в файле конфигурации. Скопируйте файл конфигурации в локальное расположение на сервере загрузки. Параметры конфигурации dwloader описаны в этом разделе.

  3. Подготовьте параметры сбоя загрузки.

    Решите, как требуется dwloader обрабатывать строки, которые не загружались. Чтобы выполнить загрузку, dwloader сначала загружает данные в промежуточную таблицу, а затем передает данные в целевую таблицу. Когда загрузчик загружает данные в промежуточную таблицу, он отслеживает количество строк, которые не загружаются. Например, строки, которые неправильно отформатированы, не будут загружаться. Неудачные строки копируются в файл отклонений. По умолчанию загрузка прерывается после первого отклонения, если не указано другое пороговое значение отклонения.

  4. Установите dwloader.

    Установите dwloader на сервер загрузки, если он еще не установлен.

  1. Запустите dwloader.

    Войдите на сервер загрузки и запустите исполняемый dwloader.exe с соответствующими параметрами командной строки.

  2. Проверьте результаты.

    Вы можете проверить файл неудачных строк (указанный с помощью -R), чтобы узнать, не удалось ли загрузить все строки. Если этот файл пуст, все строки загружены успешно. Dwloader является транзакционной, поэтому если какой-либо шаг завершается сбоем (кроме отклоненных строк), все шаги откатятся к исходному состоянию.

Синтаксис

dwloader.exe { -h }  
  
dwloader.exe   
    {  
        { -U login_name  -P <password>  }  
        | -W  
    }  
    [ -f parameter_file ]  
    [ -S target_appliance ]  
    { -T target_database_name . [ schema ] . table_name }   
    { -i source_data_location } [ <source_data_options> ]  
    { -R load_failure_file_name } [ <load_failure_options> ]  
    [ <loading_options> ]  
}  
  
<source_data_options> ::=  
{  
    [ -fh number_header_rows ]  
    [ < variable_length_column_options > | < fixed_width_column_options > ]  
    [ -D { mdy | myd | ymd | ydm | dmy | dym | custom_date_format } ]  
    [ -dt datetime_format_file ]  
}  
  
<variable_length_column_options> ::=  
{  
    [ -e character_encoding ]  
    -r row_delimiter   
    [ -s string_delimiter ]  
    -t field_delimiter   
}  
  
<fixed_width_column_options> ::=  
{  
    -w fixed_width_config_file   
    [ -e character_encoding ]   
    -r row_delimiter   
}  
  
<load_failure_options> ::=  
{  
    [ -rt { value | percentage } ]  
    [ -rv reject_value ]  
    [ -rs reject_sample_value ]  
}  
  
<loading_options> ::=  
{  
    [ -d staging_database_name ]  
    [ -M { append | fastappend | upsert -K merge_column [ ,...n ] | reload } ]  
    [ -b batchsize ]   
    [ -c ]  
    [ -E ]  
    [ -m ]  
    [ -N ]  
    [ -se ]
    [ -l ]   
}  

Аргументы

-h
Отображает простые сведения справки об использовании загрузчика. Справка отображается только в том случае, если не указаны другие параметры командной строки.

-U login_name
Допустимое имя входа проверки подлинности SQL Server с соответствующими разрешениями для выполнения загрузки.

-P <пароль>
Пароль для login_name проверки подлинности SQL Server.

-W
Использовать проверку подлинности Windows. (Не требуется login_name или пароль .)

-f parameter_file_name
Используйте файл параметров, parameter_file_name вместо параметров командной строки. parameter_file_name может содержать любой параметр командной строки, кроме user_name и пароля. Если параметр указан в командной строке и в файле параметров, командная строка переопределяет параметр файла.

Файл параметров содержит один параметр без - префикса на строку.

Примеры:

rt=percentage

rv=25

-S target_appliance
Указывает устройство SQL Server PDW, которое получит загруженные данные.

Для подключений Infiniband target_appliance указывается как <устройство-имя-SQLCTL01>. Сведения о настройке этого именованного подключения см. в разделе "Настройка сетевых адаптеров InfiniBand".

Для подключений Ethernet target_appliance — это IP-адрес кластера узлов управления.

Если опущено, dwloader по умолчанию использует значение, указанное при установке dwloader.

-T target_database_name.[схема].table_name
Трехкомпонентное имя целевой таблицы.

source_data_location
Расположение одного или нескольких исходных файлов для загрузки. Каждый исходный файл должен быть текстовым файлом или текстовым файлом, сжатым с помощью gzip. В каждый файл gzip можно сжимать только один исходный файл.

Форматирование исходного файла:

  • Исходный файл должен быть отформатирован в соответствии с параметрами загрузки.

  • Каждая строка в исходном файле содержит данные для одной строки таблицы. Исходные данные должны соответствовать схеме целевой таблицы. Порядок столбцов и типы данных также должны соответствовать. Каждое поле в строке представляет столбец в целевой таблице.

  • По умолчанию поля являются переменной длиной и разделены разделителем. Чтобы указать тип разделителя, используйте <параметры командной строки variable_length_column_options> . Чтобы указать поля фиксированной длины, используйте <параметры командной строки fixed_width_column_options> .

Чтобы указать расположение исходных данных, выполните указанные ниже действия.

  • Расположение исходных данных может быть сетевым путем или локальным путем к каталогу на сервере загрузки.

  • Чтобы указать все файлы в каталоге, введите путь к каталогу, за которым следует подстановочный знак *. Загрузчик не загружает файлы из подкаталогов, которые находятся в расположении исходных данных. Ошибка загрузчика при наличии каталога в файле gzip.

  • Чтобы указать некоторые файлы в каталоге, используйте сочетание символов и подстановочного знака *.

Чтобы загрузить несколько файлов с одной командой:

  • Все файлы должны существовать в одном каталоге.

  • Файлы должны быть всеми текстовыми файлами, всеми файлами gzip или сочетанием текстовых и gzip-файлов.

  • Ни один из файлов не может содержать сведения о заголовке.

  • Все файлы должны использовать один и тот же тип кодировки символов. См. параметр -e.

  • Все файлы должны быть загружены в одну таблицу.

  • Все файлы будут сцеплены и загружены, как если бы они были одним файлом, и отклоненные строки будут переходить к одному файлу отклонения.

Примеры:

  • -i \\loadserver\load\daily\*.gz

  • -i \\loadserver\load\load\daily\*.txt

  • -i \\loadserver\loadserver\load\daily\monday.*

  • -i \\loadserver\load\load\daily\monday.txt

  • -i \\loadserver\load\load\daily\*

-R load_failure_file_name
Если возникают сбои загрузки, dwloader сохраняет строку, которая не удалось загрузить, и описание сбоя сведения о сбое в файле с именем load_failure_file_name. Если этот файл уже существует, dwloader перезаписывает существующий файл. load_failure_file_name создается при первом сбое. Если все строки загружены успешно, load_failure_file_name не создается.

-fh number_header_rows
Число строк (строк), которые следует игнорировать в начале source_data_file_name. По умолчанию установлено значение 0.

<variable_length_column_options>
Параметры для source_data_file_name с столбцами переменной длины символов с разделителями символов. По умолчанию source_data_file_name содержит символы ASCII в столбцах переменной длины.

Для файлов ASCII nULLs представлены последовательно, размещая разделители. Например, в файле с разделителями канала ("|"), значение NULL указывается "||". В файле с разделителями-запятыми значение NULL указывается ",".". Кроме того, необходимо указать параметр -E (--emptyStringAsNull). Дополнительные сведения о -E см. ниже.

-e character_encoding
Указывает тип кодировки символов для загрузки данных из файла данных. Параметры ASCII (по умолчанию), UTF8, UTF16 или UTF16BE, где UTF16 является маленьким конечным и UTF16BE является большим эндианом. Эти параметры являются нечувствительными к регистру.

-t field_delimiter
Разделитель для каждого поля (столбца) в строке. Разделитель полей — это один или несколько из этих escape-символов ASCII или шестнадцатеричных значений ASCII.

Имя. Escape-символ Шестнадцатеричный символ
Вкладка \t 0x09
Возврат каретки (CR) \r 0x0d
Канал строк (LF) \n 0x0a
CRLF \r\n 0x0d0x0a
Comma ',' 0x2c
Двойная кавычка \" 0x22
Одинарная кавычка \' 0x27

Чтобы указать символ канала в командной строке, заключите его с двойными кавычками "|". Это позволит избежать неправильной интерпретации средства синтаксического анализа командной строки. Другие символы заключены в одинарные кавычки.

Примеры:

-t "|"

-t ' '

-t 0x0a

-t \t

-t '~|~'

-r row_delimiter
Разделитель для каждой строки исходного файла данных. Разделитель строк — это одно или несколько значений ASCII.

Чтобы указать возвращаемую каретки (CR), линейную линию (LF) или символ табуляции в качестве разделителя, можно использовать escape-символы (\r, \n, \t) или шестнадцатеричные значения (0x, 0d, 09). Чтобы указать другие специальные символы в качестве разделителей, используйте его шестнадцатеричное значение.

Примеры CR+LF:

-r \r\n

-r 0x0d0x0a

Примеры CR:

-r \r

-r 0x0d

Примеры LF:

-r \n

-r 0x0a

Для Unix требуется LF. Для Windows требуется cr.

-s string_delimiter
Разделитель для поля типа строковых данных входного файла с разделителями текста. Разделитель строк — это одно или несколько значений ASCII. Его можно указать как символ (например, -s *) или в виде шестнадцатеричного значения (например, -s 0x22 для двойной кавычки).

Примеры:

-s *

-s 0x22

< fixed_width_column_options>
Параметры исходного файла данных с столбцами фиксированной длины. По умолчанию source_data_file_name содержит символы ASCII в столбцах переменной длины.

Столбцы фиксированной ширины не поддерживаются, если значение -e — UTF8.

-w fixed_width_config_file
Путь и имя файла конфигурации, указывающий количество символов в каждом столбце. Каждое поле должно быть указано.

Этот файл должен находиться на сервере загрузки. Путь может быть UNC, относительным или абсолютным. Каждая строка в fixed_width_config_file содержит имя одного столбца и количество символов для этого столбца. Существует одна строка для столбца, как показано ниже, и порядок в файле должен соответствовать порядку в целевой таблице:

=column_name num_chars

=column_name num_chars

Пример файла конфигурации фиксированной ширины:

SalesCode=3

SalesID=10

Примеры строк в source_data_file_name:

230Shirts0056

320Towels1356

В предыдущем примере первая загруженная строка будет иметь SalesCode='230' и SalesID='Shirts0056'. Вторая загруженная строка будет иметь SalesCode='320' и SalesID='Towels1356'.

Сведения о том, как обрабатывать начальные и конечные пробелы или преобразование типов данных в режиме фиксированной ширины, см . в правилах преобразования типов данных для dwloader.

-e character_encoding
Указывает тип кодировки символов для загрузки данных из файла данных. Параметры ASCII (по умолчанию), UTF8, UTF16 или UTF16BE, где UTF16 является маленьким конечным и UTF16BE является большим эндианом. Эти параметры являются нечувствительными к регистру.

Столбцы фиксированной ширины не поддерживаются, если значение -e — UTF8.

-r row_delimiter
Разделитель для каждой строки исходного файла данных. Разделитель строк — это одно или несколько значений ASCII.

Чтобы указать возвращаемую каретки (CR), линейную линию (LF) или символ табуляции в качестве разделителя, можно использовать escape-символы (\r, \n, \t) или шестнадцатеричные значения (0x, 0d, 09). Чтобы указать другие специальные символы в качестве разделителей, используйте его шестнадцатеричное значение.

Примеры CR+LF:

-r \r\n

-r 0x0d0x0a

Примеры CR:

-r \r

-r 0x0d

Примеры LF:

-r \n

-r 0x0a

Для Unix требуется LF. Для Windows требуется cr.

-D { ymd | ydm | mdy | myd | dmy | dym | custom_date_format }
Указывает порядок месяца (m), дня (d) и года (y) для всех полей даты и времени в входном файле. Порядок по умолчанию — ymd. Чтобы указать несколько форматов заказа для одного исходного файла, используйте параметр -dt.

ymd | dmy
ydm и dmy разрешают одинаковые входные форматы. Оба позволяют году находиться в начале или конце даты. Например, для форматов дат ydm и dmy в входном файле может быть 2013-02-03 или 02-03-2013.

ydm
Входные данные, отформатированные как ydm, можно загружать только в столбцы типа данных datetime и smalldatetime. Нельзя загрузить значения ydm в столбец типа данных datetime2, date или datetimeoffset.

mdy
mdy разрешает <месяц><пробела><дня><запятой><года>.

Примеры входных данных mdy 1 января 1975 г.

  • 1 января 1975 г.

  • 01 января 75 г.

  • Январь/1/75

  • 01011975

мгд
Примеры входных файлов для 04 марта 2010 г.: 03-2010-04, 3.2010/4

дгм
Примеры входных файлов для 04 марта 2010 г.: 04-2010-03, 4.2010/3

custom_date_format
custom_date_format — это настраиваемый формат даты (например, MM/dd/гггг) и включен только для обеспечения обратной совместимости. Dwloader не применяет пользовательский формат даты. Вместо этого при указании настраиваемого формата даты dwloader преобразует его в соответствующий параметр ymd, ydm, mdy, myd, dym или dmy.

Например, если указать -D MM/dd/гггг, dwloader ожидает, что все входные данные даты будут упорядочены в первый месяц, а затем день, а затем год (mdy). Он не применяет 2 символьных месяца, 2 цифры дней и 4 цифры лет, как указано в пользовательском формате даты. Ниже приведены некоторые примеры способов форматирования дат в входном файле, если формат даты — D MM/dd/гггг: 01.02.2013, Январь 02.2013, 1.2.2013

Дополнительные подробные сведения о форматировании см. в правилах преобразования типов данных для dwloader.

-dt datetime_format_file
Каждый формат даты и времени указывается в файле с именем datetime_format_file. В отличие от параметров командной строки, параметры файла, содержащие пробелы, не должны быть заключены в двойные кавычки. Невозможно изменить формат даты и времени при загрузке данных. Исходный файл данных и соответствующий столбец в целевой таблице должны иметь тот же формат.

Каждая строка содержит имя столбца в целевой таблице и его формате даты и времени.

Примеры:

LastReceiptDate=ymd

ModifiedDate=dym

-d staging_database_name
Имя базы данных, которая будет содержать промежуточную таблицу. По умолчанию используется база данных, указанная с параметром -T, который является базой данных для целевой таблицы. Дополнительные сведения об использовании промежуточной базы данных см. в разделе "Создание промежуточной базы данных".

-M load_mode_option
Указывает, следует ли добавлять, upsert или перезагрузить данные. Режим по умолчанию добавляется.

append
Загрузчик вставляет строки в конец существующих строк в целевой таблице.

fastappend
Загрузчик вставляет строки напрямую без использования временной таблицы в конец существующих строк в целевой таблице. Для fastappend требуется параметр multi-transaction (-m). Не удается указать промежуточную базу данных при использовании fastappend. Нет отката с fastappend, что означает, что восстановление от неудачной или прерванной нагрузки должно обрабатываться собственным процессом загрузки.

upsert -K merge_column [ ,...n ]
Загрузчик использует инструкцию слияния SQL Server для обновления существующих строк и вставки новых строк.

Параметр -K указывает столбец или столбцы, на основе слияния. Эти столбцы образуют ключ слияния, который должен представлять уникальную строку. Если ключ слияния существует в целевой таблице, строка обновляется. Если ключ слияния не существует в целевой таблице, строка добавляется.

Для хэш-распределенных таблиц ключ слияния должен быть или включать столбец распространения.

Для реплицированных таблиц ключ слияния — это сочетание одного или нескольких столбцов. Эти столбцы указываются в соответствии с потребностями приложения.

Несколько столбцов должны быть разделены запятыми без пробелов или разделены запятыми пробелами и заключены в одинарные кавычки.

Если две строки в исходной таблице имеют соответствующие значения ключей слияния, их соответствующие строки должны совпадать.

перезаряжать
Загрузчик усечение целевой таблицы перед вставками исходных данных.

-b batchsize
Рекомендуется использовать только служба поддержки Майкрософт пакетную обработку — это размер пакета SQL Server для массового копирования, выполняемого DMS в экземплярах SQL Server на вычислительных узлах. При указании пакетной загрузки SQL Server PDW переопределит размер пакетной загрузки, вычисляемый динамически для каждой загрузки.

Начиная с SQL Server 2012 PDW узел управления динамически вычисляет размер пакета для каждой загрузки по умолчанию. Это автоматическое вычисление основано на нескольких параметрах, таких как размер памяти, тип целевой таблицы, схема целевой таблицы, тип загрузки, размер файла и класс ресурсов пользователя.

Например, если режим загрузки FASTAPPEND и таблица имеет кластеризованный индекс columnstore, SQL Server PDW по умолчанию попытается использовать пакетный размер 1 048 576, чтобы группы строк стали ЗАКРЫТЫми и загружаются непосредственно в columnstore, не проходя через разностное хранилище. Если память не разрешает размер пакета размером 1 048 576, dwloader выберет меньший пакет.

Если тип нагрузки — FASTAPPEND, пакетная обработка применяется к загрузке данных в таблицу, в противном случае пакетная обработка применяется к загрузке данных в промежуточную таблицу.

<reject_options>
Задает параметры для определения количества сбоев загрузки, разрешенных загрузчиком. Если сбои загрузки превышают пороговое значение, загрузчик остановится и не зафиксирует строки.

-rt { значение | процент }
Указывает, является ли параметр -reject_value в параметре -rv reject_value литеральным числом строк (значением) или скоростью сбоя (процент). Значением по умолчанию является значение.

Процентный параметр — это вычисление в режиме реального времени, которое происходит через интервалы в соответствии с параметром -rs.

Например, если загрузчик пытается загрузить 100 строк и 25 неудачно и 75 успешно, то скорость сбоя составляет 25 %.

-rv reject_value
Указывает число или процент отклонений строк, которые необходимо разрешить перед остановкой загрузки. Параметр -rt определяет, относится ли reject_value к количеству строк или проценту строк.

Значение по умолчанию reject_value равно 0.

При использовании со значением -rt загрузчик останавливает нагрузку, когда число отклоненных строк превышает reject_value.

При использовании с процентом -rt загрузчик вычисляет процент с интервалами (-rs). Таким образом, процент неудачных строк может превышать reject_value.

-rs reject_sample_size
Используется с параметром -rt percentage для указания добавочных процентных проверок. Например, если reject_sample_size равно 1000, загрузчик вычисляет процент неудачных строк после попытки загрузить 1000 строк. Он пересчитывает процент неудачных строк после попытки загрузить все дополнительные 1000 строк.

-c
Удаляет пробелы из левой и правой части полей char, nchar, varchar и nvarchar. Преобразует каждое поле, содержащее только пробелы, в пустую строку.

Примеры:

' получает усеченный до ''

'abc' получает усеченный до "abc"

При использовании -c с -E сначала происходит операция -E. Поля, содержащие только символы пробелов, преобразуются в пустую строку, а не в NULL.

-E
Преобразование пустых строк в NULL. По умолчанию эти преобразования не выполняются.

-m
Используйте режим много транзакций для второго этапа загрузки; при загрузке данных из промежуточной таблицы в распределенную таблицу.

С помощью -m SQL Server PDW выполняет и фиксирует нагрузки параллельно. Это выполняет гораздо быстрее, чем режим загрузки по умолчанию, но не является транзакциобезопасной.

Без -m SQL Server PDW выполняет и фиксирует последовательную нагрузку между дистрибутивами в каждом вычислительном узле и одновременно на вычислительных узлах. Этот метод медленнее, чем режим много транзакций, но является безопасным для транзакций.

-m является необязательным для добавления, перезагрузки и upsert.

-m требуется для fastappend.

-m нельзя использовать с реплицированными таблицами.

-m применяется только ко второму этапу загрузки. Он не применяется к первому этапу загрузки; загрузка данных в промежуточную таблицу.

Нет отката с режимом много транзакций, что означает, что восстановление от неудачной или прерванной нагрузки должно обрабатываться собственным процессом загрузки.

Мы рекомендуем использовать -m только при загрузке в пустую таблицу, чтобы можно было восстановить без потери данных. Чтобы восстановиться после сбоя загрузки: удалите целевую таблицу, устраните проблему загрузки, повторно создайте целевую таблицу и снова запустите нагрузку.

-N
Убедитесь, что целевое устройство имеет действительный сертификат PDW SQL Server из доверенного центра. Используйте это, чтобы убедиться, что ваши данные не перехватываются злоумышленником и отправляются в несанкционированное расположение. Сертификат должен быть уже установлен на устройстве. Единственным поддерживаемым способом установки сертификата является установка сертификата администратором устройства с помощью средства Configuration Manager. Попросите администратора устройства, если вы не уверены, установлен ли доверенный сертификат устройства.

-se
Пропустить загрузку пустых файлов. Это также пропускает распаковку пустых gzip-файлов.

-l
Доступно с обновлением CU7.4, указывает максимальную длину строки (в байтах), которую можно загрузить. Допустимые значения являются целыми числами от 32768 до 33554432. Используется только при необходимости для загрузки больших строк (больше 32 КБ), так как это будет выделять больше памяти на клиенте и сервере.

Значения кода возврата

0 (успешно) или другое целочисленное значение (сбой)

В командном окне или пакетном файле используйте errorlevel для отображения возвращаемого кода. Например:

dwloader  
echo ReturnCode=%errorlevel%  
if not %errorlevel%==0 echo Fail  
if %errorlevel%==0 echo Success  

При использовании PowerShell используйте $LastExitCode.

Разрешения

Требуется разрешение LOAD и применимые разрешения (INSERT, UPDATE, DELETE) в целевой таблице. Требуется разрешение CREATE (для создания временной таблицы) в промежуточной базе данных. Если промежуточная база данных не используется, в целевой базе данных требуется разрешение CREATE.

Общие замечания

Сведения о преобразованиях типов данных при загрузке с помощью dwloader см . в правилах преобразования типов данных для dwloader.

Если параметр содержит одно или несколько пробелов, заключите параметр с двойными кавычками.

Вы должны запустить загрузчик из установленного расположения. Исполняемый файл dwloader предварительно установлен с устройством и находится в каталоге C:\Program Files\Microsoft SQL Server Data Warehouse\DWLoader.

Можно переопределить параметр, указанный в файле параметров (-f), указав его в качестве параметра командной строки.

Одновременно можно запускать несколько экземпляров загрузчика. Максимальное количество экземпляров loader предварительно настроено и не может быть изменено.

Загруженные данные могут требовать больше или меньше места на устройстве, чем в исходном расположении. Вы можете выполнять тестовые импорты с подмножествами данных для оценки потребления дисков.

Несмотря на то, что dwloader — это процесс транзакций и откат откатится корректно при сбое, он не может быть откатирован после успешного завершения массовой загрузки. Чтобы отменить активный процесс dwloader , введите CTRL+C.

Ограничения

Общий размер всех нагрузок, выполняемых одновременно, должен быть меньше LOG_SIZE для базы данных, и мы рекомендуем общий размер всех параллельных нагрузок меньше 50 % LOG_SIZE. Чтобы достичь этого ограничения размера, можно разделить большие нагрузки на несколько пакетов. Дополнительные сведения о LOG_SIZE см. в статье CREATE DATABASE

При загрузке нескольких файлов с одной командой загрузки все отклоненные строки записываются в один и тот же файл отклонения. Файл отклонения не показывает, какой входной файл содержит каждую отклоненную строку.

Пустая строка не должна использоваться в качестве разделителя. Если в качестве разделителя строк используется пустая строка, загрузка завершится ошибкой. При использовании в качестве разделителя столбцов загрузка игнорирует разделитель и продолжает использовать значение по умолчанию "|" в качестве разделителя столбцов. При использовании в качестве разделителя строк пустая строка игнорируется и применяется поведение по умолчанию.

Режим блокировки

Поведение блокировки dwloader зависит от load_mode_option.

  • append — это рекомендуемый и наиболее распространенный вариант. Добавление данных в промежуточную таблицу. Блокировка подробно описана ниже.

  • быстрое добавление — быстрое добавление загружается непосредственно в окончательную таблицу, принимая блокировку таблицы ExclusiveUpdate, и является единственным режимом, который не использует промежуточную таблицу.

  • перезагрузка— перезагрузка загружает данные в промежуточную таблицу и требует монопольной блокировки как промежуточной таблицы, так и конечной таблицы. Перезагрузить не рекомендуется для параллельных операций.

  • upsert — Upsert загружает данные в промежуточную таблицу, а затем выполняет операцию слияния из промежуточной таблицы в окончательную таблицу. Upsert не требует эксклюзивных блокировок в окончательной таблице. Производительность может отличаться при использовании upsert. Проверьте поведение в вашей среде.

Режим блокировки

Блокировка режима добавления

Добавление может выполняться в режиме с несколькими транзакциями (с помощью аргумента -m), но оно не безопасно для транзакций. Поэтому добавление должно использоваться как транзакционная операция (без использования аргумента -m). К сожалению, во время последней операции INSERT-SELECT режим транзакций в настоящее время составляет около шести раз медленнее, чем режим с несколькими транзакциями.

Режим добавления загружает данные на двух этапах. Этап один загружает данные из исходного файла в промежуточную таблицу одновременно (фрагментация может произойти). Этап два загружает данные из промежуточной таблицы в окончательную таблицу. Второй этап выполняет INSERT INTO... ОПЕРАЦИЯ SELECT WITH (TABLOCK). В следующей таблице показано поведение блокировки в конечной таблице и поведение ведения журнала при использовании режима добавления:

Тип таблицы Многофакторная транзакция
Режим (-m)
Таблица пуста Поддерживается параллелизм Ведение журнала
Куча Да Да Да Минимальные
Куча Да No Да Минимальные
Куча No Да Нет Минимальные
Куча No No No Минимальные
Cl Да Да Нет Минимальные
Cl Да No Да Полностью
Cl No Да Нет Минимальные
Cl No No Да Полностью

В приведенной выше таблице показана загрузка dwloader с помощью режима добавления в кучу или кластеризованную таблицу (CI), с несколькими транзакциями и загрузка в пустую таблицу или непустую таблицу. Поведение блокировки и ведения журнала каждой такой комбинации нагрузки отображается в таблице. Например, этап загрузки (2-го) с режимом добавления в кластеризованный индекс без много транзакционного режима и в пустую таблицу будет иметь PDW создать монопольную блокировку таблицы и ведение журнала минимально. Это означает, что клиент не сможет загружать (2-й) этап и запрашивать одновременно в пустую таблицу. Однако при загрузке с той же конфигурацией в непустую таблицу PDW не будет выдавать монопольную блокировку таблицы и параллелизма. К сожалению, происходит полное ведение журнала, замедление процесса.

Примеры

А. Пример простого dwloader

В следующем примере показан запуск загрузчика только с выбранными необходимыми параметрами. Другие параметры взяты из глобального файла конфигурации loadparamfile.txt.

Пример использования проверки подлинности SQL Server.

--Load over Ethernet  
dwloader.exe -S 10.192.63.148 -U mylogin -P 123jkl -f /configfiles/loadparamfile.txt  
  
--Load over InfiniBand to appliance named MyPDW  
dwloader.exe -S MyPDW-SQLCTL01 -U mylogin -P 123jkl -f /configfiles/loadparamfile.txt  

Тот же пример с помощью проверки подлинности Windows.

--Load over Ethernet  
dwloader.exe -S 10.192.63.148 -W -f /configfiles/loadparamfile.txt  
  
--Load over InfiniBand to appliance named MyPDW  
dwloader.exe -S MyPDW-SQLCTL01 -W -f /configfiles/loadparamfile.txt  

Пример использования аргументов для исходного файла и файла ошибок.

--Load over Ethernet  
dwloader.exe -U mylogin -P 123jkl -S 10.192.63.148  -i C:\SQLData\AWDimEmployees.csv -T AdventureWorksPDW2012.dbo.DimEmployees -R C:\SQLData\LoadErrors  

B. Загрузка данных в таблицу AdventureWorks

Следующий пример является частью пакетного скрипта, который загружает данные в AdventureWorksPDW2012. Чтобы просмотреть полный скрипт, откройте файл aw_create.bat, который поставляется с пакетом установки AdventureWorksPDW2012 .

Следующий фрагмент скрипта использует dwloader для загрузки данных в таблицы DimAccount и DimCurrency. Этот сценарий использует адрес Ethernet. Если бы он использовал InfiniBand, сервер будет <appliance_name>-SQLCTL01.

set server=10.193.63.134  
set user=<MyUser>  
set password=<password>  
  
set schema=AdventureWorksPDW2012.dbo  
set load="C:\Program Files\Microsoft SQL Server Parallel Data Warehouse\100\dwloader.exe"  
set mode=reload  
  
--Loads data into the AdventureWorksPDW2012.dbo.DimAccount table  
--Source data is stored in the file DimAccount.txt,   
--which is in the current directory.  
  
set t1=DimAccount  
%load% -S %server% -E -M %mode% -e Utf16 -i .\%t1%.txt -T %schema%.%t1% -R %t1%.bad -t "|" -r \r\n -U %user% -P %password%   
  
--Loads data from the DimCurrency.txt file into  
--AdventureWorksPDW2012.dbo.DimCurrency  
set t1=DimCurrency  
%load% -S %server% -E -M %mode% -e Utf16 -i .\%t1%.txt -T %schema%.%t1% -R %t1%.bad -t "|" -r \r\n -U %user% -P %password%  

Ниже приведен DDL для таблицы DimAccount.

CREATE TABLE DimAccount(  
AccountKey int NOT NULL,  
ParentAccountKey int,  
AccountCodeAlternateKey int,  
ParentAccountCodeAlternateKey int,  
AccountDescription nvarchar(50),  
AccountType nvarchar(50),  
Operator nvarchar(50),  
CustomMembers nvarchar(300),  
ValueType nvarchar(50),  
CustomMemberOptions nvarchar(200))  
with (CLUSTERED INDEX(AccountKey),  
DISTRIBUTION = REPLICATE);  

Ниже приведен пример файла данных, DimAccount.txt, который содержит данные для загрузки в таблицу DimAccount.

--Sample of data in the DimAccount.txt load file.  
  
1||1||Balance Sheet||~||Currency|  
2|1|10|1|Assets|Assets|+||Currency|  
3|2|110|10|Current Assets|Assets|+||Currency|  
4|3|1110|110|Cash|Assets|+||Currency|  
5|3|1120|110|Receivables|Assets|+||Currency|  
6|5|1130|1120|Trade Receivables|Assets|+||Currency|  
7|5|1140|1120|Other Receivables|Assets|+||Currency|  
8|3|1150|110|Allowance for Bad Debt|Assets|+||Currency|  
9|3|1160|110|Inventory|Assets|+||Currency|  
10|9|1162|1160|Raw Materials|Assets|+||Currency|  
11|9|1164|1160|Work in Process|Assets|+||Currency|  
12|9|1166|1160|Finished Goods|Assets|+||Currency|  
13|3|1170|110|Deferred Taxes|Assets|+||Currency|  

В. Загрузка данных из командной строки

Скрипт в примере B можно заменить, введя все параметры в командной строке, как показано в следующем примере.

C:\Program Files\Microsoft SQL Server Parallel Data Warehouse\100\dwloader.exe -S <Control node IP> -E -M reload -e UTF16 -i .\DimAccount.txt -T AdventureWorksPDW2012.dbo.DimAccount -R DimAccount.bad -t "|" -r \r\n -U <login> -P <password>  

Описание параметров командной строки:

  • C:\Program Files\Microsoft SQL Server Parallel Data Warehouse\100\dwloader.exe — это установленное расположение dwloader.exe.

  • -S следует IP-адрес узла control.

  • -E указывает, чтобы загрузить пустые строки в виде NULL.

  • -M reload указывает, чтобы усечь целевую таблицу перед вставками исходных данных.

  • -e UTF16 указывает, что исходный файл использует маленький тип кодировки символов.

  • -i .\DimAccount.txt указывает, что данные находятся в файле с именем DimAccount.txt, который существует в текущем каталоге.

  • -T AdventureWorksPDW2012.dbo.DimAccount указывает 3-часть таблицы для получения данных.

  • -R DimAccount.bad указывает строки, которые не будут загружены в файл с именем DimAccount.bad.

  • -t "|" указывает, что поля во входном файле DimAccount.txt разделены символом канала.

  • -r \r\n указывает каждую строку в DimAccount.txt заканчивается возвратом каретки и символом канала строки.

  • -U <login_name> -P <password указывает имя входа и пароль> для имени входа, имеющего разрешения на загрузку.