CREATE EXTERNAL FILE FORMAT(Transact-SQL)CREATE EXTERNAL FILE FORMAT (Transact-SQL)

적용 대상: 예SQL Server(2016부터) 아니요Azure SQL Database 예Azure SQL Data Warehouse 예병렬 데이터 웨어하우스 APPLIES TO: yesSQL Server (starting with 2016) noAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Hadoop, Azure Blob Storage, 또는 Azure Data Lake Store에 저장된 외부 데이터를 정의하는 외부 파일 형식 개체를 만듭니다.Creates an External File Format object defining external data stored in Hadoop, Azure Blob Storage, or Azure Data Lake Store. 외부 파일 형식 만들기는 외부 테이블을 만들기 위한 필수 구성 요소입니다.Creating an external file format is a prerequisite for creating an External Table. 외부 파일 형식을 만들어 외부 테이블에서 참조하는 데이터의 실제 레이아웃을 지정하게 됩니다.By creating an External File Format, you specify the actual layout of the data referenced by an external table.

PolyBase는 다음 파일 형식을 지원합니다.PolyBase supports the following file formats:

  • 구분 기호로 분리된 텍스트Delimited Text

  • Hive RCFileHive RCFile

  • Hive ORCHive ORC

  • ParquetParquet

외부 테이블을 만들려면 CREATE EXTERNAL TABLE (Transact-SQL)을 참조하세요.To create an External Table, see CREATE EXTERNAL TABLE (Transact-SQL).

항목 링크 아이콘 Transact-SQL 구문 규칙Topic link icon Transact-SQL Syntax Conventions

구문Syntax

-- Create an external file format for PARQUET files.  
CREATE EXTERNAL FILE FORMAT file_format_name  
WITH (  
    FORMAT_TYPE = PARQUET  
     [ , DATA_COMPRESSION = {  
        'org.apache.hadoop.io.compress.SnappyCodec'  
      | 'org.apache.hadoop.io.compress.GzipCodec'      }  
    ]);  
  
--Create an external file format for ORC files.  
CREATE EXTERNAL FILE FORMAT file_format_name  
WITH (  
    FORMAT_TYPE = ORC  
     [ , DATA_COMPRESSION = {  
        'org.apache.hadoop.io.compress.SnappyCodec'  
      | 'org.apache.hadoop.io.compress.DefaultCodec'      }  
    ]);  
  
--Create an external file format for RCFILE.  
CREATE EXTERNAL FILE FORMAT file_format_name  
WITH (  
    FORMAT_TYPE = RCFILE,  
    SERDE_METHOD = {  
        'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe'  
      | 'org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe'  
    }  
    [ , DATA_COMPRESSION = 'org.apache.hadoop.io.compress.DefaultCodec' ]);  
  
--Create an external file format for DELIMITED TEXT files.  
CREATE EXTERNAL FILE FORMAT file_format_name  
WITH (  
    FORMAT_TYPE = DELIMITEDTEXT  
    [ , FORMAT_OPTIONS ( <format_options> [ ,...n  ] ) ]  
    [ , DATA_COMPRESSION = {  
           'org.apache.hadoop.io.compress.GzipCodec'  
         | 'org.apache.hadoop.io.compress.DefaultCodec'  
        }  
     ]);  
  
<format_options> ::=  
{  
    FIELD_TERMINATOR = field_terminator  
    | STRING_DELIMITER = string_delimiter 
    | First_Row = integer -- ONLY AVAILABLE SQL DW
    | DATE_FORMAT = datetime_format  
    | USE_TYPE_DEFAULT = { TRUE | FALSE } 
    | Encoding = {'UTF8' | 'UTF16'} 
}  

인수Arguments

file_format_namefile_format_name
외부 파일 형식의 이름을 지정합니다.Specifies a name for the external file format.

FORMAT_TYPE = [ PARQUET | ORC | RCFILE | DELIMITEDTEXT] 외부 데이터 형식을 지정합니다.FORMAT_TYPE = [ PARQUET | ORC | RCFILE | DELIMITEDTEXT] Specifies the format of the external data.

  • PARQUET Parquet 형식을 지정합니다.PARQUET Specifies a Parquet format.

  • ORCORC
    ORC(최적화된 행 열 형식) 형식을 지정합니다.Specifies an Optimized Row Columnar (ORC) format. 이 옵션에는 버전 이상 0.11 외부 Hadoop 클러스터에서 하이브가 필요합니다.This option requires Hive version 0.11 or higher on the external Hadoop cluster. Hadoop에서는 ORC 파일 형식이RCFILE 파일 형식보다 압축과 성능이 더 낫습니다.In Hadoop, the ORC file format offers better compression and performance than the RCFILE file format.

  • RCFILE(SERDE_METHOD = SERDE_method와 함께) RcFile(Record Columnar file) 형식을 지정합니다.RCFILE (in combination with SERDE_METHOD = SERDE_method) Specifies a Record Columnar file format (RcFile). 이 옵션을 사용하려면 Hive 직렬 변환기와 역직렬화 변환기(SerDe) 메서드를 지정해야 합니다.This option requires you to specify a Hive Serializer and Deserializer (SerDe) method. Hadoop에서 Hive/HiveQL을 사용하여 RC 파일을 쿼리할 때도 요구 사항은 같습니다.This requirement is the same if you use Hive/HiveQL in Hadoop to query RC files. SerDe 메서드는 대소문자를 구분합니다.Note, the SerDe method is case-sensitive.

PolyBase가 지원하는 두 SerDe 메서드를 사용하여 RCFile을 지정하는 예제입니다.Examples of specifying RCFile with the two SerDe methods that PolyBase supports.

