在Azure Synapse专用/无服务器SQL池中使用增量表

在Azure Synapse专用/无服务器SQL池中使用增量表,sql,azure,pyspark,azure-synapse,delta-lake,Sql,Azure,Pyspark,Azure Synapse,Delta Lake,我目前是一名初级数据开发人员,最近看到一篇帖子说Azure Synapse现在可以从增量表创建SQL表。我尝试从Delta lake Storage V2中的Delta表创建SQL表,但当使用“拼花”作为文件格式并使用通配符读取文件时,该表中填充了额外的冗余数据(来自文件夹中所有快照的所有数据) 我尝试为我的表创建一个外部文件格式,但Synapse不接受“DELTA”作为数据类型。我使用“拼花地板”作为文件格式,并在我的Delta表上使用真空吸尘器只保存它的最新快照。每当我设置特定文件的路径,或

我目前是一名初级数据开发人员,最近看到一篇帖子说Azure Synapse现在可以从增量表创建SQL表。我尝试从Delta lake Storage V2中的Delta表创建SQL表,但当使用“拼花”作为文件格式并使用通配符读取文件时,该表中填充了额外的冗余数据(来自文件夹中所有快照的所有数据)

我尝试为我的表创建一个外部文件格式,但Synapse不接受“DELTA”作为数据类型。我使用“拼花地板”作为文件格式,并在我的Delta表上使用真空吸尘器只保存它的最新快照。每当我设置特定文件的路径,或者Delta表中只有一个snappy.parquet文件时,数据都会正确打印

基本上,是否有任何方法可以创建一个Synapse表/外部表,从增量表获取数据?如果没有,是否有任何方法可以阻止Azure Deltalake在每次写入/更新/删除新数据时创建新快照

使用的脚本:

IF NOT EXISTS (SELECT * FROM sys.external_file_formats WHERE name = SynapseParquetFormat') 
CREATE EXTERNAL FILE FORMAT [SynapseParquetFormat] 
WITH ( FORMAT_TYPE = PARQUET)
GO

IF NOT EXISTS (SELECT * FROM sys.external_data_sources WHERE name = 'ExtSource') 
CREATE EXTERNAL DATA SOURCE [ExtSource] 
WITH (
    LOCATION   = '*', 
)
GO

CREATE EXTERNAL TABLE dbo.ext_table (
    [CostCentre] varchar(8000),
    [CostCentre_MemberId] int
)
WITH (
    LOCATION = 'dimensions/Dim_Example/*.snappy.parquet',
    -- WILDCARD IF THERE IS ONLY ONE FILE OR LATEST FILE NEEDS TO BE SPECIFIED
    DATA_SOURCE = [ExtSource],
    FILE_FORMAT = [SynapseParquetFormat]
)
GO

/*之所以使用“*”,是因为当前使用了客户端的数据路径*/

,Azure Synapse专用SQL池中没有用于外部表的增量格式。不能在SQL池中创建可以读取增量格式的表。正如您所提到的,尽管您可以使用拼花地板格式和真空吸尘器来解决问题,但对于日常数据操作来说,这并不是一个推荐的解决方案。从Databricks文档:

“我们不建议您将保留时间间隔设置为7天以下,因为旧快照和未提交的文件仍可能被表的并发读取器或写入器使用。如果真空清除活动文件,则并发读取器可能会失败,或者更糟的是,当真空删除尚未提交的文件时,表可能会损坏。”

为了回答你的第二个问题,我不知道停止创建快照的任何解决方案。Delta Lake的关键功能之一是提供这些快照

我的建议是使用Data Factory或Spark应用程序进行数据移动,从增量表中读取数据并写入专用SQL池中的表

  • 使用Data Factory,您已经为增量表内置了连接器,但是您需要一个DataRicks集群来连接和读取Data Factory中的数据。使用复制活动或映射数据流从增量读取数据并写入SQL池。或者,从Delta读取数据,写入Parquet并在SQL池中创建外部表

  • 第二种选择是使用Spark应用程序。将增量表中的数据读取到Spark数据帧中,并将其写入SQL池

  • Spark应用程序的托管可以在Azure Databricks或Azure Synapse Analytics的Spark池中完成。
    对于Azure Databricks,有一个Azure Synapse连接器,更多信息如下:

    Synapse中不支持增量。 您可以在此处为该项目投票:

    I无服务器池有一些解决方法:

    您可以使用此powershell脚本基于当前数据生成DeltaLake视图:

    请注意,如果数据发生更改,则需要重新生成视图

    或者,您可以基于清单文件创建增量视图:

    同样,如果有什么变化,您需要重新生成它