提问人:Samuel Appleton 提问时间:10/24/2023 更新时间:10/25/2023 访问量:67
Azure synapse 中的外部表 - 删除 parquet 文件时出错
External table in Azure synapse - Error as parquet file is removed
问:
我正在通过 databricks 将 parquet 文件写入 azure Data Lake Storage 系统。 我正在使用以下命令来编写 parquet 文件:
cultural_split.write.partitionBy("filename").mode('overwrite').parquet("/mnt/crime/transformed-data")
然后,我将使用 parquet 文件创建一个外部表,并且可以在 synapse 中使用 SQL 查询该表。大约 30 分钟后,我在尝试查询表时收到此错误:
外部表“dbo.cultural_data”不可访问,因为位置不存在或被另一个进程使用。
然后,我检查了我的数据湖,可以看到 parquet 文件不再存在。如果我选中“显示”已删除的对象,我仍然看不到该文件。
创建外部表时是否缺少某些内容?我已关闭此 blob 存储的软删除,我想不出任何其他可能正在删除此文件的进程。
下面是我用于创建外部表的代码:
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 = 'crime-data_crimedatasam_dfs_core_windows_net')
CREATE EXTERNAL DATA SOURCE [crime-data_crimedatasam_dfs_core_windows_net]
WITH (
LOCATION = 'abfss://[email protected]'
)
GO
CREATE EXTERNAL TABLE dbo.crime_data (
[ethnicity] nvarchar(80),
[police_district] nvarchar(80),
[lower_age] int,
[upper_age] int
)
WITH (
LOCATION = 'transformed-data/filename=crime_data/part-00000-tid-3588581976832316109-20e2477d-82c0-47d9-ba75-cf341910855e-20-1.c000.snappy.parquet',
DATA_SOURCE = [crime-data_sam_dfs_core_windows_net],
FILE_FORMAT = [SynapseParquetFormat]
)
GO
SELECT TOP 100 * FROM dbo.crime_data
GO
非常感谢,
山 姆
答:
0赞
DileeprajnarayanThumula
10/25/2023
#1
- 确保当前没有其他程序或任务正在使用或 更改要保存 Parquet 文件的区域中的信息。
- 在某些情况下,你可能决定不在 blob 上设置生存时间 (TTL)。如果执行此操作,Azure CDN 将自动强制实施 7 天的默认 TTL,除非已在 Azure 门户中配置缓存规则。请务必注意,此默认 TTL 仅适用于常规 Web 交付优化。
详细了解如何在 Azure CDN 中管理 Azure Blob 存储的过期
- 创建外部表时,可以选择更广泛的路径定义,而不是指定确切的文件。此方法可确保外部表能够更好地适应文件或分区中的任何更改,从而使其更具弹性。
我尝试了以下指向 partion 文件夹并创建外部表的方法:
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 = 'folder02_dileepsynpadls_dfs_core_windows_net')
CREATE EXTERNAL DATA SOURCE [folder02_dileepsynpadls_dfs_core_windows_net]
WITH (
LOCATION = 'abfss://<CONTAINER>@<STORAGE ACCOUNT>.dfs.core.windows.net'
)
GO
CREATE EXTERNAL TABLE dbo.file_name_ext_table (
[age] bigint
)
WITH (
LOCATION = 'transformed-data/**',
DATA_SOURCE = [folder02_dileepsynpadls_dfs_core_windows_net],
FILE_FORMAT = [SynapseParquetFormat]
)
GO
SELECT TOP 100 * FROM dbo.file_name_ext_table
GO
评论