-   <span data-ttu-id="3fb58-128">FORMAT_TYPE = RCFILE, SERDE_METHOD = 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe'</span><span class="sxs-lookup"><span data-stu-id="3fb58-128">FORMAT_TYPE = RCFILE, SERDE_METHOD = 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe'</span></span>

-   <span data-ttu-id="3fb58-129">FORMAT_TYPE = RCFILE, SERDE_METHOD = 'org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe'</span><span class="sxs-lookup"><span data-stu-id="3fb58-129">FORMAT_TYPE = RCFILE, SERDE_METHOD = 'org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe'</span></span>
  • DELIMITEDTEXT 필드 종결자라고도 하는 열 구분 기호가 있는 텍스트 형식을 만듭니다. DELIMITEDTEXT Specifies a text format with column delimiters, also called field terminators.

FIELD_TERMINATOR = field_terminatorFIELD_TERMINATOR = field_terminator
구분 기호로 분리된 텍스트 파일에만 적용됩니다.Applies only to delimited text files. 필드 종결자는 구분 기호로 분리된 텍스트 파일의 각 필드(열)의 끝을 표시하는 하나 이상의 문자를 지정합니다.The field terminator specifies one or more characters that mark the end of each field (column) in the text-delimited file. 기본값은 파이프 문자 ꞌ|ꞌ입니다.The default is the pipe character ꞌ|ꞌ. 지원 보장을 위해 하나 이상의 ASCII 문자를 사용하는 것이 좋습니다.For guaranteed support, we recommend using one or more ascii characters.

예:Examples:

  • FIELD_TERMINATOR = '|'FIELD_TERMINATOR = '|'

  • FIELD_TERMINATOR = ' 'FIELD_TERMINATOR = ' '

  • FIELD_TERMINATOR = ꞌ\tꞌFIELD_TERMINATOR = ꞌ\tꞌ

  • FIELD_TERMINATOR = '~|~'FIELD_TERMINATOR = '~|~'

STRING_DELIMITER = string_delimiterSTRING_DELIMITER = string_delimiter
구분 기호로 분리된 텍스트 파일에 형식 문자열의 데이터에 대한 필드 종결자를 지정합니다.Specifies the field terminator for data of type string in the text-delimited file. 문자열 구분 기호는 길이가 한 자 이상이며 작은따옴표로 묶입니다.The string delimiter is one or more characters in length and is enclosed with single quotes. 기본값은 빈 문자열 ""입니다.The default is the empty string "". 지원 보장을 위해 하나 이상의 ASCII 문자를 사용하는 것이 좋습니다.For guaranteed support, we recommend using one or more ascii characters.

예:Examples:

  • STRING_DELIMITER = '"'STRING_DELIMITER = '"'

  • STRING_DELIMITER = '0x22' -- 큰따옴표의 16진수STRING_DELIMITER = '0x22' -- Double quote hex

  • STRING_DELIMITER = '*'STRING_DELIMITER = '*'

  • STRING_DELIMITER = ꞌ,ꞌSTRING_DELIMITER = ꞌ,ꞌ

  • STRING_DELIMITER = '0x7E0x7E' -- 물결표 두 개(예: ~~)STRING_DELIMITER = '0x7E0x7E' -- Two tildes (for example, ~~)

FIRST_ROW = First_row_intFIRST_ROW = First_row_int
PolyBase 로드 중에 모든 파일에서 첫 번째로 읽을 행 번호를 지정합니다.Specifies the row number that is read first in all files during a PolyBase load. 이 매개 변수 값은 1-15를 사용할 수 있습니다.This parameter can take values 1-15. 값이 2로 설정되면 데이터를 로드할 때 모든 파일의 첫 행(헤더 행)을 건너뜁니다.If the value is set to two, the first row in every file (header row) is skipped when the data is loaded. 행은 행 종결자(/r/n, /r, /n)의 존재를 기준으로 건너뜁니다.Rows are skipped based on the existence of row terminators (/r/n, /r, /n). 내보내기에 대해 이 옵션을 사용하면 데이터 손실 없이 파일을 읽을 수 있도록 하기 위해 데이터 행이 추가됩니다.When this option is used for export, rows are added to the data to make sure the file can be read with no data loss. 2 미만으로 값을 설정하면 내보낸 첫 행이 외부 테이블의 열 이름이 됩니다.If the value is set to >2, the first row exported is the Column names of the external table.

DATE_FORMAT = datetime_formatDATE_FORMAT = datetime_format
구분 기호로 분리된 텍스트 파일에 표시될 수 있는 모든 날짜 및 시간 데이터에 대한 사용자 지정 형식을 지정합니다.Specifies a custom format for all date and time data that might appear in a delimited text file. 원본 파일이 기본 날짜/시간 형식을 사용할 경우 이 옵션이 필요하지 않습니다.If the source file uses default datetime formats, this option isn't necessary. 파일당 하나의 사용자 지정 날짜/시간 형식이 허용됩니다.Only one custom datetime format is allowed per file. 한 파일에 대해 여러 사용자 지정 날짜/시간 형식을 지정할 수 없습니다.You can't specify more than one custom datetime formats per file. 그러나 외부 테이블 정의에서 각각의 형식이 해당 데이터 형식에 대한 기본 형식인 경우 여러 날짜/시간 형식을 사용할 수 있습니다.However, you can use more than one datetime formats if each one is the default format for its respective data type in the external table definition.

PolyBase는 데이터를 가져오기 위해서만 사용자 지정 날짜 형식을 사용합니다.PolyBase only uses the custom date format for importing the data. 외부 파일에 데이터를 쓰는 데는 사용자 지정 형식을 사용하지 않습니다.It doesn't use the custom format for writing data to an external file.

