我正在运行一系列测试来了解每个 DWU 的吞吐量。我有八 (8) 个场景,不同的 ETL 方法(CTAS 与 INSERT/SELECT)、不同的输入表类型(堆与列)以及不同的输出表类型(堆与列)。
出乎意料的是,使用列式输入表、写入列式输出表、使用 INSERT/SELECT 或 CTAS 产生了相同的吞吐量(每个 DWU 每秒 8,100 行)。
为什么不会有一些与 INSERT/SELECT 构造的“完整日志记录”相关的惩罚?
鉴于:
- DWU = 600
- 表 17 列,1.33B 行
- 目标表为空 事先
插入/选择脚本:
CREATE TABLE
etl_schema_name.fact_table_benchmark_testing
(
column_1 INTEGER NOT NULL
,column_2 INTEGER NOT NULL
,column_3 SMALLINT NOT NULL
,column_4 SMALLINT NOT NULL
,column_5 INTEGER NOT NULL
,column_6 DECIMAL(9,4) NOT NULL
,column_7 DECIMAL(9,2) NOT NULL
,column_8 SMALLINT NOT NULL
,column_9 CHAR(1) NOT NULL
,column_10 SMALLINT NOT NULL
,column_11 DECIMAL(9,2) NOT NULL
,column_12 DECIMAL(9,2) NOT NULL
,column_13 DECIMAL(9,2) NOT NULL
,column_14 DECIMAL(9,2) NOT NULL
,column_15 DECIMAL(9,2) NOT NULL
,column_16 DECIMAL(9,2) NOT NULL
,column_17 DECIMAL(9,2) NOT NULL
)
WITH
(
DISTRIBUTION = HASH ( column_2 )
)
;
GO
insert into
etl_schema_name.fact_table_benchmark_testing
(
column_1
,column_2
,column_3
,column_4
,column_5
,column_6
,column_7
,column_8
,column_9
,column_10
,column_11
,column_12
,column_13
,column_14
,column_15
,column_16
,column_17
)
select
column_1
,column_2
,column_3
,column_4
,column_5
,column_6
,column_7
,column_8
,column_9
,column_10
,column_11
,column_12
,column_13
,column_14
,column_15
,column_16
,column_17
FROM
production_schema_name.fact_table
;
GO
CTAS 脚本
CREATE TABLE
etl_schema_name.fact_table_benchmark_testing_2
WITH
(
DISTRIBUTION = HASH ( column_2 )
)
as
select
column_1
,column_2
,column_3
,column_4
,column_5
,column_6
,column_7
,column_8
,column_9
,column_10
,column_11
,column_12
,column_13
,column_14
,column_15
,column_16
,column_17
FROM
production_schema_name.fact_table
;
GO
最佳答案
INSERT...SELECT 不一定完全记录在 SQLDW 中。您有机会阅读以下文章吗?
关于azure-synapse - CTAS 与 INSERT/SELECT 来清空 Azure SQL 数据仓库上的列式表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41579851/