CTAS 与 INSERT/SELECT 在 Azure SQL 数据仓库上清空柱状 table

CTAS vs INSERT/SELECT to empty columnar table on Azure SQL Data Warehouse

我正在运行 进行一系列测试以了解每个 DWU 的吞吐量。我有八 (8) 个场景,改变 ETL 方法(CTAS 与 INSERT/SELECT),改变输入 table 类型(堆与柱状),并改变输出 table 类型(堆与柱状).

出乎意料的是,使用列式输入 table,写入列式输出 table,使用 INSERT/SELECT 或 CTAS 产生相同的吞吐量(每个 DWU 每秒 8,100 行)。

为什么 INSERT/SELECT 构造的 "full logging" 没有一些惩罚?

给定:

INSERT/SELECT 脚本:

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 中。您有机会查看以下文章吗?

https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-develop-best-practices-transactions