DATE_FORMAT을 지정하지 않았거나 빈 문자열인 경우 PolyBase는 다음 기본 형식을 사용합니다.When DATE_FORMAT isn't specified or is the empty string, PolyBase uses the following default formats:

  • DateTime: 'yyyy-MM-dd HH:mm:ss'DateTime: 'yyyy-MM-dd HH:mm:ss'

  • SmallDateTime: 'yyyy-MM-dd HH:mm'SmallDateTime: 'yyyy-MM-dd HH:mm'

  • Date: 'yyyy-MM-dd'Date: 'yyyy-MM-dd'

  • DateTime2: 'yyyy-MM-dd HH:mm:ss'DateTime2: 'yyyy-MM-dd HH:mm:ss'

  • DateTimeOffset: 'yyyy-MM-dd HH:mm:ss'DateTimeOffset: 'yyyy-MM-dd HH:mm:ss'

  • 시간: 'HH:mm:ss'Time: 'HH:mm:ss'

날짜 형식 예는 다음 표에 있습니다.Example date formats are in the following table:

테이블 관련 참고 사항Notes about the table:

  • 연도, 월, 일의 형식과 순서는 다양합니다.Year, month, and day can have a variety of formats and orders. 이 표는 ymd 형식만 나타냅니다.The table shows only the ymd format. 월은 1-2자리 숫자 또는 3자 문자가 될 수 있습니다.Month can have one or two digits, or three characters. 일은 1-2자리 숫자가 될 수 있습니다.Day can have one or two digits. 연도는 2-4자리 숫자가 될 수 있습니다.Year can have two or four digits.

  • 밀리초(fffffff)는 필요하지 않습니다.Milliseconds (fffffff) are not required.

  • Am, pm(tt)은 필요하지 않습니다.Am, pm (tt) isn't required. 기본값은 AM입니다.The default is AM.

