병렬 데이터 웨어하우스용 dwloader 명령줄 로더
dwloader는 테이블 행을 대량으로 기존 테이블에 로드하는 PDW(병렬 데이터 웨어하우스) 명령줄 도구입니다. 행을 로드할 때 테이블 끝에 모든 행을 추가하거나(추가 모드 또는 fastappend 모드) 새 행을 추가하고 기존 행을 업데이트하거나(upsert 모드) 로드하기 전에 모든 기존 행을 삭제한 다음, 모든 행을 빈 테이블에 삽입(다시 로드 모드)할 수 있습니다.
데이터 로드 프로세스
원본 데이터를 준비합니다.
고유한 ETL 프로세스를 사용하여 로드하려는 원본 데이터를 만듭니다. 원본 데이터의 형식은 대상 테이블의 스키마와 일치하도록 지정되어야 합니다. 원본 데이터를 하나 이상의 텍스트 파일에 저장하고 로딩 서버의 동일한 디렉터리에 텍스트 파일을 복사합니다. 로딩 서버에 대한 자세한 내용은 로딩 서버 획득 및 구성을 참조하세요.
로딩 옵션을 준비합니다.
사용할 로딩 옵션을 결정합니다. 구성 파일에 로드 옵션을 저장합니다. 구성 파일을 로딩 서버의 로컬 위치에 복사합니다. 이 항목에서는 dwloader 구성 옵션에 대해 설명합니다.
로드 실패 옵션을 준비합니다.
로드에 실패한 행을 dwloader에서 처리하는 방법을 결정합니다. 로드를 수행하기 위해 dwloader는 먼저 데이터를 준비 테이블에 로드한 다음, 데이터를 대상 테이블로 전송합니다. 로더는 데이터를 준비 테이블에 로드할 때 로드에 실패한 행 수를 추적합니다. 예를 들어 형식이 올바르게 지정되지 않은 행은 로드되지 않습니다. 실패한 행은 거부 파일에 복사됩니다. 기본적으로 다른 거부 임계값을 지정하지 않으면 첫 번째 거부 후에 로드가 중단됩니다.
dwloader를 설치합니다.
아직 설치되지 않은 경우 로딩 서버에 dwloader를 설치합니다.
dwloader를 실행합니다.
로딩 서버에 로그인하고 적절한 명령줄 옵션을 사용하여 실행 파일 dwloader.exe를 실행합니다.
결과를 확인합니다.
실패한 행 파일(-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 password
SQL Server 인증 login_name 암호입니다.
-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는 <appliance-name>-SQLCTL01로 지정됩니다. 이 명명된 연결을 구성하려면 InfiniBand 네트워크 어댑터 구성을 참조하세요.
이더넷 연결의 경우 target_appliance는 제어 노드 클러스터의 IP 주소입니다.
생략하면 dwloader는 기본적으로 dwloader가 설치되었을 때 지정된 값으로 설정됩니다.
-T target_database_name.[schema].table_name
대상 테이블의 세 부분으로 구성된 이름입니다.
-I source_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\*
-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 파일의 경우 NULL은 구분 기호를 연속적으로 배치하여 표시됩니다. 예를 들어 파이프로 구분된 파일("|")에서 NULL은 "||"로 표시됩니다. 쉼표로 분리된 파일에서 NULL은 ",,"로 표시됩니다. 또한 -E(--emptyStringAsNull) 옵션을 지정해야 합니다. -E에 대한 자세한 내용은 아래를 참조하세요.
-e character_encoding
데이터 파일에서 로드할 데이터의 문자 인코딩 형식을 지정합니다. 옵션은 ASCII(기본값), UTF8, UTF16 또는 UTF16BE가 있습니다. 여기서 UTF16은 little endian이고 UTF16BE big endian입니다. 이러한 옵션은 대/소문자를 구분하지 않습니다.
-t field_delimiter
행의 각 필드(열)에 대한 구분 기호입니다. 필드 구분 기호는 이러한 ASCII 이스케이프 문자 또는 ASCII 16진수 값 중 하나 이상입니다.
속성 | 이스케이프 문자 | 16진수 문자 |
---|---|---|
탭 | \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(줄 바꿈) 또는 탭 문자를 구분 기호로 지정하려면 이스케이프 문자(\r, \n, \t) 또는 해당 16진수 값(0x, 0d, 09)을 사용할 수 있습니다. 다른 특수 문자를 구분 기호로 지정하려면 해당 16진수 값을 사용합니다.
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 *) 또는 16진수 값(예: 큰따옴표의 경우 -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'과 SaleID='Towels1356'이 있습니다.
고정 너비 모드에서 선행 및 후행 공백 또는 데이터 형식 변환을 처리하는 방법에 대한 자세한 내용은 dwloader에 대한 데이터 형식 변환 규칙을 참조하세요.
-e character_encoding
데이터 파일에서 로드할 데이터의 문자 인코딩 형식을 지정합니다. 옵션은 ASCII(기본값), UTF8, UTF16 또는 UTF16BE가 있습니다. 여기서 UTF16은 little endian이고 UTF16BE big endian입니다. 이러한 옵션은 대/소문자를 구분하지 않습니다.
고정 너비 열은 -e가 UTF8인 경우 지원되지 않습니다.
-r row_delimiter
원본 데이터 파일의 각 행에 대한 구분 기호입니다. 행 구분 기호는 하나 이상의 ASCII 값입니다.
CR(캐리지 리턴), LF(줄 바꿈) 또는 탭 문자를 구분 기호로 지정하려면 이스케이프 문자(\r, \n, \t) 또는 해당 16진수 값(0x, 0d, 09)을 사용할 수 있습니다. 다른 특수 문자를 구분 기호로 지정하려면 해당 16진수 값을 사용합니다.
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
데이터 형식 datetime 및 smalldatetime의 열에 ydm으로 형식이 지정된 입력만 로드할 수 있습니다. ydm 값을 datetime2, date 또는 datetimeoffset 데이터 형식의 열에 로드할 수 없습니다.
mdy
mdy는 <월><공백><일><쉼표><연>을 허용합니다.
1975년 1월 1일에 대한 mdy 입력 데이터의 예:
January 1, 1975
Jan 01, 75
Jan/1/75
01011975
myd
2010년 3월 4일에 대한 입력 파일 예제: 03-2010-04, 3/2010/4
dym
2010년 3월 4일에 대한 입력 파일 예제: 04-2010-03, 4/2010/3
custom_date_format
custom_date_format은 사용자 지정 날짜 형식(예: MM/dd/yyyy)이며 이전 버전과의 호환성을 위해서만 포함됩니다. dwloader는 사용자 지정 날짜 형식을 적용하지 않습니다. 대신 사용자 지정 날짜 형식을 지정하면 dwloader가 ymd, ydm, mdy, myd, dym 또는 dmy의 해당 설정으로 변환합니다.
예를 들어 -D MM/dd/yyyy를 지정하는 경우 dwloader는 모든 날짜 입력을 월, 일, 연(mdy)으로 정렬해야 합니다. 사용자 지정 날짜 형식에 지정된 대로 2자 월, 2자리 일 및 4자리 연도를 적용하지 않습니다. 날짜 형식이 -D MM/dd/yyyy인 경우 입력 파일에서 날짜 형식을 지정할 수 있는 방법의 몇 가지 예는 다음과 같습니다. 01/02/2013, Jan.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에는 다중 트랜잭션(-m) 옵션이 필요합니다. fastappend를 사용할 때 준비 데이터베이스를 지정할 수 없습니다. fastappend가 있는 롤백은 없습니다. 즉, 실패하거나 중단된 로드에서 복구는 사용자 고유의 로드 프로세스에 의해 처리되어야 합니다.
upsert -K merge_column [ ,...n ]
로더는 SQL Server Merge 문을 사용하여 기존 행을 업데이트하고 새 행을 삽입합니다.
-K 옵션은 병합을 기반으로 하는 열을 지정합니다. 이러한 열은 고유한 행을 나타내야 하는 병합 키를 형성합니다. 대상 테이블에 병합 키가 있으면 행이 업데이트됩니다. 대상 테이블에 병합 키가 없으면 행이 추가됩니다.
해시 분산 테이블의 경우 병합 키는 배포 열이거나 포함해야 합니다.
복제된 테이블의 경우 병합 키는 하나 이상의 열 조합입니다. 이러한 열은 애플리케이션의 요구에 따라 지정됩니다.
여러 열은 공백 없이 쉼표로 구분하거나 공백으로 쉼표로 구분하고 작은따옴표로 묶어야 합니다.
원본 테이블의 두 행에 병합 키 값이 일치하는 경우 해당 행은 동일해야 합니다.
reload
로더는 원본 데이터를 삽입하기 전에 대상 테이블을 자릅니다.
-b batchsize
Microsoft 지원에서만 사용하도록 권장되는 batchsize는 DMS가 컴퓨팅 노드의 SQL Server 인스턴스에 수행하는 대량 복사에 대한 SQL Server 배치 크기입니다. batchsize를 지정하면 SQL Server PDW는 각 로드에 대해 동적으로 계산되는 배치 로드 크기를 재정의합니다.
SQL Server 2012 PDW부터 제어 노드는 기본적으로 각 로드에 대한 배치 크기를 동적으로 계산합니다. 이 자동 계산은 메모리 크기, 대상 테이블 형식, 대상 테이블 스키마, 로드 형식, 파일 크기 및 사용자의 리소스 클래스와 같은 여러 매개 변수를 기반으로 합니다.
예를 들어 로드 모드가 FASTAPPEND이고 테이블에 클러스터형 columnstore 인덱스가 있는 경우 SQL Server PDW는 기본적으로 1,048,576의 배치 크기를 사용하려고 시도하므로 행 그룹이 닫히고 델타 저장소를 거치지 않고 columnstore로 직접 로드됩니다. 메모리가 1,048,576의 배치 크기를 허용하지 않는 경우 dwloader는 더 작은 batchsize를 선택합니다.
로드 형식이 FASTAPPEND인 경우 batchsize는 테이블에 데이터를 로드하는 데 적용되고 그렇지 않으면 batchsize는 준비 테이블에 데이터를 로드하는 데 적용됩니다.
<reject_options>
로더가 허용하는 로드 오류 수를 결정하는 옵션을 지정합니다. 로드 오류가 임계값을 초과하면 로더가 중지되고 행이 커밋되지 않습니다.
-rt { value | percentage }
-rv reject_value 옵션의 -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
대상 어플라이언스에서 신뢰할 수 있는 기관의 유효한 SQL Server PDW 인증서가 있는지 확인합니다. 이를 사용하여 데이터가 공격자에 의해 하이재킹되지 않고 권한이 없는 위치로 전송되지 않도록 할 수 있습니다. 인증서는 어플라이언스에 이미 설치되어 있어야 합니다. 인증서를 설치하는 유일한 지원 방법은 어플라이언스 관리자가 Configuration Manager 도구를 사용하여 인증서를 설치하는 것입니다. 어플라이언스 관리자에게 어플라이언스에 신뢰할 수 있는 인증서가 설치되어 있는지 여부를 확인합니다.
-se
빈 파일 로드를 건너뜁니다. 또한 압축 해제된 빈 gzip 파일을 건너뜁니다.
-l
CU7.4 업데이트에서 사용할 수 있으며 로드할 수 있는 최대 행 길이(바이트)를 지정합니다. 유효한 값은 32768에서 33554432 사이의 정수입니다. 클라이언트 및 서버에 더 많은 메모리를 할당하므로 큰 행(32KB 초과)을 로드해야 하는 경우에만 사용합니다.
반환 코드 값
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 옵션)에 지정된 매개 변수를 명령줄 매개 변수로 지정하여 재정의할 수 있습니다.
로더의 여러 인스턴스를 동시에 실행할 수 있습니다. 최대 로더 인스턴스 수는 미리 구성되어 있으며 변경할 수 없습니다.
로드된 데이터에는 원본 위치보다 어플라이언스 공간이 많거나 적게 필요할 수 있습니다. 데이터의 하위 집합을 사용하여 테스트 가져오기를 수행하여 디스크 사용량을 예측할 수 있습니다.
dwloader는 트랜잭션 프로세스이며 실패 시 정상적으로 롤백되지만 대량 로드가 성공적으로 완료되면 롤백할 수 없습니다. 활성 dwloader 프로세스를 취소하려면 CTRL+C를 입력합니다.
제한 사항
동시에 발생하는 모든 로드의 총 크기는 데이터베이스의 LOG_SIZE보다 작아야 하며 모든 동시 로드의 총 크기가 LOG_SIZE의 50% 미만인 것이 좋습니다. 이 크기 제한을 달성하기 위해 큰 로드를 여러 배치로 분할할 수 있습니다. LOG_SIZE에 대한 자세한 내용은 CREATE DATABASE를 참조하세요.
하나의 로드 명령으로 여러 파일을 로드하는 경우 거부된 모든 행이 동일한 거부 파일에 기록됩니다. 거부 파일에는 거부된 각 행이 포함된 입력 파일이 표시되지 않습니다.
빈 문자열은 구분 기호로 사용하면 안 됩니다. 빈 문자열을 행 구분 기호로 사용하면 로드가 실패합니다. 열 구분 기호로 사용되는 경우 로드는 구분 기호를 무시하고 기본값 "|"를 열 구분 기호로 계속 사용합니다. 문자열 구분 기호로 사용하면 빈 문자열이 무시되고 기본 동작이 적용됩니다.
잠금 동작
dwloader 잠금 동작은 load_mode_option에 따라 달라집니다.
추가 - 추가는 권장되며 가장 일반적인 옵션입니다. 추가는 준비 테이블에 데이터를 로드합니다. 잠금은 아래에 자세히 설명되어 있습니다.
빠른 추가 - Fast-append는 ExclusiveUpdate 테이블 잠금을 사용하여 최종 테이블에 직접 로드되며 준비 테이블을 사용하지 않는 유일한 모드입니다.
다시 로드 - 다시 로드는 데이터를 준비 테이블에 로드하고 준비 테이블과 최종 테이블 모두에서 배타적 잠금이 필요합니다. 동시 작업에는 다시 로드하지 않는 것이 좋습니다.
upsert - upsert는 준비 테이블에 데이터를 로드한 다음, 준비 테이블에서 최종 테이블로 병합 작업을 수행합니다. upsert는 최종 테이블에서 배타적 잠금이 필요하지 않습니다. upsert를 사용하는 경우 성능이 달라질 수 있습니다. 사용자 환경에서 동작을 테스트합니다.
잠금 동작
추가 모드 잠금
추가는 다중 트랜잭션 모드(-m 인수 사용)에서 실행할 수 있지만 트랜잭션이 안전하지는 않습니다. 따라서 -m 인수를 사용하지 않고 트랜잭션 작업으로 추가를 사용해야 합니다. 그러나 최종 INSERT-SELECT 작업 중에 트랜잭션 모드는 현재 다중 트랜잭션 모드보다 약 6배 느립니다.
추가 모드는 두 단계로 데이터를 로드합니다. 1단계는 원본 파일의 데이터를 준비 테이블로 동시에 로드합니다(조각이 발생할 수 있음). 2단계는 준비 테이블에서 최종 테이블로 데이터를 로드합니다. 두 번째 단계에서는 INSERT INTO...SELECT WITH (TABLOCK) 작업을 수행합니다. 다음 표에서는 최종 테이블의 잠금 동작과 추가 모드를 사용할 때의 로깅 동작을 보여 줍니다.
테이블 형식 | 다중 트랜잭션 모드(-m) |
테이블이 비어 있음 | 지원되는 동시성 | 로깅 |
---|---|---|---|---|
힙 | 예 | 예 | 예 | 최소 |
힙 | 예 | 없음 | 예 | 최소 |
힙 | 예 | 네 | 아니요 | 최소 |
힙 | 아니요 | 아니요 | 아니요 | 최소 |
Cl | 예 | 네 | 아니요 | 최소 |
Cl | 예 | 없음 | 예 | 전체 |
Cl | 예 | 네 | 아니요 | 최소 |
Cl | 아니요 | 아니요 | 예 | 전체 |
위의 표에서는 다중 트랜잭션 플래그를 사용하거나 사용하지 않고 힙 또는 CI(클러스터형 인덱스) 테이블에 로드하고 빈 테이블 또는 비어있지 않은 테이블로 로드하는 추가 모드를 사용하는 dwloader를 보여 줍니다. 이러한 각 로드 조합의 잠금 및 로깅 동작이 테이블에 표시됩니다. 예를 들어 다중 트랜잭션 모드가 없는 클러스터형 인덱스와 빈 테이블에 추가 모드를 사용하여 (2번째) 단계를 로드하면 PDW가 테이블에 배타적 잠금을 생성하고 로깅이 최소화됩니다. 즉, 고객은 (2번째) 단계를 로드하고 빈 테이블에 동시에 쿼리할 수 없습니다. 그러나 동일한 구성을 사용하여 비어 있지 않은 테이블에 로드하는 경우 PDW는 테이블에 대한 배타적 잠금을 실행하지 않으며 동시성이 가능합니다. 아쉽게도 전체 로깅이 발생하여 프로세스가 느려집니다.
예제
A. 간단한 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에 데이터를 로드하는 배치 스크립트의 일부입니다. 전체 스크립트를 보려면 AdventureWorksPDW2012 설치 패키지와 함께 제공되는 aw_create.bat 파일을 엽니다.
다음 스크립트 조각은 dwloader를 사용하여 DimAccount 및 DimCurrency 테이블에 데이터를 로드합니다. 이 스크립트는 이더넷 주소를 사용합니다. InfiniBand를 사용하는 경우 서버는 <appliance_name>-SQLCTL01
이 됩니다.
set server=10.193.63.134
set user=<MyUser>
set password=<MyPassword>
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%
다음은 DimAccount 테이블에 대한 DDL입니다.
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 테이블에 로드할 데이터를 포함하는 데이터 파일 DimAccount.txt의 예제입니다.
--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|
C. 명령줄에서 데이터 로드
다음 예제와 같이 명령줄에 모든 매개 변수를 입력하여 예제 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 다시 로드는 원본 데이터를 삽입하기 전에 대상 테이블을 자릅니다.
-e UTF16은 원본 파일이 little endian 문자 인코딩 형식을 사용한다는 것을 나타냅니다.
-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 <암호>는 로드를 수행할 수 있는 권한이 있는 로그인의 로그인 및 암호를 지정합니다.