【发布时间】:2021-05-28 20:54:42
【问题描述】:
我目前是一名初级数据开发人员,最近看到一篇帖子说 Azure Synapse 现在可以从 Delta 表创建 SQL 表。我尝试从 Delta Lake Storage V2 中的 Delta 表创建一个 SQL 表,但是当使用“PARQUET”作为文件格式时,该表填充了额外的冗余数据(文件夹中所有快照的所有数据)和通配符来读取文件。
我尝试为我的表创建外部文件格式,但 Synapse 不接受“DELTA”作为数据类型。我使用 'PARQUET' 作为文件格式,并在我的 Delta 表上使用 VACUUM 以仅保留它的最新快照。每当我将路径设置为特定文件或 Delta 表中只有一个 snappy.parquet 文件时,数据都会正确打印。
基本上有什么方法可以创建从 Delta 表中获取数据的 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
/* '*' used 因为使用了客户端的数据路径 */
【问题讨论】:
标签: sql azure pyspark azure-synapse delta-lake