CREATE TABLE(Azure SQL Data Warehouse)CREATE TABLE (Azure SQL Data Warehouse)

적용 대상:Applies to: 예Azure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics 예병렬 데이터 웨어하우스Parallel Data Warehouseyes병렬 데이터 웨어하우스Parallel Data Warehouse적용 대상:Applies to: 예Azure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics 예병렬 데이터 웨어하우스Parallel Data Warehouseyes병렬 데이터 웨어하우스Parallel Data Warehouse

SQL Data WarehouseSQL Data Warehouse 또는 병렬 데이터 웨어하우스Parallel Data Warehouse에서 새 테이블을 만듭니다.Creates a new table in SQL Data WarehouseSQL Data Warehouse or 병렬 데이터 웨어하우스Parallel Data Warehouse.

테이블 및 사용 방법을 이해하려면 SQL Data Warehouse의 테이블을 참조하세요.To understand tables and how to use them, see Tables in SQL Data Warehouse.

참고

이 문서에서 SQL Data Warehouse에 대한 토론은 다른 언급이 없는 경우 SQL Data Warehouse 및 병렬 데이터 웨어하우스 모두에 적용됩니다.Discussions about SQL Data Warehouse in this article apply to both SQL Data Warehouse and Parallel Data Warehouse unless otherwise noted.

문서 링크 아이콘 Transact-SQL 구문 규칙Article link icon Transact-SQL Syntax Conventions

구문Syntax

-- Create a new table.
CREATE TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( 
      { column_name <data_type>  [ <column_options> ] } [ ,...n ]
    )  
    [ WITH ( <table_option> [ ,...n ] ) ]  
[;]  

<column_options> ::=
    [ COLLATE Windows_collation_name ]  
    [ NULL | NOT NULL ] -- default is NULL  
    [ <column_constraint> ]

<column_constraint>::=
    {
        DEFAULT DEFAULT constant_expression
        | PRIMARY KEY NONCLUSTERED  NOT ENFORCED -- Applies to Azure Synapse Analytics only
        | UNIQUE NOT ENFORCED -- Applies to Azure Synapse Analytics only
    }

<table_option> ::=
    {
       CLUSTERED COLUMNSTORE INDEX --default for SQL Data Warehouse 
      | CLUSTERED COLUMNSTORE INDEX ORDER (column [,...n])  
      | HEAP --default for Parallel Data Warehouse
      | CLUSTERED INDEX ( { index_column_name [ ASC | DESC ] } [ ,...n ] ) -- default is ASC
    }  
    {
        DISTRIBUTION = HASH ( distribution_column_name )
      | DISTRIBUTION = ROUND_ROBIN -- default for SQL Data Warehouse
      | DISTRIBUTION = REPLICATE -- default for Parallel Data Warehouse
    }
    | PARTITION ( partition_column_name RANGE [ LEFT | RIGHT ] -- default is LEFT  
        FOR VALUES ( [ boundary_value [,...n] ] ) )

<data type> ::=
      datetimeoffset [ ( n ) ]  
    | datetime2 [ ( n ) ]  
    | datetime  
    | smalldatetime  
    | date  
    | time [ ( n ) ]  
    | float [ ( n ) ]  
    | real [ ( n ) ]  
    | decimal [ ( precision [ , scale ] ) ]   
    | numeric [ ( precision [ , scale ] ) ]   
    | money  
    | smallmoney  
    | bigint  
    | int   
    | smallint  
    | tinyint  
    | bit  
    | nvarchar [ ( n | max ) ]  -- max applies only to SQL Data Warehouse 
    | nchar [ ( n ) ]  
    | varchar [ ( n | max )  ] -- max applies only to SQL Data Warehouse  
    | char [ ( n ) ]  
    | varbinary [ ( n | max ) ] -- max applies only to SQL Data Warehouse  
    | binary [ ( n ) ]  
    | uniqueidentifier  

인수Arguments

database_namedatabase_name
새 테이블을 포함할 데이터베이스의 이름입니다.The name of the database that will contain the new table. 기본값은 현재 데이터베이스입니다.The default is the current database.

schema_nameschema_name
테이블의 스키마입니다.The schema for the table. schema 지정은 선택 사항입니다.Specifying schema is optional. 공백이면 기본 스키마가 사용됩니다.If blank, the default schema will be used.

table_nametable_name
새 테이블의 이름입니다.The name of the new table. 로컬 임시 테이블을 만들려면 테이블 이름 앞에 #을 붙입니다.To create a local temporary table, precede the table name with #. 임시 테이블에 대한 설명 및 지침의 경우 Azure SQL Data Warehouse의 임시 테이블을 참조하세요.For explanations and guidance on temporary tables, see Temporary tables in Azure SQL Data Warehouse.

column_namecolumn_name
테이블 열의 이름입니다.The name of a table column.

열 옵션Column options

COLLATE Windows_collation_nameCOLLATE Windows_collation_name
식에 대한 데이터 정렬을 지정합니다.Specifies the collation for the expression. 데이터 정렬은 SQL ServerSQL Server에서 지원하는 Windows 데이터 정렬 중 하나여야 합니다.The collation must be one of the Windows collations supported by SQL ServerSQL Server. SQL ServerSQL Server에서 지원되는 Windows 데이터 정렬 목록의 경우 Windows 데이터 정렬 이름(Transact-SQL)을 참조하세요.For a list of Windows collations supported by SQL ServerSQL Server, see Windows Collation Name (Transact-SQL)/).

NULL | NOT NULL
열에서 NULL 값이 허용되는지 여부를 지정합니다.Specifies whether NULL values are allowed in the column. 기본값은 NULL입니다.The default is NULL.

[ CONSTRAINT constraint_name ] DEFAULT constant_expression[ CONSTRAINT constraint_name ] DEFAULT constant_expression
기본 열 값을 지정합니다.Specifies the default column value.

