日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Azure Synapse Analytics(Azure SQL DW)中建表语句的注意事项

發(fā)布時間:2024/5/14 数据库 72 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Azure Synapse Analytics(Azure SQL DW)中建表语句的注意事项 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

(一)前言

(二)建表語法

(三)參數(shù)說明

1. 列選項

2. 表結(jié)構(gòu)選項

3. 表分發(fā)選項

4. 表分區(qū)選項

(四)實例

1.?列的示例

(1)?指定一個列排序規(guī)則

(2)?指定列的 DEFAULT 約束

2.?表結(jié)構(gòu)的示例

(1)創(chuàng)建一個具有聚集列存儲索引的表

(2)創(chuàng)建有序聚集列存儲索引

3.?表分發(fā)的示例

(1)創(chuàng)建 ROUND_ROBIN 表

(2)創(chuàng)建哈希分布式表

(3)創(chuàng)建已復(fù)制的表

4.?表分區(qū)的示例

(1)創(chuàng)建已分區(qū)表

(2)使用一個分區(qū)創(chuàng)建已分區(qū)表

(3)創(chuàng)建具有日期分區(qū)的表


(一)前言

? ? ? ?本文我們來探討一個看似比較簡單但實際上說清楚需要很多門道的操作,即建表語句以及語句中相關(guān)參數(shù)的含義,接下來讓我們來具體看下一些建表基本事項。

(二)建表語法

