在Azure Synapse专用/无服务器SQL池中使用增量表
我目前是一名初级数据开发人员,最近看到一篇帖子说Azure Synapse现在可以从增量表创建SQL表。我尝试从Delta lake Storage V2中的Delta表创建SQL表,但当使用“拼花”作为文件格式并使用通配符读取文件时,该表中填充了额外的冗余数据(来自文件夹中所有快照的所有数据) 我尝试为我的表创建一个外部文件格式,但Synapse不接受“DELTA”作为数据类型。我使用“拼花地板”作为文件格式,并在我的Delta表上使用真空吸尘器只保存它的最新快照。每当我设置特定文件的路径,或者Delta表中只有一个snappy.parquet文件时,数据都会正确打印 基本上,是否有任何方法可以创建一个Synapse表/外部表,从增量表获取数据?如果没有,是否有任何方法可以阻止Azure Deltalake在每次写入/更新/删除新数据时创建新快照 使用的脚本:在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表上使用真空吸尘器只保存它的最新快照。每当我设置特定文件的路径,或
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池中的表
对于Azure Databricks,有一个Azure Synapse连接器,更多信息如下:Synapse中不支持增量。 您可以在此处为该项目投票: I无服务器池有一些解决方法: 您可以使用此powershell脚本基于当前数据生成DeltaLake视图: 请注意,如果数据发生更改,则需要重新生成视图 或者,您可以基于清单文件创建增量视图: 同样,如果有什么变化,您需要重新生成它