인수Argument 설명Explanation
constraint_nameconstraint_name 제약 조건에 대한 선택적 이름입니다.The optional name for the constraint. 제약 조건 이름은 데이터베이스 내에서 고유합니다.The constraint name is unique within the database. 이름은 다른 데이터베이스에서 다시 사용할 수 있습니다.The name can be reused in other databases.
constant_expressionconstant_expression 열의 기본값입니다.The default value for the column. 식은 리터럴 값이거나 상수여야 합니다.The expression must be a literal value or a constant. 예를 들어 'CA', 4와 같은 상수 식이 허용됩니다.For example, these constant expressions are allowed: 'CA', 4. 2+3, CURRENT_TIMESTAMP와 같은 상수 식은 허용되지 않습니다.These constant expressions aren't allowed: 2+3, CURRENT_TIMESTAMP.

테이블 구조 옵션Table structure options

테이블의 형식 선택에 대한 지침은 Azure SQL Data Warehouse의 테이블 인덱싱을 참조하세요.For guidance on choosing the type of table, see Indexing tables in Azure SQL Data Warehouse.

CLUSTERED COLUMNSTORE INDEX

테이블을 클러스터형 columnstore 인덱스로 저장합니다.Stores the table as a clustered columnstore index. 클러스터형 columnstore 인덱스는 모든 테이블 데이터에 적용됩니다.The clustered columnstore index applies to all of the table data. 이 동작은 SQL Data WarehouseSQL Data Warehouse의 기본값입니다.This behavior is the default for SQL Data WarehouseSQL Data Warehouse.

HEAP은 테이블을 힙으로 저장합니다.HEAP Stores the table as a heap. 이 동작은 병렬 데이터 웨어하우스Parallel Data Warehouse의 기본값입니다.This behavior is the default for 병렬 데이터 웨어하우스Parallel Data Warehouse.

CLUSTERED INDEX ( index_column_name [ ,...n ] )CLUSTERED INDEX ( index_column_name [ ,...n ] )
하나 이상의 키 열과 함께 클러스터형 인덱스로 테이블을 저장합니다.Stores the table as a clustered index with one or more key columns. 이 동작은 데이터를 행별로 저장합니다.This behavior stores the data by row. index_column_name을 사용하여 인덱스에 하나 이상의 키 열 이름을 지정할 수 있습니다.Use index_column_name to specify the name of one or more key columns in the index. 자세한 내용은 일반 설명의 Rowstore 테이블을 참조하세요.For more information, see Rowstore Tables in the General Remarks.

LOCATION = USER_DB 이 옵션은 더 이상 사용되지 않습니다.LOCATION = USER_DB This option is deprecated. 구문적으로는 수락되지만 더 이상 필요하지 않으며 동작에 영향을 주지 않습니다.It's syntactically accepted, but no longer required and no longer affects behavior.

테이블 배포 옵션Table distribution options

최상의 배포 방법을 선택하고 분산된 테이블을 사용하는 방법을 알아보려면 Azure SQL Data Warehouse에서 테이블 배포를 참조하세요.To understand how to choose the best distribution method and use distributed tables, see Distributing tables in Azure SQL Data Warehouse.

DISTRIBUTION = HASH( distribution_column_name ) distribution_column_name에 저장된 값을 해시하여 각 행을 하나의 배포에 할당합니다.DISTRIBUTION = HASH ( distribution_column_name ) Assigns each row to one distribution by hashing the value stored in distribution_column_name. 알고리즘은 결정적입니다. 즉, 항상 동일한 값을 동일한 배포에 해시한다는 뜻입니다.The algorithm is deterministic, which means it always hashes the same value to the same distribution. NULL이 있는 모든 행은 동일한 분산에 할당되므로 배포 열은 NOT NULL로 정의되어야 합니다.The distribution column should be defined as NOT NULL because all rows that have NULL are assigned to the same distribution.

DISTRIBUTION = ROUND_ROBIN은 행을 라운드 로빈 방식으로 모든 분산에서 동일하게 배포합니다.DISTRIBUTION = ROUND_ROBIN Distributes the rows evenly across all the distributions in a round-robin fashion. 이 동작은 SQL Data WarehouseSQL Data Warehouse의 기본값입니다.This behavior is the default for SQL Data WarehouseSQL Data Warehouse.

DISTRIBUTION = REPLICATE은 각 컴퓨팅 노드에 테이블의 복사본 하나를 저장합니다.DISTRIBUTION = REPLICATE Stores one copy of the table on each Compute node. SQL Data WarehouseSQL Data Warehouse의 경우 테이블은 각 컴퓨팅 노드에 있는 배포 데이터베이스에 저장됩니다.For SQL Data WarehouseSQL Data Warehouse the table is stored on a distribution database on each Compute node. 병렬 데이터 웨어하우스Parallel Data Warehouse의 경우 테이블은 컴퓨팅 노드에 걸쳐 있는 SQL ServerSQL Server 파일 그룹에 저장됩니다For 병렬 데이터 웨어하우스Parallel Data Warehouse, the table is stored in a SQL ServerSQL Server filegroup that spans the Compute node. 이 동작은 병렬 데이터 웨어하우스Parallel Data Warehouse의 기본값입니다.This behavior is the default for 병렬 데이터 웨어하우스Parallel Data Warehouse.

테이블 파티션 옵션Table partition options

테이블 파티션 사용에 대한 지침은 SQL Data Warehouse의 테이블 분할을 참조하세요.For guidance on using table partitions, see Partitioning tables in SQL Data Warehouse.

PARTITION ( partition_column_name RANGE [ LEFT | RIGHT ] FOR VALUES ( [ boundary_value [,...n] ] ))PARTITION ( partition_column_name RANGE [ LEFT | RIGHT ] FOR VALUES ( [ boundary_value [,...n] ] ))
하나 이상의 테이블 파티션을 만듭니다.Creates one or more table partitions. 이 파티션은 힙, 클러스터형 인덱스 또는 클러스터형 columnstore 인덱스에 테이블을 저장하는지 여부에 관계 없이 행의 하위 집합에 작업을 적용할 수 있도록 하는 가로 테이블 조각입니다.These partitions are horizontal table slices that allow you to apply operations to subsets of rows regardless of whether the table is stored as a heap, clustered index, or clustered columnstore index. 배포 열과 달리 테이블 파티션은 각 행이 저장된 배포를 결정하지 않습니다.Unlike the distribution column, table partitions don't determine the distribution where each row is stored. 대신, 테이블 파티션은 행이 그룹화되고 각 배포 내에 저장되는 방식을 결정합니다.Instead, table partitions determine how the rows are grouped and stored within each distribution.