날짜 형식Date Type 예제Example 설명Description
DateTimeDateTime DATE_FORMAT = 'yyyy-MM-dd HH:mm:ss.fff'DATE_FORMAT = 'yyyy-MM-dd HH:mm:ss.fff' 이 날짜 형식은 연도, 월, 일 외에도 00-24시간, 00-59분, 00-59초, 3자리 밀리초를 포함합니다.In addition to year, month and day, this date format includes 00-24 hours, 00-59 minutes, 00-59 seconds, and 3 digits for milliseconds.
DateTimeDateTime DATE_FORMAT = 'yyyy-MM-dd hh:mm:ss.ffftt'DATE_FORMAT = 'yyyy-MM-dd hh:mm:ss.ffftt' 이 날짜 형식은 연도, 월, 일 외에도 00-12시간, 00-59분, 00-59초, 3자리 밀리초와, AM, am, PM, 또는 pm을 포함합니다.In addition to year, month and day, this date format includes 00-12 hours, 00-59 minutes, 00-59 seconds, 3 digits for milliseconds, and AM, am, PM, or pm.
SmallDateTimeSmallDateTime DATE_FORMAT = 'yyyy-MM-dd HH:mm'DATE_FORMAT = 'yyyy-MM-dd HH:mm' 이 날짜 형식은 연도, 월, 일 외에도 00-23시간, 00-59분을 포함합니다.In addition to year, month, and day, this date format includes 00-23 hours, 00-59 minutes.
SmallDateTimeSmallDateTime DATE_FORMAT = 'yyyy-MM-dd hh:mmtt'DATE_FORMAT = 'yyyy-MM-dd hh:mmtt' 이 날짜 형식은 연도, 월, 일 외에도 00-11시간 및 00-59분(초 없음)과, AM, am, PM 또는 pm을 포함합니다.In addition to year, month, and day, this date format includes 00-11 hours, 00-59 minutes, no seconds, and AM, am, PM, or pm.
dateDate DATE_FORMAT = 'yyyy-MM-dd'DATE_FORMAT = 'yyyy-MM-dd' 연도, 월, 일.Year, month, and day. 시간 요소가 포함되지 않습니다.No time element is included.
dateDate DATE_FORMAT = 'yyyy-MMM-dd'DATE_FORMAT = 'yyyy-MMM-dd' 연도, 월, 일.Year, month, and day. 월을 3M으로 지정하면 입력 값은 Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov 또는 Dec 문자열 중 하나입니다.When month is specified with 3 M's, the input value is one or the strings Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, or Dec.
datetime2DateTime2 DATE_FORMAT = 'yyyy-MM-dd HH:mm:ss.fffffff'DATE_FORMAT = 'yyyy-MM-dd HH:mm:ss.fffffff' 이 날짜 형식은 연도, 월, 일 외에도 00-23시간, 00-59분, 00-59초, 7자리 밀리초를 포함합니다.In addition to year, month, and day, this date format includes 00-23 hours, 00-59 minutes, 00-59 seconds, and 7 digits for milliseconds.
datetime2DateTime2 DATE_FORMAT = 'yyyy-MM-dd hh:mm:ss.ffffffftt'DATE_FORMAT = 'yyyy-MM-dd hh:mm:ss.ffffffftt' 이 날짜 형식은 연도, 월, 일 외에도 00-11시간, 00-59분, 00-59초, 7자리 밀리초와, AM, am, PM, 또는 pm을 포함합니다.In addition to year, month, and day, this date format includes 00-11 hours, 00-59 minutes, 00-59 seconds, 7 digits for milliseconds, and AM, am, PM, or pm.
DateTimeOffsetDateTimeOffset DATE_FORMAT = 'yyyy-MM-dd HH:mm:ss.fffffff zzz'DATE_FORMAT = 'yyyy-MM-dd HH:mm:ss.fffffff zzz' 이 날짜 형식은 연도, 월, 일 외에도 00-23시간, 00-59분, 00-59초, 7자리 밀리초와, 입력 파일에 {+&#124;-}HH:ss로 입력한 시간대 오프셋을 포함합니다. In addition to year, month, and day, this date format includes 00-23 hours, 00-59 minutes, 00-59 seconds, and 7 digits for milliseconds, and the timezone offset which you put in the input file as {+&#124;-}HH:ss. 예를 들어, 일광절약시간이 적용되지 않은 로스엔젤레스는 UTC보다 8시간 늦으므로 입력 파일에서 -08:00 값으로 로스엔젤레스의 시간대를 지정합니다.For example, since Los Angeles time without daylight savings is 8 hours behind UTC, a value of -08:00 in the input file specifies the timezone for Los Angeles.
DateTimeOffsetDateTimeOffset DATE_FORMAT = 'yyyy-MM-dd hh:mm:ss.ffffffftt zzz'DATE_FORMAT = 'yyyy-MM-dd hh:mm:ss.ffffffftt zzz' 이 날짜 형식은 연도, 월, 일 외에도 00-11시간, 00-59분, 00-59초, 7자리 밀리초, (AM, am, PM, 또는 pm) 및 시간대 오프셋을 포함합니다.In addition to year, month, and day, this date format includes 00-11 hours, 00-59 minutes, 00-59 seconds, 7 digits for milliseconds, (AM, am, PM, or pm), and the timezone offset. 이전 행의 설명을 참조하세요.See the description in the previous row.
TimeTime DATE_FORMAT = 'HH:mm:ss'DATE_FORMAT = 'HH:mm:ss' 날짜 값이 없고 00-23시간, 00-59분, 00-59초만 있습니다.There is no date value, only 00-23 hours, 00-59 minutes, and 00-59 seconds.

지원되는 모든 날짜 형식:All supported date formats:

DATETIMEdatetime smalldatetimesmalldatetime 날짜date Datetime2datetime2 datetimeoffsetdatetimeoffset
[M[M]]M-[d]d-[yy]yy HH:mm:ss[.fff][M[M]]M-[d]d-[yy]yy HH:mm:ss[.fff] [M[M]]M-[d]d-[yy]yy HH:mm[:00][M[M]]M-[d]d-[yy]yy HH:mm[:00] [M[M]]M-[d]d-[yy]yy[M[M]]M-[d]d-[yy]yy [M[M]]M-[d]d-[yy]yy HH:mm:ss[.fffffff][M[M]]M-[d]d-[yy]yy HH:mm:ss[.fffffff] [M[M]]M-[d]d-[yy]yy HH:mm:ss[.fffffff] zzz[M[M]]M-[d]d-[yy]yy HH:mm:ss[.fffffff] zzz
[M[M]]M-[d]d-[yy]yy hh:mm:ss[.fff][tt][M[M]]M-[d]d-[yy]yy hh:mm:ss[.fff][tt] [M[M]]M-[d]d-[yy]yy hh:mm[:00][tt][M[M]]M-[d]d-[yy]yy hh:mm[:00][tt] [M[M]]M-[d]d-[yy]yy hh:mm:ss[.fffffff][tt][M[M]]M-[d]d-[yy]yy hh:mm:ss[.fffffff][tt] [M[M]]M-[d]d-[yy]yy hh:mm:ss[.fffffff][tt] zzz[M[M]]M-[d]d-[yy]yy hh:mm:ss[.fffffff][tt] zzz
[M[M]]M-[yy]yy-[d]d HH:mm:ss[.fff][M[M]]M-[yy]yy-[d]d HH:mm:ss[.fff] [M[M]]M-[yy]yy-[d]d HH:mm[:00][M[M]]M-[yy]yy-[d]d HH:mm[:00] [M[M]]M-[yy]yy-[d]d[M[M]]M-[yy]yy-[d]d [M[M]]M-[yy]yy-[d]d HH:mm:ss[.fffffff][M[M]]M-[yy]yy-[d]d HH:mm:ss[.fffffff] [M[M]]M-[yy]yy-[d]d HH:mm:ss[.fffffff] zzz[M[M]]M-[yy]yy-[d]d HH:mm:ss[.fffffff] zzz
[M[M]]M-[yy]yy-[d]d hh:mm:ss[.fff][tt][M[M]]M-[yy]yy-[d]d hh:mm:ss[.fff][tt] [M[M]]M-[yy]yy-[d]d hh:mm[:00][tt][M[M]]M-[yy]yy-[d]d hh:mm[:00][tt] [M[M]]M-[yy]yy-[d]d hh:mm:ss[.fffffff][tt][M[M]]M-[yy]yy-[d]d hh:mm:ss[.fffffff][tt] [M[M]]M-[yy]yy-[d]d hh:mm:ss[.fffffff][tt] zzz[M[M]]M-[yy]yy-[d]d hh:mm:ss[.fffffff][tt] zzz
[yy]yy-[M[M]]M-[d]d HH:mm:ss[.fff][yy]yy-[M[M]]M-[d]d HH:mm:ss[.fff] [yy]yy-[M[M]]M-[d]d HH:mm[:00][yy]yy-[M[M]]M-[d]d HH:mm[:00] [yy]yy-[M[M]]M-[d]d[yy]yy-[M[M]]M-[d]d [yy]yy-[M[M]]M-[d]d HH:mm:ss[.fffffff][yy]yy-[M[M]]M-[d]d HH:mm:ss[.fffffff] [yy]yy-[M[M]]M-[d]d HH:mm:ss[.fffffff] zzz[yy]yy-[M[M]]M-[d]d HH:mm:ss[.fffffff] zzz
[yy]yy-[M[M]]M-[d]d hh:mm:ss[.fff][tt][yy]yy-[M[M]]M-[d]d hh:mm:ss[.fff][tt] [yy]yy-[M[M]]M-[d]d hh:mm[:00][tt][yy]yy-[M[M]]M-[d]d hh:mm[:00][tt] [yy]yy-[M[M]]M-[d]d hh:mm:ss[.fffffff][tt][yy]yy-[M[M]]M-[d]d hh:mm:ss[.fffffff][tt] [yy]yy-[M[M]]M-[d]d hh:mm:ss[.fffffff][tt] zzz[yy]yy-[M[M]]M-[d]d hh:mm:ss[.fffffff][tt] zzz
[yy]yy-[d]d-[M[M]]M HH:mm:ss[.fff][yy]yy-[d]d-[M[M]]M HH:mm:ss[.fff] [yy]yy-[d]d-[M[M]]M HH:mm[:00][yy]yy-[d]d-[M[M]]M HH:mm[:00] [yy]yy-[d]d-[M[M]]M[yy]yy-[d]d-[M[M]]M [yy]yy-[d]d-[M[M]]M HH:mm:ss[.fffffff][yy]yy-[d]d-[M[M]]M HH:mm:ss[.fffffff] [yy]yy-[d]d-[M[M]]M HH:mm:ss[.fffffff] zzz[yy]yy-[d]d-[M[M]]M HH:mm:ss[.fffffff] zzz
[yy]yy-[d]d-[M[M]]M hh:mm:ss[.fff][tt][yy]yy-[d]d-[M[M]]M hh:mm:ss[.fff][tt] [yy]yy-[d]d-[M[M]]M hh:mm[:00][tt][yy]yy-[d]d-[M[M]]M hh:mm[:00][tt] [yy]yy-[d]d-[M[M]]M hh:mm:ss[.fffffff][tt][yy]yy-[d]d-[M[M]]M hh:mm:ss[.fffffff][tt] [yy]yy-[d]d-[M[M]]M hh:mm:ss[.fffffff][tt] zzz[yy]yy-[d]d-[M[M]]M hh:mm:ss[.fffffff][tt] zzz
[d]d-[M[M]]M-[yy]yy HH:mm:ss[.fff][d]d-[M[M]]M-[yy]yy HH:mm:ss[.fff] [d]d-[M[M]]M-[yy]yy HH:mm[:00][d]d-[M[M]]M-[yy]yy HH:mm[:00] [d]d-[M[M]]M-[yy]yy[d]d-[M[M]]M-[yy]yy [d]d-[M[M]]M-[yy]yy HH:mm:ss[.fffffff][d]d-[M[M]]M-[yy]yy HH:mm:ss[.fffffff] [d]d-[M[M]]M-[yy]yy HH:mm:ss[.fffffff] zzz[d]d-[M[M]]M-[yy]yy HH:mm:ss[.fffffff] zzz
[d]d-[M[M]]M-[yy]yy hh:mm:ss[.fff][tt][d]d-[M[M]]M-[yy]yy hh:mm:ss[.fff][tt] [d]d-[M[M]]M-[yy]yy hh:mm[:00][tt][d]d-[M[M]]M-[yy]yy hh:mm[:00][tt] [d]d-[M[M]]M-[yy]yy hh:mm:ss[.fffffff][tt][d]d-[M[M]]M-[yy]yy hh:mm:ss[.fffffff][tt] [d]d-[M[M]]M-[yy]yy hh:mm:ss[.fffffff][tt] zzz[d]d-[M[M]]M-[yy]yy hh:mm:ss[.fffffff][tt] zzz
[d]d-[yy]yy-[M[M]]M HH:mm:ss[.fff][d]d-[yy]yy-[M[M]]M HH:mm:ss[.fff] [d]d-[yy]yy-[M[M]]M HH:mm[:00][d]d-[yy]yy-[M[M]]M HH:mm[:00] [d]d-[yy]yy-[M[M]]M[d]d-[yy]yy-[M[M]]M [d]d-[yy]yy-[M[M]]M HH:mm:ss[.fffffff][d]d-[yy]yy-[M[M]]M HH:mm:ss[.fffffff] [d]d-[yy]yy-[M[M]]M HH:mm:ss[.fffffff] zzz[d]d-[yy]yy-[M[M]]M HH:mm:ss[.fffffff] zzz
[d]d-[yy]yy-[M[M]]M hh:mm:ss[.fff][tt][d]d-[yy]yy-[M[M]]M hh:mm:ss[.fff][tt] [d]d-[yy]yy-[M[M]]M hh:mm[:00][tt][d]d-[yy]yy-[M[M]]M hh:mm[:00][tt] [d]d-[yy]yy-[M[M]]M hh:mm:ss[.fffffff][tt][d]d-[yy]yy-[M[M]]M hh:mm:ss[.fffffff][tt] [d]d-[yy]yy-[M[M]]M hh:mm:ss[.fffffff][tt] zzz[d]d-[yy]yy-[M[M]]M hh:mm:ss[.fffffff][tt] zzz

상세 정보:Details:

  • 월, 일 및 연도 값을 구분하려면 '-', '/' 또는 '.'를 사용할 수 있습니다.To separate month, day and year values, you can use '-', '/', or '.'. 간단히 하기 위해 테이블에서는 '-' 구분 기호만 사용합니다.For simplicity, the table uses only the ' - ' separator.

  • 월을 텍스트로 지정하려면 3자 이상의 문자를 사용합니다.To specify the month as text, use three or more characters. 한두 자로 지정한 문자는 숫자로 해석합니다.Months with one or two characters are interpreted as a number.

  • 시간 값을 구분하기 위해 ':' 기호를 사용합니다.To separate time values, use the ':' symbol.

  • 대괄호 안에 있는 문자는 선택 사항입니다.Letters enclosed in square brackets are optional.

  • 'tt' 문자는 [AM|PM|am|pm]을 지정합니다.The letters 'tt' designate [AM|PM|am|pm]. 기본값은 AM입니다.AM is the default. 'tt'를 지정한 경우 시간 값(hh)은 0-12 범위여야 합니다.When 'tt' is specified, the hour value (hh) must be in the range of 0 to 12.

  • 'zzz' 문자는 {+|-}HH:ss] 형식으로 시스템의 현재 시간대에 대한 시간대 오프셋을 지정합니다.The letters 'zzz' designate the time zone offset for the system's current time zone in the format {+|-}HH:ss].