-- 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[ IDENTITY [ ( seed, increment ) ][ <column_constraint> ]<column_constraint>::={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 Azure Synapse Analytics | 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 Azure Synapse Analytics| 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 Azure Synapse Analytics | nchar [ ( n ) ] | varchar [ ( n | max ) ] -- max applies only to Azure Synapse Analytics | char [ ( n ) ] | varbinary [ ( n | max ) ] -- max applies only to Azure Synapse Analytics | binary [ ( n ) ] | uniqueidentifier

(三)參數(shù)說明

database_name
將包含新表的數(shù)據(jù)庫的名稱。 默認為當前數(shù)據(jù)庫。

schema_name
表的架構(gòu)。 可選擇指定架構(gòu) 。 如果是空白,將使用默認架構(gòu)。

table_name
新表的名稱。 若要創(chuàng)建本地臨時表,請在表名前加上?#。

column_name
表列的名稱。

1. 列選項

COLLATE?Windows_collation_name
指定表達式的排序規(guī)則。 此排序規(guī)則必須是 SQL Server 支持的 Windows 排序規(guī)則之一。?

NULL?|?NOT NULL
指定列中是否允許使用?NULL?值。 默認為?NULL。

[?CONSTRAINTconstraint_name?]?DEFAULTconstant_expression
指定默認列值。

參數(shù)說明
constraint_name約束的可選名稱。 該約束名稱在數(shù)據(jù)庫中是唯一的。 此名稱可以重用于其他數(shù)據(jù)庫。
constant_expression列的默認值。 表達式必須是文本值或一個常數(shù)。 例如,允許的常數(shù)表達式:'CA'、4。 禁止使用這些常量表達式:2+3、CURRENT_TIMESTAMP。

2. 表結(jié)構(gòu)選項

CLUSTERED COLUMNSTORE INDEX

將表存儲為聚集列存儲索引。 聚集列存儲索引應(yīng)用于所有表數(shù)據(jù)。 這是 Azure Synapse Analytics 的默認行為。

HEAP:將表存儲為堆。 這是 Analytics Platform System (PDW) 的默認行為。

CLUSTERED INDEX?( index_column_name [ ,...n ] )
將表存儲為具有一個或多個鍵列的聚集索引。 此行為按行存儲數(shù)據(jù)。 在索引中使用 index_column_name 來指定一個或多個鍵列的名稱 。 有關(guān)詳細信息,請參閱常規(guī)注釋中的行存儲表。

LOCATION = USER_DB:此選項已遭棄用。 雖然在語法上可接受,但已不再需要它,而且它也不再影響行為。

3. 表分發(fā)選項

DISTRIBUTION = HASH?(distribution_column_name ):通過哈希處理 distribution_column_name 中存儲的值,將每行都分配到一個分發(fā)。 算法是確定性的。也就是說,它總是將相同的值哈希到相同的分發(fā)。 應(yīng)將分發(fā)列定義為 NOT NULL,因為所有包含 NULL 值的行都分配到相同的分發(fā)。

DISTRIBUTION = ROUND_ROBIN:以輪循機制在所有分發(fā)上均勻地分發(fā)行。 這是 Azure Synapse Analytics 的默認行為。

DISTRIBUTION = REPLICATE:將表的一個副本存儲在每個 Compute 節(jié)點上。 對于 Azure Synapse Analytics,表存儲在每個 Compute 節(jié)點上的分發(fā)數(shù)據(jù)庫上。 對于 Analytics Platform System (PDW),表存儲在跨 Compute 節(jié)點的 SQL Server 文件組中。 這是 Analytics Platform System (PDW) 的默認行為。

4. 表分區(qū)選項

PARTITION?( partition_column_name?RANGE?[?LEFT?|?RIGHT?]?FOR VALUES?( [ boundary_value [,...n] ] ))
創(chuàng)建一個或多個表分區(qū)。 這些分區(qū)是水平表切片,可便于向行的子集應(yīng)用操作,無論表是作為堆、聚集索引還是聚集列存儲索引進行存儲。 與分發(fā)列不同,表分區(qū)不確定存儲每行的分發(fā)。 表分區(qū)決定行如何分組并存儲在每個分發(fā)中。

參數(shù)說明
partition_column_name指定 Azure Synapse Analytics 將用于行分區(qū)的列。 此列可以是任何數(shù)據(jù)類型。 Azure Synapse Analytics 按升序?qū)Ψ謪^(qū)列值進行排序。 在?LEFT?規(guī)范中,由低到高的排序是從?RIGHT?到?RANGE。
RANGE LEFT指定屬于左側(cè)分區(qū)的邊界值(較低值)。 默認為“左”。
RANGE RIGHT指定屬于右側(cè)分區(qū)的邊界值(較高值)。
FOR VALUES?( boundary_value [,...n] )指定分區(qū)的邊界值。 boundary_value 是一個常數(shù)表達式 。 它不得為 NULL。 它必須匹配或可以隱式轉(zhuǎn)換為 partition_column_name 的數(shù)據(jù)類型 。 無法在隱式轉(zhuǎn)換期間截斷它,這樣值的大小和確定位數(shù)與 partition_column_name 的數(shù)據(jù)類型不匹配



如果你指定?PARTITION?子句,但不指定邊界值,Azure Synapse Analytics 會創(chuàng)建包含一個分區(qū)的已分區(qū)表。 如果適用,稍后可以將表拆分成兩個分區(qū)。



如果指定一個邊界值,生成的表格有兩個分區(qū);一個用于低于邊界值的值,另一個用于高于邊界值的值。 如果你將分區(qū)移到未分區(qū)表中,未分區(qū)表會接收數(shù)據(jù),但它的元數(shù)據(jù)中不會有分區(qū)邊界。

(四)實例

1.?列的示例

(1)?指定一個列排序規(guī)則

? ? ? ?在以下示例中,使用兩種不同的列排序規(guī)則創(chuàng)建表?MyTable。 默認情況下,列?mycolumn1?具有默認的排序規(guī)則 Latin1_General_100_CI_AS_KS_WS。 列?mycolumn2?具有排序規(guī)則 Frisian_100_CS_AS。

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

(2)?指定列的 DEFAULT 約束

? ? ? ?以下示例顯示了為列指定默認值的語法。 colA 列有一個名為 constraint_colA 的默認約束以及一個默認值 0。

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

2.?表結(jié)構(gòu)的示例

(1)創(chuàng)建一個具有聚集列存儲索引的表

? ? ? ?以下示例創(chuàng)建一個具有聚集列存儲索引的分布式表。 將每個分發(fā)存儲為一個列存儲。

? ? ? ?聚集列存儲索引不影響數(shù)據(jù)的分發(fā)方式;數(shù)據(jù)始終按行分發(fā)。 聚集列存儲索引影響數(shù)據(jù)在每個分發(fā)中的存儲方式。

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

(2)創(chuàng)建有序聚集列存儲索引

? ? ? ?下面的示例展示了如何創(chuàng)建有序聚集列存儲索引。 索引按 SHIPDATE 進行排序。

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

3.?表分發(fā)的示例

(1)創(chuàng)建 ROUND_ROBIN 表

? ? ? ?以下示例創(chuàng)建 ROUND_ROBIN 表,其中包含三列并且沒有分區(qū)。 數(shù)據(jù)分布在所有分發(fā)中。 該表是使用 CLUSTERED COLUMNSTORE INDEX 創(chuàng)建的,它能提供比堆或行存儲聚集索引更好的性能和數(shù)據(jù)壓縮。

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

(2)創(chuàng)建哈希分布式表

? ? ? ?以下示例創(chuàng)建與上面的示例相同的表。 但對于此表,分發(fā)行(位于?id?列),而不是像 ROUND_ROBIN 表一樣隨機分發(fā)。 該表是使用 CLUSTERED COLUMNSTORE INDEX 創(chuàng)建的,它能提供比堆或行存儲聚集索引更好的性能和數(shù)據(jù)壓縮。

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

(3)創(chuàng)建已復(fù)制的表

? ? ? ?以下示例創(chuàng)建一個類似于前面示例的已復(fù)制表。 將已復(fù)制表全部復(fù)制到每個 Compute 節(jié)點。 通過每個 Compute 節(jié)點上的副本,可以減少查詢的數(shù)據(jù)移動。 此示例是使用 CLUSTERED INDEX 進行創(chuàng)建,可實現(xiàn)比堆更好的數(shù)據(jù)壓縮。 堆可能包含的行不夠,無法實現(xiàn)理想的 CLUSTERED COLUMNSTORE INDEX 壓縮。

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

4.?表分區(qū)的示例

(1)創(chuàng)建已分區(qū)表

? ? ? ?以下示例創(chuàng)建與示例 A 中所示相同的表,并在?id?列上添加 RANGE LEFT 分區(qū)。 它指定了四個分區(qū)邊界值,所以有五個分區(qū)。

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) ;

