首页 > 解决方案 > 未找到 Blob 存储文件上的 Azure Polybase 外部表

问题描述

提前感谢你的帮助!我在 Blob 存储上有 CSV 文件,目前正在通过 Synapse (Azure SQL DWH) 中的 polybase 成功读取这些文件。该方法如Microsoft 文档中所述。我添加了一个新文件夹(与其他文件在同一个容器中),并且在 Synapse 上通过 SSMS 创建外部表时收到以下错误消息:

消息 105002,级别 16,状态 1,行 1 外部文件访问失败,因为指定的路径名​​“/USA/FCT.CSV”不存在。请输入有效路径,然后重试。

如果我将文件放在另一个文件夹中(在同一个容器中)(例如“/CA/FCT.CSV”),我知道我可以从中访问文件,它可以正常工作。我觉得我已经证明文件没有问题,并且外部表创建脚本没有错误。

我的故障排除使我认为需要在 BLOB 存储容器中的文件夹上设置权限设置。我检查了“管理访问”设置是否与具有正常访问权限的文件夹相同。我还能检查什么?

Blob 存储容器和文件夹

已工作文件的完整路径(敏感信息替换为星号):https://***datalake.dfs.core.windows.net/marketing/CA/FCT.CSV

无效文件的完整路径:https://***datalake.dfs.core.windows.net/marketing/USA/FCT.CSV

这是确实有效的创建表脚本:

CREATE EXTERNAL TABLE [Nielsen].[USA_Fact_external]
(

[HRCH LVL]                  VARCHAR(40)
,[**** TOTAL MARKET1]       VARCHAR(40)
,[**** COMPANY]         VARCHAR(40)
,[**** BRAND]               VARCHAR(40)
,[**** SEGMENT]         VARCHAR(40)
,[**** TYPE]                VARCHAR(40)
,[**** PACK TYPE]           VARCHAR(40)
,[**** SUB BRAND]           VARCHAR(40)
,[**** ACTUAL PACK SIZE]    VARCHAR(40)
,[PRDC CODE]                    VARCHAR(40)
,[**** TOTAL MARKET22]  VARCHAR(40)
,[MARKET CODE]              VARCHAR(40)
,[PERIOD DESCRIPTION LONG]  VARCHAR(40)
,[UNITS]                        BIGINT 
,[EQ1]                      BIGINT
,[DOL]                      BIGINT
,[AVG UNIT PRICE]           BIGINT
,[AVG EQ1 PRICE]                BIGINT
,[PCTACV]                   BIGINT
,[EST ACV SELLING]          BIGINT
,[ANY PROMO UNITS]          BIGINT
,[ANY PROMO DOL]                BIGINT
,[TDP]                      BIGINT
,[TDP YA]                   BIGINT
,[BASE DOL]                 BIGINT
,[BASE UNITS]               BIGINT
,[BASE EQ]                  BIGINT
,[ANY PROMO EQ]             BIGINT
,[FEAT WO DISP PCTACV]      BIGINT
,[NUMBER OF STORES]         BIGINT
,[NUMERICAL DISTRIBUTION]   BIGINT
)
WITH (DATA_SOURCE = [AzureDataLakeStorage],LOCATION = N'/CA/FCT.CSV',FILE_FORMAT = [CsvFileFormat_withHeadersPipeDL],REJECT_TYPE = VALUE,REJECT_VALUE = 0)
GO

这是不起作用的创建表脚本:

CREATE EXTERNAL TABLE [Nielsen].[USA_Fact_external]
(

[HRCH LVL]                  VARCHAR(40)
,[**** TOTAL MARKET1]       VARCHAR(40)
,[**** COMPANY]         VARCHAR(40)
,[**** BRAND]               VARCHAR(40)
,[**** SEGMENT]         VARCHAR(40)
,[**** TYPE]                VARCHAR(40)
,[**** PACK TYPE]           VARCHAR(40)
,[**** SUB BRAND]           VARCHAR(40)
,[**** ACTUAL PACK SIZE]    VARCHAR(40)
,[PRDC CODE]                    VARCHAR(40)
,[**** TOTAL MARKET22]  VARCHAR(40)
,[MARKET CODE]              VARCHAR(40)
,[PERIOD DESCRIPTION LONG]  VARCHAR(40)
,[UNITS]                        BIGINT 
,[EQ1]                      BIGINT
,[DOL]                      BIGINT
,[AVG UNIT PRICE]           BIGINT
,[AVG EQ1 PRICE]                BIGINT
,[PCTACV]                   BIGINT
,[EST ACV SELLING]          BIGINT
,[ANY PROMO UNITS]          BIGINT
,[ANY PROMO DOL]                BIGINT
,[TDP]                      BIGINT
,[TDP YA]                   BIGINT
,[BASE DOL]                 BIGINT
,[BASE UNITS]               BIGINT
,[BASE EQ]                  BIGINT
,[ANY PROMO EQ]             BIGINT
,[FEAT WO DISP PCTACV]      BIGINT
,[NUMBER OF STORES]         BIGINT
,[NUMERICAL DISTRIBUTION]   BIGINT
)
WITH (DATA_SOURCE = [AzureDataLakeStorage],LOCATION = N'/USA/FCT.CSV',FILE_FORMAT = [CsvFileFormat_withHeadersPipeDL],REJECT_TYPE = VALUE,REJECT_VALUE = 0)
GO

这是外部数据源脚本,(敏感信息用星号代替):

CREATE EXTERNAL DATA SOURCE [AzureDataLakeStorage_Marketing] WITH (TYPE = HADOOP, LOCATION = N'abfss://marketing@***datalake.dfs.core.windows.net', CREDENTIAL = [******])

范围凭据条目 (sys.database_scoped_credentials) 的屏幕截图

标签: azureazure-blob-storageazure-synapsepolybase

解决方案


推荐阅读