USE_TYPE_DEFAULT = { TRUE | FALSE }USE_TYPE_DEFAULT = { TRUE | FALSE }
PolyBase는 구분 기호로 분리된 텍스트 파일에서 데이터를 검색 하는 경우 분리 된 텍스트 파일에서 누락 값을 처리 하는 방법을 지정 합니다.Specifies how to handle missing values in delimited text files when PolyBase retrieves data from the text file.

TRUETRUE
텍스트 파일에서 데이터를 검색할 때 외부 테이블 정의에서 해당하는 열의 데이터 형식에 대한 기본값을 사용하여 누락된 각 값을 저장합니다.When retrieving data from the text file, store each missing value by using the default value for the data type of the corresponding column in the external table definition. 예를 들어, 누락된 값을 다음으로 바꿉니다.For example, replace a missing value with:

  • 열이 숫자 열로 정의되었으면 00 if the column is defined as a numeric column. 10진수 열은 지원되지 않으며 오류가 발생합니다.Decimal columns are not supported and will error.

  • 열이 문자열이면 빈 문자열 "" Empty string "" if the column is a string column.

  • 열이 날짜 열이면 1900-01-011900-01-01 if the column is a date column.

FALSEFALSE
모든 누락 값을 NULL로 저장합니다.Store all missing values as NULL. 구분 기호로 분리된 텍스트 파일에서 NULL이라는 단어를 사용하여 저장된 모든 NULL 값은 문자열 'NULL'로 가져옵니다.Any NULL values that are stored by using the word NULL in the delimited text file are imported as the string 'NULL'.

Encoding = {'UTF8' | 'UTF16'}Encoding = {'UTF8' | 'UTF16'}
Azure SQL Data Warehouse에서 PolyBase은 UTF8 및 UTF16-LE로 인코딩된 구분 기호로 분리된 텍스트 파일을 읽을 수 있습니다.In Azure SQL Data Warehouse, PolyBase can read UTF8 and UTF16-LE encoded delimited text files. SQL Server 및 PDW에서는 PolyBase가 UTF16 인코딩 파일 읽기를 지원하지 않습니다.In SQL Server and PDW, PolyBase doesn't support reading UTF16 encoded files.

DATA_COMPRESSION = data_compression_methodDATA_COMPRESSION = data_compression_method
외부 파일의 데이터에 대한 데이터 압축 메서드를 지정합니다.Specifies the data compression method for the external data. DATA_COMPRESSION을 지정하지 않은 경우 압축되지 않는 데이터가 기본값입니다.When DATA_COMPRESSION isn't specified, the default is uncompressed data. 제대로 작동하려면 Gzip 압축 파일에 ".gz" 파일 확장명이 있어야 합니다.To work properly, Gzip compressed files must have the ".gz" file extension.

DELIMITEDTEXT 형식 유형은 다음과 같은 압축 메서드를 지원합니다.The DELIMITEDTEXT format type supports these compression methods:

  • DATA COMPRESSION = 'org.apache.hadoop.io.compress.DefaultCodec'DATA COMPRESSION = 'org.apache.hadoop.io.compress.DefaultCodec'

  • DATA COMPRESSION = 'org.apache.hadoop.io.compress.GzipCodec'DATA COMPRESSION = 'org.apache.hadoop.io.compress.GzipCodec'

RCFILE 형식 유형은 다음 압축 메서드를 지원합니다.The RCFILE format type supports this compression method:

  • DATA COMPRESSION = 'org.apache.hadoop.io.compress.DefaultCodec'DATA COMPRESSION = 'org.apache.hadoop.io.compress.DefaultCodec'

ORC 파일 형식 유형은 다음 압축 메서드를 지원합니다.The ORC file format type supports these compression methods:

  • DATA COMPRESSION = 'org.apache.hadoop.io.compress.DefaultCodec'DATA COMPRESSION = 'org.apache.hadoop.io.compress.DefaultCodec'

  • DATA COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'DATA COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'

PARQUET 파일 형식 유형은 다음 압축 메서드를 지원합니다.The PARQUET file format type supports the following compression methods:

  • DATA COMPRESSION = 'org.apache.hadoop.io.compress.GzipCodec'DATA COMPRESSION = 'org.apache.hadoop.io.compress.GzipCodec'

  • DATA COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'DATA COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'

사용 권한Permissions

ALTER ANY EXTERNAL FILE FORMAT 권한이 필요합니다.Requires ALTER ANY EXTERNAL FILE FORMAT permission.

일반적인 주의 사항General Remarks