在此示例中,數(shù)據(jù)將分類到以下分區(qū)中:

  • 分區(qū) 1:列 <= 10
  • 分區(qū) 2:10 < 列 <= 20
  • 分區(qū) 3:20 < 列 <= 30
  • 分區(qū) 4:30 < 列 <= 40
  • 分區(qū) 5:40 < 列

如果將此同一個表分區(qū)為 RANGE RIGHT 而非 RANGE LEFT(默認),數(shù)據(jù)將分類到以下分區(qū)中:

  • 分區(qū) 1:列 < 10
  • 分區(qū) 2:10 <= 列 < 20
  • 分區(qū) 3:20 <= 列 < 30
  • 分區(qū) 4:30 <= 列 < 40
  • 分區(qū) 5:40 <= 列

?

(2)使用一個分區(qū)創(chuàng)建已分區(qū)表

? ? ? ?以下示例使用一個分區(qū)創(chuàng)建已分區(qū)表。 它不指定任何邊界值,所以有一個分區(qū)。??

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

(3)創(chuàng)建具有日期分區(qū)的表

? ? ? ?以下示例創(chuàng)建一個名為?myTable?的新表,并在?date?列上進行分區(qū)。 使用 RANGE RIGHT 和日期作為邊界值,它將在每個分區(qū)中放置一個月的數(shù)據(jù)。

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' )));

總結(jié)

以上是生活随笔為你收集整理的Azure Synapse Analytics(Azure SQL DW)中建表语句的注意事项的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。