Загрузчик командной строки 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
Отображает краткую справку по использованию загрузчика. Справка отображается только если не указаны другие параметры командной строки.

-Ulogin_name
Действительная учетная запись SQL Server для проверки подлинности с соответствующими разрешениями для выполнения загрузки.

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

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

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

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

Примеры:

rt=percentage

rv=25

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Все файлы будут объединены и загружены как один файл, а отклонённые строки будут помещены в единый файл отклонённых строк.

Примеры:

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

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

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

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

  • -i \\loadserver\loads\daily\*

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

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

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

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

-echaracter_encoding
Указывает тип кодировки символов для загрузки данных из файла данных. Допустимые значения: ASCII (по умолчанию), UTF8, UTF16 или UTF16BE, где UTF16 использует порядок байтов little-endian, а UTF16BE — порядок байтов big-endian. Эти параметры являются нечувствительными к регистру.

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

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

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

Примеры:

-t "|"

-t ' '

-t 0x0a

-t \t

-t '~|~'

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

Чтобы указать возврат каретки (CR), перевод строки (LF) или символ табуляции в качестве разделителя, можно использовать управляющие последовательности (\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.

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

Примеры:

-s *

-s 0x22

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

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

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

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

имя_столбца=число_символов

column_name=num_chars

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

SalesCode=3

SalesID=10

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

230Shirts0056

320Towels1356

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

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

-echaracter_encoding
Указывает тип кодировки символов для загрузки данных из файла данных. Допустимые значения: ASCII (по умолчанию), UTF8, UTF16 или UTF16BE, где UTF16 использует порядок байтов little-endian, а UTF16BE — порядок байтов big-endian. Эти параметры являются нечувствительными к регистру.

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

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

Чтобы указать возврат каретки (CR), перевод строки (LF) или символ табуляции в качестве разделителя, можно использовать управляющие последовательности (\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

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

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

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

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

Примеры:

LastReceiptDate=ymd

ModifiedDate=dym

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-rsreject_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 необязателен для добавления, перезагрузки и вставки или обновления.

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

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

Следует запускать Loader из папки, в которую он был установлен. Исполняемый файл 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 и является единственным режимом, в котором не используется промежуточная таблица.

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

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

Поведение блокировки

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

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

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

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

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

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

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

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

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

  • -T AdventureWorksPDW2012.dbo.DimAccount указывает трехчастное имя таблицы, в которую будут загружены данные.

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

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

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

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