외부 파일 형식은 SQL ServerSQL ServerSQL 데이터 웨어하우스SQL Data Warehouse의 데이터베이스 범위입니다.The external file format is database-scoped in SQL ServerSQL Server and SQL 데이터 웨어하우스SQL Data Warehouse. 병렬 데이터 웨어하우스Parallel Data Warehouse에서는 서버 범위입니다.It is server-scoped in 병렬 데이터 웨어하우스Parallel Data Warehouse.

형식 옵션은 모두 선택 사항이며 구분 기호로 분리된 텍스트 파일에만 적용됩니다.The format options are all optional and only apply to delimited text files.

데이터가 압축된 형식 중 하나로 저장될 때 PolyBase는 데이터 레코드를 반환하기 전에 먼저 데이터의 압축을 풉니다.When the data is stored in one of the compressed formats, PolyBase first decompresses the data before returning the data records.

제한 사항Limitations and Restrictions

구분 기호로 분리된 텍스트 파일의 행 구분 기호는 Hadoop의 LineRecordReader에서 지원되어야 합니다.The row delimiter in delimited-text files must be supported by Hadoop's LineRecordReader. 즉 '\r', '\n' 또는 '\r\n'이어야 합니다.That is, it must be either '\r', '\n', or '\r\n'. 이러한 구분 기호는 사용자가 구성할 수 없습니다.These delimiters are not user-configurable.

지원되는 SerDe 메서드와 RCFile 조합 및 지원되는 데이터 압축 메서드 목록은 이 문서의 앞 부분에 있습니다.The combinations of supported SerDe methods with RCFiles, and the supported data compression methods are listed previously in this article. 일부 조합은 지원되지 않습니다.Not all combinations are supported.

동시 PolyBase 쿼리의 최대 수는 32개입니다.The maximum number of concurrent PolyBase queries is 32. 32개 쿼리가 동시에 실행되면 각 쿼리가 외부 파일 위치에서 최대 33,000개의 파일을 읽을 수 있습니다.When 32 concurrent queries are running, each query can read a maximum of 33,000 files from the external file location. 루트 폴더 및 각 하위 폴더도 한 파일로 계산됩니다.The root folder and each subfolder also count as a file. 동시성 수준이 32 미만이면 외부 파일 위치에 33,000개 이상의 파일이 있을 수 있습니다.If the degree of concurrency is less than 32, the external file location can contain more than 33,000 files.

외부 테이블의 파일 수 제한 때문에 외부 파일 위치의 루트 및 하위 폴더에는 30,000개 미만의 파일을 저장하는 것이 좋습니다.Because of the limitation on number of files in the external table, we recommend storing less than 30,000 files in the root and subfolders of the external file location. 또한 루트 디렉터리 하의 하위 폴더 수는 적게 유지하는 것이 좋습니다.Also, we recommend keeping the number of subfolders under the root directory to a small number. 너무 많은 파일이 참조되면 Java Virtual Machine 메모리 부족 예외가 발생할 수 있습니다.When too many files are referenced, a Java Virtual Machine out-of-memory exception might occur.

PolyBase를 통해 데이터를 Hadoop 또는 Azure Blob Storage로 내보낼 때 CREATE EXTERNAL TABLE 명령에서 정의된 열 이름(메타데이터)이 아닌 데이터만 내보내집니다.When exporting data to Hadoop or Azure Blob Storage via PolyBase, only the data is exported, not the column names(metadata) as defined in the CREATE EXTERNAL TABLE command.

잠금Locking

EXTERNAL FILE FORMAT 개체에 대해 공유 잠금을 적용합니다.Takes a shared lock on the EXTERNAL FILE FORMAT object.

성능Performance

압축 파일을 사용할 때는 항상 외부 데이터 원본과 SQL Server 간에 전송되는 데이터가 더 적다는 점과, 데이터 압축 및 압축 풀기를 위한 CPU 사용량이 증대한다는 점 사이의 상호 절충이 따릅니다.Using compressed files always comes with the tradeoff between transferring less data between the external data source and SQL Server while increasing the CPU usage to compress and decompress the data.

Gzip 압축 텍스트 파일은 분할할 수 없습니다.Gzip compressed text files are not splittable. Gzip 압축 텍스트 파일의 성능을 높이기 위해 외부 데이터 원본 내에서 모두 동일한 디렉터리에 저장되는 여러 파일을 생성하는 ㄱ서이 좋습니다.To improve performance for Gzip compressed text files, we recommend generating multiple files that are all stored in the same directory within the external data source. 이 파일 구조를 통해 PolyBase가 여러 Reader 및 압축 풀기 프로세스를 사용하여 데이터를 더 빠르게 읽고 압축을 풀 수 있습니다.This file structure allows PolyBase to read and decompress the data faster by using multiple reader and decompression processes. 이상적인 압축 파일의 수는 컴퓨팅 노드당 최대 데이터 Reader 프로세스 수입니다.The ideal number of compressed files is the maximum number of data reader processes per compute node. SQL ServerSQL Server병렬 데이터 웨어하우스Parallel Data Warehouse에서 최대 데이터 Reader 프로세스 수는 노드당 20개 Reader에 해당하는 Azure SQL Data Warehouse Gen2를 제외하고 노드당 8개입니다.In SQL ServerSQL Server and 병렬 데이터 웨어하우스Parallel Data Warehouse, the maximum number of data reader processes is 8 per node except Azure SQL Data Warehouse Gen2 which is 20 readers per node. SQL 데이터 웨어하우스SQL Data Warehouse에서 노드당 최대 데이터 Reader 프로세서 수는 SLO마다 다릅니다.In SQL 데이터 웨어하우스SQL Data Warehouse, the maximum number of data reader processes per node varies by SLO. 자세한 내용은 Azure SQL Data Warehouse 로드 패턴 및 전략을 참조하세요.See Azure SQL Data Warehouse loading patterns and strategies for details.