인수Argument 설명Explanation
partition_column_namepartition_column_name SQL Data WarehouseSQL Data Warehouse가 행을 분할하는 데 사용하는 열을 지정합니다.Specifies the column that SQL Data WarehouseSQL Data Warehouse will use to partition the rows. 이 열은 모든 데이터 형식일 수 있습니다.This column can be any data type. SQL Data WarehouseSQL Data Warehouse는 파티션 열 값을 오름차순으로 정렬합니다.sorts the partition column values in ascending order. 낮음-높은 순서는 LEFT 지정의 RIGHT에서 RANGE로 진행됩니다.The low-to-high ordering goes from LEFT to RIGHT in the RANGE specification.
RANGE LEFT 왼쪽(낮은 값)에서 파티션에 속하는 경계 값을 지정합니다.Specifies the boundary value belongs to the partition on the left (lower values). 기본값은 LEFT입니다.The default is LEFT.
RANGE RIGHT 오른쪽(높은 값)에서 파티션에 속하는 경계 값을 지정합니다.Specifies the boundary value belongs to the partition on the right (higher values).
FOR VALUES ( boundary_value [,...n] )FOR VALUES ( boundary_value [,...n] ) 파티션에 대한 경계 값을 지정합니다.Specifies the boundary values for the partition. boundary_value는 상수 식입니다.boundary_value is a constant expression. NULL일 수 없습니다.It can't be NULL. partition_column_name의 데이터 형식과 일치하거나 암시적으로 변환할 수 있어야 합니다.It must either match or be implicitly convertible to the data type of partition_column_name. 암시적으로 변환하는 동안에는 자를 수 없습니다. 그러면 값의 크기와 배율이 partition_column_name의 데이터 형식과 일치하지 않습니다.It can't be truncated during implicit conversion so that the size and scale of the value don't match the data type of partition_column_name

PARTITION 절은 지정하되 경계 값을 지정하지 않으면 SQL Data WarehouseSQL Data Warehouse는 하나의 파티션으로 분할된 테이블을 만듭니다.If you specify the PARTITION clause, but don't specify a boundary value, SQL Data WarehouseSQL Data Warehouse will create a partitioned table with one partition. 해당하는 경우 나중에 두 개의 파티션으로 테이블을 분할할 수 있습니다.If applicable, you can split the table into two partitions at a later time.

하나의 경계 값을 지정한 경우 결과 테이블은 경계 값보다 낮은 값에 대한 파티션 하나와 경계 값보다 높은 값에 대한 파티션 하나 이렇게 두 개의 파티션을 갖습니다.If you specify one boundary value, the resulting table has two partitions; one for the values lower than the boundary value and one for the values higher than the boundary value. 분할되지 않은 테이블에 파티션을 이동하는 경우 분할되지 않은 테이블은 데이터를 받되 해당 메타데이터의 파티션 경계는 없습니다.If you move a partition into a non-partitioned table, the non-partitioned table will receive the data, but will not have the partition boundaries in its metadata.

예제 섹션의 분할된 테이블 만들기를 참조하세요.See Create a partitioned table in the Examples section.

순서가 지정된 클러스터형 columnstore 인덱스 옵션Ordered Clustered columnstore index option

CCI(클러스터형 columnstore 인덱스)는 Azure SQL Data Warehouse에서 테이블을 만들기 위한 기본값입니다.Clustered columnstore index (CCI) is the default for creating tables in Azure SQL Data Warehouse. CCI의 데이터는 columnstore 세그먼트로 압축되기 전에 정렬되지 않습니다.Data in CCI is not sorted before being compressed into columnstore segments. ORDER를 사용하여 CCI를 만드는 경우, 데이터가 인덱스 세그먼트에 추가되기 전에 정렬되며, 쿼리 성능이 향상될 수 있습니다.When creating a CCI with ORDER, data is sorted before being added to index segments and query performance can be improved. 자세한 내용은 순서가 지정된 클러스터형 Columnstore 인덱스를 사용한 성능 튜닝을 참조하세요.See Performance Tuning with Ordered Clustered Columnstore Index for details.

정렬된 CCI는 문자열 열을 제외하고 Azure SQL Data Warehouse에서 지원되는 모든 데이터 형식의 열에서 만들 수 있습니다.An ordered CCI can be created on columns of any data types supported in Azure SQL Data Warehouse except for string columns.

사용자는 sys.index_columnscolumn_store_order_ordinal 열에서 테이블이 정렬되고 정렬에 순서가 있는 열을 쿼리할 수 있습니다.Users can query column_store_order_ordinal column in sys.index_columns for the column(s) a table is ordered on and the sequence in the ordering.

자세한 내용은 순서가 지정된 클러스터형 columnstore 인덱스를 사용한 성능 튜닝을 참조하세요.Check Performance tuning with ordered clustered columnstore index for details.

데이터 형식Data type

SQL Data WarehouseSQL Data Warehouse는 가장 일반적으로 사용되는 데이터 형식을 지원합니다.supports the most commonly used data types. 다음은 세부 정보 및 스토리지 바이트가 포함된 지원되는 데이터 형식의 목록입니다.Below is a list of the supported data types along with their details and storage bytes. 데이터 형식 및 사용 방법을 더 잘 이해하려면 SQL Data Warehouse의 테이블에 대한 데이터 형식을 참조하세요.To better understand data types and how to use them, see Data types for tables in SQL Data Warehouse.

데이터 형식 변환의 테이블의 경우 CAST 및 CONVERT(Transact-SQL)에 있는 암시적 변환 섹션을 참조하세요.For a table of data type conversions, see the Implicit Conversions section, of CAST and CONVERT (Transact-SQL).

datetimeoffset [ ( n ) ]datetimeoffset [ ( n ) ]
n의 기본값은 7입니다.The default value for n is 7.

