我正在使用不支持物化視圖的 Synapse Serverless,但某些用例出于性能原因需要它們。作為一種解決方法,我將使用 CETAS 陳述句來持久化檔案并為它們安排定期更新。但是,當我嘗試洗掉并重新創建 CETAS 表時,我收到訊息:
Cannot create external table. External table location already exists. Location provided: [location]
一旦檔案由 CETAS 陳述句創建,看起來我不能用另一個 CETAS 陳述句覆寫它們,而且我還沒有找到任何其他選項來修改突觸中的檔案。我知道我可以在重新運行 CETAS 之前創建一個更大的作業流程來從存盤中洗掉,但希望有某種方法可以將內容保留在 Synapse 中。
有沒有辦法從 Synapse 中洗掉/覆寫/修改由 CETAS 陳述句創建的檔案?
uj5u.com熱心網友回復:
正如您所發現的,洗掉表不會洗掉檔案。這在檔案中進行了概述(請參閱備注部分)...

下面顯示了一個示例,自然,它缺少一些背景關系,但您應該了解總體思路......
DECLARE @CurrentTimeStamp varchar(100) = (SELECT REPLACE(REPLACE(REPLACE(CONVERT(varchar, CURRENT_TIMESTAMP, 126), '-', ''), 'T', '_'), ':', ''))
BEGIN TRY
SET @Sql = '
IF EXISTS (SELECT * FROM sys.external_tables WHERE name = ''' @TableName ''' AND schema_id = ' CAST(@SchemaIdReporting as varchar(10)) ')
BEGIN
DROP EXTERNAL TABLE [reporting].[' @TableName ']
END
CREATE EXTERNAL TABLE [reporting].[' @TableName ']
WITH (
LOCATION = ''reporting/' @TableName '/' @CurrentTimeStamp ''',
DATA_SOURCE = [Analytics],
FILE_FORMAT = [Parquet]
) AS
' @Sql
EXEC (@Sql)
END TRY
BEGIN CATCH
SET @ErrorSection = 'Part 1: SQL statement construction.'
SELECT @ErrorMessage = @ErrorSection ', ' ERROR_MESSAGE(), @ErrorSeverity = ERROR_SEVERITY(), @ErrorState = ERROR_STATE()
PRINT @Sql
RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState)
END CATCH
...此外,當前不支持修改(更新/插入/洗掉)外部表中的資料,這是一種限制。可以在這里找到...
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-external-table-transact-sql?view=sql-server-ver15&tabs=dedicated#limitations-and-restrictions
唯一的考慮是清理舊檔案。我還沒有這樣做,但喜歡擁有所有舊資料的快照的概念。我還不需要回去訪問其中的任何一個,但如果我需要,它就在那里。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/403443.html
標籤:
