azure-synapse - CTAS 与 INSERT/SELECT 来清空 Azure SQL 数据仓库上的列式表

标签 azure-synapse

我正在运行一系列测试来了解每个 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 中。您有机会阅读以下文章吗?

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

关于azure-synapse - CTAS 与 INSERT/SELECT 来清空 Azure SQL 数据仓库上的列式表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41579851/

相关文章:

sql-server - 使用 SSIS 创建文件和文件夹到网络驱动器

azure - Synapse工作区上传包

sql-server - 在 SQL 数据仓库中创建/选择外部表时处理嵌入的新行

apache-spark - Azure Synapse : Target Spark pool specified in Spark job definition is not in succeeded state. 当前状态:配置

azure - 错误- “The size (12000) given to the type ' VarChar'超出了Azure数据仓库中允许的最大值(8000)”

azure - 为什么我在 SSMS 中看不到表

azure - 资源类 - 并发 - Azure SQL 数据仓库

sql - 重命名 Azure 数据仓库中的列

azure - Azure Synapse 中的 Openrowset 语法问题

Azure Serverless SQL - 对非分区列性能进行过滤