datetime2 [ ( n ) ]datetime2 [ ( n ) ]
소수 자릿수 초 숫자를 지정할 수 있다는 점 외에는 datetime과 동일합니다.Same as datetime, except that you can specify the number of fractional seconds. n의 기본값은 7입니다.The default value for n is 7.

nn value 자릿수Precision 확장Scale
0 1919 00
1 2121 11
2 2222 22
3 2323 33
4 2424 44
5 2525 55
6 2626 66
7 2727 77

datetime
그레고리력에 따라 19-23자로 하루의 시간과 날짜를 저장합니다.Stores date and time of day with 19 to 23 characters according to the Gregorian calendar. 날짜는 연도, 월 및 일을 포함할 수 있습니다.The date can contain year, month, and day. 시간에는 시간, 분, 초를 포함합니다. 선택적으로 세 자리 소수 자릿수 초를 표시할 수 있습니다.The time contains hour, minutes, seconds.As an option, you can display three digits for fractional seconds. 스토리지 크기는 8바이트입니다.The storage size is 8 bytes.

smalldatetime
날짜 및 시간을 저장합니다.Stores a date and a time. 스토리지 크기는 4바이트입니다.Storage size is 4 bytes.

date
그레고리력에 따라 연도, 월 및 일에 대해 최대 10자를 사용하여 날짜를 저장합니다.Stores a date using a maximum of 10 characters for year, month, and day according to the Gregorian calendar. 스토리지 크기는 3바이트입니다.The storage size is 3 bytes. 날짜는 정수로 저장됩니다.Date is stored as an integer.

time [ ( n ) ]time [ ( n ) ]
n의 기본값은 7입니다.The default value for n is 7.

float [ ( n ) ]float [ ( n ) ]
부동 소수점 숫자 데이터에 사용하는 근사 숫자 데이터 형식입니다.Approximate number data type for use with floating point numeric data. 부동 소수점 데이터는 근사값이므로 해당 데이터 형식 범위에 있는 모든 값을 정확하게 표현할 수는 없습니다.Floating point data is approximate, which means that not all values in the data type range can be represented exactly. n은 과학적 표기법으로 float의 가수를 저장하는 데 사용되는 비트 수를 지정합니다.n specifies the number of bits used to store the mantissa of the float in scientific notation. n은 전체 자릿수 및 스토리지 크기를 결정합니다.n dictates the precision and storage size. n이 지정된 경우 그 값은 1에서 53 사이여야 합니다.If n is specified, it must be a value between 1 and 53. n의 기본값은 53입니다.The default value of n is 53.

nn value 자릿수Precision 스토리지 크기Storage size
1-241-24 7자리7 digits 4바이트4 bytes
25-5325-53 15자리15 digits 8바이트8 bytes

SQL Data WarehouseSQL Data Warehouse에서는 n을 가능한 두 값 중 하나로 처리합니다.treats n as one of two possible values. 1<= n <= 24이면 n24으로 처리됩니다.If 1<= n <= 24, n is treated as 24. 25 <= n <= 53이면 n53으로 처리됩니다.If 25 <= n <= 53, n is treated as 53.

SQL Data WarehouseSQL Data Warehouse float 데이터 형식은 부터 까지의 모든 1n53 값에 대해 ISO 표준을 준수합니다.The SQL Data WarehouseSQL Data Warehouse float data type complies with the ISO standard for all values of n from 1 through 53. 배정밀도의 동의어는 float(53)입니다.The synonym for double precision is float(53).

real [ ( n ) ]real [ ( n ) ]
실제 정의는 float와 같습니다.The definition of real is the same as float. real의 ISO 동의어는 float(24)입니다.The ISO synonym for real is float(24).

decimal [ ( precision [ , scale ] ) ] | numeric [ ( precision [ , scale ] ) ]decimal [ ( precision [ , scale ] ) ] | numeric [ ( precision [ , scale ] ) ]
고정 전체 자릿수 및 비율 숫자를 저장합니다.Stores fixed precision and scale numbers.

전체 자릿수precision
소수점 왼쪽과 오른쪽에 저장할 수 있는 10진수의 최대 총 수입니다.The maximum total number of decimal digits that can be stored, both to the left and to the right of the decimal point. 전체 자릿수 값은 1에서 최대 전체 자릿수인 38 사이여야 합니다.The precision must be a value from 1 through the maximum precision of 38. 기본 전체 자릿수는 18입니다.The default precision is 18.

scalescale
소수점 오른쪽에 저장할 수 있는 10진수의 최대 수입니다.The maximum number of decimal digits that can be stored to the right of the decimal point. Scale 값은 0에서 precision 사이여야 합니다.Scale must be a value from 0 through precision. precision이 지정된 경우 scale만 지정할 수 있습니다You can only specify scale if precision is specified. 기본 비율은 0이므로 0 <= scale <= precision입니다.The default scale is 0 and so 0 <= scale <= precision. 전체 자릿수에 따라 최대 스토리지 크기가 달라집니다.Maximum storage sizes vary, based on the precision.

자릿수Precision 스토리지 크기(바이트)Storage bytes
1-91-9 55
10-1910-19 99
20-2820-28 1313
29-3829-38 1717

money | smallmoney
통화 값을 나타내는 데이터 형식입니다.Data types that represent currency values.

데이터 형식Data Type 스토리지 크기(바이트)Storage bytes
money 88
smallmoney 44

bigint | int | smallint | tinyintbigint | int | smallint | tinyint
정수 데이터를 사용하는 정확한 숫자 데이터 형식입니다.Exact-number data types that use integer data. 다음 표에 스토리지 용량이 나와 있습니다.The storage is shown in the following table.

데이터 형식Data Type 스토리지 크기(바이트)Storage bytes
bigint 88
int 44
smallint 22
tinyint 11

bit
1, 0 또는 NULL 값을 가질 수 있는 정수 데이터 형식입니다.An integer data type that can take the value of 1, 0, or `NULL. SQL Data WarehouseSQL Data Warehouse에서는 bit 열의 스토리지를 최적화합니다.optimizes storage of bit columns. 테이블에 8개 이하의 bit 열이 있는 경우 열은 1바이트로 저장되고,If there are 8 or fewer bit columns in a table, the columns are stored as 1 byte. 9-16개의 bit 열이 있을 경우 2바이트로 저장되는 식입니다.If there are from 9-16 bit columns, the columns are stored as 2 bytes, and so on.

nvarchar [ ( n | max ) ] -- maxSQL Data WarehouseSQL Data Warehouse에만 적용됩니다.nvarchar [ ( n | max ) ] -- max applies only to SQL Data WarehouseSQL Data Warehouse.
가변 길이 유니코드 문자 데이터입니다.Variable-length Unicode character data. n은 1부터 4000 사이의 값이 될 수 있습니다.n can be a value from 1 through 4000. max는 최대 스토리지 크기가 2^31-1바이트(2GB)임을 나타냅니다.max indicates that the maximum storage size is 2^31-1 bytes (2 GB). 스토리지 크기(바이트)는 입력된 문자 수의 두 배 + 2바이트입니다.Storage size in bytes is two times the number of characters entered + 2 bytes. 입력된 데이터의 길이가 0자일수도 있습니다.The data entered can be zero characters in length.

nchar [ ( n ) ]nchar [ ( n ) ]
길이가 n자인 고정 길이의 유니코드 문자 데이터입니다.Fixed-length Unicode character data with a length of n characters. n14000 사이의 값이어야 합니다.n must be a value from 1 through 4000. 스토리지 크기는 n바이트의 두 배입니다.The storage size is two times n bytes.

varchar [ ( n | max ) ] -- maxSQL Data WarehouseSQL Data Warehouse에만 적용됩니다.varchar [ ( n | max ) ] -- max applies only to SQL Data WarehouseSQL Data Warehouse.
길이가 n바이트인 가변 길이의 비 유니코드 문자 데이터입니다.Variable-length, non-Unicode character data with a length of n bytes. n18000 사이의 값이어야 합니다.n must be a value from 1 to 8000. max는 최대 스토리지 크기가 2^31-1바이트(2GB)임을 나타냅니다. 스토리지 크기는 입력된 데이터의 실제 길이 + 2바이트입니다.max indicates that the maximum storage size is 2^31-1 bytes (2 GB).The storage size is the actual length of data entered + 2 bytes.

char [ ( n ) ]char [ ( n ) ]
길이가 n바이트인 고정 길이의 비 유니코드 문자 데이터입니다.Fixed-length, non-Unicode character data with a length of n bytes. n18000 사이의 값이어야 합니다.n must be a value from 1 to 8000. 스토리지 크기는 n 바이트입니다.The storage size is n bytes. n에 대한 기본값은 1입니다.The default for n is 1.

varbinary [ ( n | max ) ] -- maxSQL Data WarehouseSQL Data Warehouse에만 적용됩니다.varbinary [ ( n | max ) ] -- max applies only to SQL Data WarehouseSQL Data Warehouse.
가변 길이 이진 데이터입니다.Variable-length binary data. n18000 사이의 값이어야 합니다.n can be a value from 1 to 8000. max는 최대 스토리지 크기가 2^31-1바이트(2GB)임을 나타냅니다.max indicates that the maximum storage size is 2^31-1 bytes (2 GB). 스토리지 크기는 실제 입력된 데이터의 길이 + 2바이트입니다.The storage size is the actual length of data entered + 2 bytes. n의 기본값은 7입니다.The default value for n is 7.

binary [ ( n ) ]binary [ ( n ) ]
길이가 n바이트인 고정 길이 이진 데이터입니다.Fixed-length binary data with a length of n bytes. n18000 사이의 값이어야 합니다.n can be a value from 1 to 8000. 스토리지 크기는 n 바이트입니다.The storage size is n bytes. n의 기본값은 7입니다.The default value for n is 7.

uniqueidentifier
16바이트 GUID입니다.Is a 16-byte GUID.

사용 권한Permissions

테이블을 만들려면 db_ddladmin 고정 데이터베이스 역할의 사용 권한이 필요합니다.Creating a table requires permission in the db_ddladmin fixed database role, or:

  • 데이터베이스에 대한 CREATE TABLE 사용 권한CREATE TABLE permission on the database
  • 테이블을 포함하는 스키마에 대한 ALTER SCHEMA 사용 권한입니다.ALTER SCHEMA permission on the schema that will contain the table.

분할된 테이블을 만들려면 db_ddladmin 고정 데이터베이스 역할의 사용 권한이 필요합니다. 또는Creating a partitioned table requires permission in the db_ddladmin fixed database role, or

  • ALTER ANY DATASPACE 사용 권한ALTER ANY DATASPACE permission

로컬 임시 테이블을 생성하는 로그인이 테이블에 대한 CONTROL, INSERT, SELECTUPDATE 사용 권한을 받습니다.The login that creates a local temporary table receives CONTROL, INSERT, SELECT, and UPDATE permissions on the table.

일반적인 주의 사항General Remarks

최소 및 최대 제한의 경우 SQL Data Warehouse 용량 제한을 참조하세요.For minimum and maximum limits, see SQL Data Warehouse capacity limits.

테이블 파티션 수 확인Determining the number of table partitions

각 사용자 정의 테이블은 배포라고 하는 개별 위치에 저장된 더 작은 테이블 여러 개로 나누어집니다.Each user-defined table is divided into multiple smaller tables that are stored in separate locations called distributions. SQL Data WarehouseSQL Data Warehouse는 60개 배포를 사용합니다.uses 60 distributions. 병렬 데이터 웨어하우스Parallel Data Warehouse에서 배포 수는 컴퓨팅 노드 수에 따라 다릅니다.In 병렬 데이터 웨어하우스Parallel Data Warehouse, the number of distributions depends on the number of Compute nodes.

각 배포에는 모든 테이블 파티션이 포함됩니다.Each distribution contains all table partitions. 예를 들어 배포 60개 및 테이블 파티션 4개와 빈 파티션 1개가 있으면 300개의 파티션이 있는 것입니다(5 x 60= 300).For example, if there are 60 distributions and four table partitions plus one empty partition, there will be 300 partitions (5 x 60= 300). 테이블이 클러스터형 columnstore 인덱스인 경우 파티션당 하나의 columnstore 인덱스가 됩니다. 즉, 300개의 columnstore 인덱스를 가지게 됩니다.If the table is a clustered columnstore index, there will be one columnstore index per partition, which means you'll have 300 columnstore indexes.

columnstore 인덱스의 이점 활용하기 위해 더 적은 테이블 파티션을 사용하여 각 columnstore 인덱스에 충분한 행이 있는지 확인하는 것이 좋습니다.We recommend using fewer table partitions to ensure each columnstore index has enough rows to take advantage of the benefits of columnstore indexes. 자세한 내용은 SQL Data Warehouse에서 테이블 분할SQL Data Warehouse에서 테이블 인덱싱을 참조하세요.For more information, see Partitioning tables in SQL Data Warehouse and Indexing tables in SQL Data Warehouse

rowstore 테이블(힙 또는 클러스터형 인덱스)Rowstore table (heap or clustered index)

rowstore 테이블은 행별 순서로 저장된 테이블입니다.A rowstore table is a table stored in row-by-row order. 힙 또는 클러스터형 인덱스입니다.It's a heap or clustered index. SQL Data WarehouseSQL Data Warehouse는 페이지 압축을 통해 모든 rowstore 테이블을 만들며 이 동작은 사용자가 구성할 수 없습니다.creates all rowstore tables with page compression; this behavior isn't user-configurable.

columnstore 테이블(columnstore 인덱스)Columnstore table (columnstore index)

columnstore 테이블은 열별 순서로 저장된 테이블입니다.A columnstore table is a table stored in column-by-column order. columnstore 인덱스는 columnstore 테이블에 저장된 데이터를 관리하는 기술입니다.The columnstore index is the technology that manages data stored in a columnstore table. 클러스터형 columnstore 인덱스는 데이터가 분산되는 방식에는 영향을 주지 않으며, 오히려 각 배포 내에서 데이터가 저장되는 방식에는 영향을 줍니다.The clustered columnstore index doesn't affect how data are distributed, rather, it affects how the data are stored within each distribution.

rowstore 테이블을 columnstore 테이블로 변경하려면 테이블에서 모든 기존 인덱스를 삭제하고 클러스터형 columnstore 인덱스를 만듭니다.To change a rowstore table to a columnstore table, drop all existing indexes on the table and create a clustered columnstore index. 예제를 보려면 CREATE COLUMNSTORE INDEX(Transact-SQL)를 참조하세요.For an example, see CREATE COLUMNSTORE INDEX (Transact-SQL).

자세한 내용은 다음 문서를 참조하세요.For more information, see these articles:

제한 사항Limitations and Restrictions

배포 열에서 DEFAULT 제약 조건을 정의할 수 없습니다.You can't define a DEFAULT constraint on a distribution column.

파티션Partitions

파티션을 사용할 때 파티션 열은 유니코드 전용 데이터 정렬을 포함할 수 없습니다.When using partitions, the partition column can't have a Unicode-only collation. 예를 들어, 다음 명령문은 실패합니다.For example, the following statement fails.

CREATE TABLE t1 ( c1 varchar(20) COLLATE Divehi_90_CI_AS_KS_WS) WITH (PARTITION (c1 RANGE FOR VALUES (N'')))

boundary_valuepartition_column_name의 데이터 형식으로 암시적으로 변환해야 하는 리터럴 값인 경우 불일치가 발생합니다.If boundary_value is a literal value that must be implicitly converted to the data type in partition_column_name, a discrepancy will occur. 리터럴 값은 SQL Data WarehouseSQL Data Warehouse 시스템 뷰를 통해 표시되지만 변환된 값은 Transact-SQLTransact-SQL 작업에 사용됩니다.The literal value is displayed through the SQL Data WarehouseSQL Data Warehouse system views, but the converted value is used for Transact-SQLTransact-SQL operations.

임시 테이블Temporary tables

##으로 시작하는 전역 임시 테이블은 지원되지 않습니다.Global temporary tables that begin with ## aren't supported.

로컬 임시 테이블에는 다음과 같은 제한 사항이 있습니다.Local temporary tables have the following limitations and restrictions:

  • 현재 세션에만 표시됩니다.They're visible only to the current session. SQL Data WarehouseSQL Data Warehouse는 세션이 끝날 때 이를 자동으로 삭제합니다.drops them automatically at the end of the session. 명시적으로 삭제하려면 DROP TABLE 문을 사용합니다.To drop them explicitly, use the DROP TABLE statement.
  • 해당 이름을 바꿀 수 없습니다.They can't be renamed.
  • 파티션 또는 뷰를 포함할 수 없습니다.They can't have partitions or views.
  • 해당 권한은 변경할 수 없습니다.Their permissions can't be changed. GRANT, DENYREVOKE 문은 로컬 임시 테이블과 함께 사용할 수 없습니다.GRANT, DENY, and REVOKE statements can't be used with local temporary tables.
  • 데이터베이스 콘솔 명령은 임시 테이블에 대해 차단됩니다.Database console commands are blocked for temporary tables.
  • 일괄 처리 내에서 둘 이상의 로컬 임시 테이블을 사용하는 경우 각각에 고유 이름이 있어야 합니다.If more than one local temporary table is used within a batch, each must have a unique name. 여러 세션이 동일한 일괄 처리를 실행하고 동일한 로컬 임시 테이블을 만드는 경우 SQL Data WarehouseSQL Data Warehouse는 내부적으로 로컬 임시 테이블 이름에 숫자 접미사를 추가하여 각 로컬 임시 테이블에 대한 고유한 이름을 유지합니다.If multiple sessions are running the same batch and creating the same local temporary table, SQL Data WarehouseSQL Data Warehouse internally appends a numeric suffix to the local temporary table name to maintain a unique name for each local temporary table.

잠금 동작Locking behavior

테이블에서 배타적 잠금을 사용합니다.Takes an exclusive lock on the table. DATABASE, SCHEMA 및 SCHEMARESOLUTION 개체에서 공유 잠금을 사용합니다.Takes a shared lock on the DATABASE, SCHEMA, and SCHEMARESOLUTION objects.

열에 대한 예제Examples for columns

1.A. 열 데이터 정렬 지정Specify a column collation

다음 예제에서는 MyTable 테이블이 두 개의 서로 다른 열 데이터 정렬을 사용하여 만들어집니다.In the following example, the table MyTable is created with two different column collations. 기본적으로 mycolumn1 열에는 기본 데이터 정렬 Latin1_General_100_CI_AS_KS_WS가 있습니다.By default, the column, mycolumn1, has the default collation Latin1_General_100_CI_AS_KS_WS. mycolumn2 열에는 Frisian_100_CS_AS 데이터 정렬이 있습니다.The column, mycolumn2 has the collation Frisian_100_CS_AS.

CREATE TABLE MyTable   
  (  
    mycolumnnn1 nvarchar,  
    mycolumn2 nvarchar COLLATE Frisian_100_CS_AS )  
WITH ( CLUSTERED COLUMNSTORE INDEX )  
;  

2.B. 열에 대해 DEFAULT 제약 조건 지정Specify a DEFAULT constraint for a column

다음 예제에서는 열에 대한 기본값을 지정하는 구문을 보여 줍니다.The following example shows the syntax to specify a default value for a column. colA 열에는 기본값 0 및 constraint_colA라는 기본 제약 조건이 있습니다.The colA column has a default constraint named constraint_colA and a default value of 0.

CREATE TABLE MyTable
  (  
    colA int CONSTRAINT constraint_colA DEFAULT 0,  
    colB nvarchar COLLATE Frisian_100_CS_AS
  )  
WITH ( CLUSTERED COLUMNSTORE INDEX )  
;  

임시 테이블에 대한 예제Examples for temporary tables

3.C. 로컬 임시 테이블 만들기Create a local temporary table

다음 예제에서는 #myTable이라는 로컬 임시 테이블을 만듭니다.The following example creates a local temporary table named #myTable. 테이블은 #으로 시작하는 세 부분으로 된 이름으로 지정됩니다.The table is specified with a three-part name, which starts with a #.

CREATE TABLE AdventureWorks.dbo.#myTable
  (  
   id int NOT NULL,  
   lastName varchar(20),  
   zipCode varchar(6)  
  )  
WITH  
  (   
    DISTRIBUTION = HASH (id),  
    CLUSTERED COLUMNSTORE INDEX
  )  
;  

테이블 구조에 대한 예제Examples for table structure

4.D. 클러스터형 columnstore 인덱스로 테이블 만들기Create a table with a clustered columnstore index

다음 예에서는 클러스터형 columnstore 인덱스가 포함된 분산된 테이블을 만듭니다.The following example creates a distributed table with a clustered columnstore index. 각 배포는 columnstore로 저장됩니다.Each distribution will be stored as a columnstore.

클러스터형 columnstore 인덱스는 데이터가 분포되는 방식에는 영향을 주지 않으며 데이터는 항상 행별로 배포됩니다.The clustered columnstore index doesn't affect how the data is distributed; data is always distributed by row. 클러스터형 columnstore 인덱스는 각 배포 내에서 데이터가 저장되는 방식에 영향을 줍니다.The clustered columnstore index affects how the data is stored within each distribution.

  CREATE TABLE MyTable
  (  
    colA int CONSTRAINT constraint_colA DEFAULT 0,  
    colB nvarchar COLLATE Frisian_100_CS_AS
  )  
WITH   
  (   
    DISTRIBUTION = HASH ( colB ),  
    CLUSTERED COLUMNSTORE INDEX
  )  
;  

5.E. 순서가 지정된 클러스터형 columnstore 인덱스 만들기Create an ordered clustered columnstore index

다음 예는 순서가 지정된 클러스터형 columnstore 인덱스를 만드는 방법을 보여줍니다.The following example shows how to create an ordered clustered columnstore index. 인덱스는 SHIPDATE에 정렬되어 있습니다.The index is ordered on SHIPDATE.

CREATE TABLE Lineitem  
WITH (DISTRIBUTION = ROUND_ROBIN, CLUSTERED COLUMNSTORE INDEX ORDER(SHIPDATE))  
AS  
SELECT * FROM ext_Lineitem

테이블 배포 예제Examples for table distribution

6.F. ROUND_ROBIN 테이블 만들기Create a ROUND_ROBIN table

다음 예에서는 세 개의 열이 있고 파티션 없는 ROUND_ROBIN 테이블을 만듭니다.The following example creates a ROUND_ROBIN table with three columns and without partitions. 데이터는 모든 배포에 걸쳐 분산됩니다.The data is spread across all distributions. 힙 또는 rowstore 클러스터형 인덱스에 비해 더 나은 성능 및 데이터 압축을 제공하는 CLUSTERED COLUMNSTORE INDEX를 사용하여 테이블이 만들어집니다.The table is created with a CLUSTERED COLUMNSTORE INDEX, which gives better performance and data compression than a heap or rowstore clustered index.

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode varchar(6)  
  )  
WITH ( CLUSTERED COLUMNSTORE INDEX );  

G.G. 해시 배포된 테이블 만들기Create a hash-distributed table

다음 예에서는 이전 예와 동일한 테이블을 만듭니다.The following example creates the same table as the previous example. 그러나 이 테이블의 경우 행은 ROUND_ROBIN 테이블처럼 임의로 분산되는 대신 배포됩니다(id 열에서).However, for this table, rows are distributed (on the id column) instead of randomly spread like a ROUND_ROBIN table. 힙 또는 rowstore 클러스터형 인덱스에 비해 더 나은 성능 및 데이터 압축을 제공하는 CLUSTERED COLUMNSTORE INDEX를 사용하여 테이블이 만들어집니다.The table is created with a CLUSTERED COLUMNSTORE INDEX, which gives better performance and data compression than a heap or rowstore clustered index.

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode varchar(6)  
  )  
WITH  
  (   
    DISTRIBUTION = HASH (id),   
    CLUSTERED COLUMNSTORE INDEX  
  );  

H.H. 복제된 테이블 만들기Create a replicated table

다음 예에서는 이전 예제와 비슷한 복제된 테이블을 만듭니다.The following example creates a replicated table similar to the previous examples. 복제된 테이블은 각 컴퓨팅 노드에 전체가 복사됩니다.Replicated tables are copied in full to each Compute node. 각 컴퓨팅 노드에서 이 복사본을 사용하면 쿼리에 대한 데이터 이동이 줄어듭니다.With this copy on each Compute node, data movement is reduced for queries. 이 예제는 힙에 비해 더 나은 데이터 압축을 제공하는 클러스터형 인덱스를 사용하여 만들어집니다.This example is created with a CLUSTERED INDEX, which gives better data compression than a heap. CLUSTERED COLUMNSTORE INDEX 압축을 달성하는 데 충분한 행이 힙에 포함되지 않을 수 있습니다.A heap may not contain enough rows to achieve good CLUSTERED COLUMNSTORE INDEX compression.

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode varchar(6)  
  )  
WITH  
  (   
    DISTRIBUTION = REPLICATE,
    CLUSTERED INDEX (lastName)  
  );  

테이블 파티션에 대한 예제Examples for table partitions

I.I. 분할된 테이블 만들기Create a partitioned table

다음 예에서는 RANGE LEFT 분할을 id 열에 추가하여 예 1과 동일한 테이블을 만듭니다.The following example creates the same table as shown in example A, with the addition of RANGE LEFT partitioning on the id column. 4개의 파티션 경계 값을 지정하여 파티션이 5개가 됩니다.It specifies four partition boundary values, which results in five partitions.

CREATE TABLE myTable
  (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode int)  
WITH
  (
  
    PARTITION ( id RANGE LEFT FOR VALUES (10, 20, 30, 40 )),  
    CLUSTERED COLUMNSTORE INDEX
  )  
;  

이 예제에서는 다음과 같은 파티션으로 데이터가 정렬됩니다.In this example, data will be sorted into the following partitions:

  • 파티션 1: col <= 10Partition 1: col <= 10
  • 파티션 2: 10 < col <= 20Partition 2: 10 < col <= 20
  • 파티션 3: 20 < col <= 30Partition 3: 20 < col <= 30
  • 파티션 4: 30 < col <= 40Partition 4: 30 < col <= 40
  • 파티션 5: 40 < colPartition 5: 40 < col

이 동일한 테이블이 RANGE LEFT(기본값) 대신 RANGE RIGHT에서 분할되면 다음과 같은 파티션으로 데이터가 정렬됩니다.If this same table was partitioned RANGE RIGHT instead of RANGE LEFT (default), the data will be sorted into the following partitions:

  • 파티션 1: col < 10Partition 1: col < 10
  • 파티션 2: 10 <= col < 20Partition 2: 10 <= col < 20
  • 파티션 3: 20 <= col < 30Partition 3: 20 <= col < 30
  • 파티션 4: 30 <= col < 40Partition 4: 30 <= col < 40
  • 파티션 5: 40 <= colPartition 5: 40 <= col

J.J. 하나의 파티션으로 분할된 테이블 만들기Create a partitioned table with one partition

다음 예제에서는 하나의 파티션으로 분할된 테이블을 만듭니다.The following example creates a partitioned table with one partition. 경계 값을 지정하지 않아 파티션이 하나가 됩니다.It doesn't specify any boundary value, which results in one partition.

CREATE TABLE myTable (  
    id int NOT NULL,  
    lastName varchar(20),  
    zipCode int)  
WITH
    (
      PARTITION ( id RANGE LEFT FOR VALUES ( )),  
      CLUSTERED COLUMNSTORE INDEX  
    )  
;  

K.K. 날짜 분할로 테이블 만들기Create a table with date partitioning

다음 예제에서는 date 열에서 분할하여 myTable이라는 새 테이블을 만듭니다.The following example creates a new table named myTable, with partitioning on a date column. 경계 값에 대해 RANGE RIGHT 및 날짜를 사용하면 각 파티션에 데이터의 월을 배치합니다.By using RANGE RIGHT and dates for the boundary values, it puts a month of data in each partition.

CREATE TABLE myTable (  
    l_orderkey      bigint,
    l_partkey       bigint,
    l_suppkey       bigint,
    l_linenumber    bigint,
    l_quantity      decimal(15,2),  
    l_extendedprice decimal(15,2),  
    l_discount      decimal(15,2),  
    l_tax           decimal(15,2),  
    l_returnflag    char(1),  
    l_linestatus    char(1),  
    l_shipdate      date,  
    l_commitdate    date,  
    l_receiptdate   date,  
    l_shipinstruct  char(25),  
    l_shipmode      char(10),  
    l_comment       varchar(44))  
WITH
  (
    DISTRIBUTION = HASH (l_orderkey),  
    CLUSTERED COLUMNSTORE INDEX,  
    PARTITION ( l_shipdate  RANGE RIGHT FOR VALUES
      (  
        '1992-01-01','1992-02-01','1992-03-01','1992-04-01','1992-05-01',
        '1992-06-01','1992-07-01','1992-08-01','1992-09-01','1992-10-01',
        '1992-11-01','1992-12-01','1993-01-01','1993-02-01','1993-03-01',
        '1993-04-01','1993-05-01','1993-06-01','1993-07-01','1993-08-01',
        '1993-09-01','1993-10-01','1993-11-01','1993-12-01','1994-01-01',
        '1994-02-01','1994-03-01','1994-04-01','1994-05-01','1994-06-01',
        '1994-07-01','1994-08-01','1994-09-01','1994-10-01','1994-11-01',
        '1994-12-01'  
      ))
  );  

참고 항목See also

CREATE TABLE AS SELECT(Azure SQL Data Warehouse) CREATE TABLE AS SELECT (Azure SQL Data Warehouse)
DROP TABLE(Transact-SQL) DROP TABLE (Transact-SQL)
ALTER TABLE(Transact-SQL) ALTER TABLE (Transact-SQL)
sys.index_columns(Transact-SQL)sys.index_columns (Transact-SQL)