В настоящее время я работаю младшим разработчиком данных и недавно увидел сообщение о том, что Azure Synapse теперь может создавать таблицы SQL из таблиц Delta. Я попытался создать таблицу SQL из таблицы Delta, которая находится внутри Delta lake Storage V2, но таблица заполняется дополнительными избыточными данными (всеми данными из всех снимков в папке) при использовании PARQUET в качестве формата файла и подстановочный знак для чтения файлов.
Я попытался создать внешний формат файла для своей таблицы, но Synapse не принимает DELTA в качестве типа данных. Я использовал «ПАРКЕТ» в качестве формата файла и использовал ВАКУУМ в своей таблице Дельта, чтобы сохранить только последний ее снимок. Каждый раз, когда я устанавливал путь к определенному файлу или когда в таблице Delta был только один файл snappy.parquet, данные распечатывались правильно.
В принципе, есть ли способ создать таблицу Synapse / внешнюю таблицу, которая получает данные из таблицы Delta? Если нет, есть ли способ остановить 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
/ * '*' используется, потому что использовались пути к данным клиентов * /