Examples

1.A. DELIMITEDTEXT 외부 파일 형식 만들기Create a DELIMITEDTEXT external file format

이 예제에서는 구분 기호로 분리된 텍스트 파일에 대해 이름이 textdelimited1인 외부 파일 형식을 만듭니다.This example creates an external file format named textdelimited1 for a text-delimited file. FORMAT_OPTIONS에 대해 나열된 옵션은 파일의 필드가 파이프 문자 '|'를 사용하여 구분되어야 함을 지정합니다.The options listed for FORMAT_OPTIONS specify that the fields in the file should be separated using a pipe character '|'. 또한 텍스트 파일은 Gzip 코덱을 사용하여 압축됩니다.The text file is also compressed with the Gzip codec. DATA_COMPRESSION을 지정하지 않은 경우 텍스트 파일이 압축되지 않습니다.If DATA_COMPRESSION isn't specified, the text file is uncompressed.

구분 기호로 분리된 텍스트 파일의 경우 데이터 압축 메서드는 기본 코덱 'org.apache.hadoop.io.compress.DefaultCodec’ 또는 Gzip 코덱 'org.apache.hadoop.io.compress.GzipCodec'이 될 수 있습니다.For a delimited text file, the data compression method can either be the default Codec, 'org.apache.hadoop.io.compress.DefaultCodec', or the Gzip Codec, 'org.apache.hadoop.io.compress.GzipCodec'.

CREATE EXTERNAL FILE FORMAT textdelimited1  
WITH (  
    FORMAT_TYPE = DELIMITEDTEXT,  
    FORMAT_OPTIONS (  
        FIELD_TERMINATOR = '|',  
        DATE_FORMAT = 'MM/dd/yyyy' ),  
    DATA_COMPRESSION = 'org.apache.hadoop.io.compress.GzipCodec'
);  

2.B. RCFile 외부 파일 형식 만들기Create an RCFile external file format

이 예제에서는 직렬화/역직렬화 메서드org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe를 사용하는 RCFile에 대한 외부 파일 형식을 만듭니다.This example creates an external file format for a RCFile that uses the serialization/deserialization method org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe. 데이터 압축 메서드에 기본 코덱을 사용하도록 지정합니다.It also specifies to use the Default Codec for the data compression method. DATA_COMPRESSION을 지정하지 않은 경우 압축되지 않는 것이 기본값입니다.If DATA_COMPRESSION isn't specified, the default is no compression.

CREATE EXTERNAL FILE FORMAT rcfile1  
WITH (  
    FORMAT_TYPE = RCFILE,  
    SERDE_METHOD = 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe',  
    DATA_COMPRESSION = 'org.apache.hadoop.io.compress.DefaultCodec'  
);  

C.C. ORC 외부 파일 형식 만들기Create an ORC external file format

이 예제에서는 org.apache.io.compress.SnappyCodec 압축 메서드를 사용하여 데이터를 압축하는 ORC 파일에 대한 외부 파일 형식을 만듭니다.This example creates an external file format for an ORC file that compresses the data with the org.apache.io.compress.SnappyCodec data compression method. DATA_COMPRESSION을 지정하지 않은 경우 압축되지 않는 것이 기본값입니다.If DATA_COMPRESSION isn't specified, the default is no compression.

CREATE EXTERNAL FILE FORMAT orcfile1  
WITH (  
    FORMAT_TYPE = ORC,  
    DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'  
);  

D.D. PARQUET 외부 파일 형식 만들기Create a PARQUET external file format

이 예제에서는 org.apache.io.compress.SnappyCodec 압축 메서드를 사용하여 데이터를 압축하는 Parquet 파일에 대한 외부 파일 형식을 만듭니다.This example creates an external file format for a Parquet file that compresses the data with the org.apache.io.compress.SnappyCodec data compression method. DATA_COMPRESSION을 지정하지 않은 경우 압축되지 않는 것이 기본값입니다.If DATA_COMPRESSION isn't specified, the default is no compression.

CREATE EXTERNAL FILE FORMAT parquetfile1  
WITH (  
    FORMAT_TYPE = PARQUET,  
    DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'  
);  

E.E. 헤더 행을 건너뛰는 구분 기호로 분리된 텍스트 파일 만들기(Azure SQL DW만 해당)Create a Delimited Text File Skipping Header Row (Azure SQL DW Only)

이 예제에서는 단일 헤더 행이 있는 CSV 파일에 대한 외부 파일 형식을 만듭니다.This example creates an external file format for CSV file with a single header row.

CREATE EXTERNAL FILE FORMAT skipHeader_CSV
WITH (FORMAT_TYPE = DELIMITEDTEXT,
      FORMAT_OPTIONS(
          FIELD_TERMINATOR = ',',
          STRING_DELIMITER = '"',
          FIRST_ROW = 2, 
          USE_TYPE_DEFAULT = True)
)

참고 항목See Also

CREATE EXTERNAL DATA SOURCE(Transact-SQL) CREATE EXTERNAL DATA SOURCE (Transact-SQL)
CREATE EXTERNAL TABLE(Transact-SQL) CREATE EXTERNAL TABLE (Transact-SQL)
CREATE EXTERNAL TABLE AS SELECT (Transact-SQL) CREATE EXTERNAL TABLE AS SELECT (Transact-SQL)
CREATE TABLE AS SELECT(Azure SQL Data Warehouse) CREATE TABLE AS SELECT (Azure SQL Data Warehouse)
sys.external_file_formats(Transact-SQL)sys.external_file_formats (Transact-SQL)