在 SQL 中使用外部 table/Polybase 从外部源(Azure 存储 blob)中选择数据。 Table 创建但没有返回数据

selecting data from an external source (azure storage blob) using external table/Polybase in SQL. Table created but no data returned

我有一个“|” AZURE 存储 blob 上的分隔文件,我正在尝试从该数据创建外部 table 到 select。我已逐步按照此处的说明进行操作:https://docs.microsoft.com/en-us/sql/t-sql/statements/create-external-table-transact-sql?view=sql-server-ver15 我相信所有服务器设置都是正确的。我实际上可以创建 table,但是当我从它 select 时(从 tables 下的外部 tables 部分)没有数据 returns。下面是我的 select 声明,为了节省 space,我已经修剪了字段。

CREATE EXTERNAL TABLE [dbo].[customer]
(
    [Id] [int] NOT NULL,
    [CustomerName] [varchar](255) NULL,
    [AccountType] [varchar](255) NULL,
    [State] [varchar](255) NULL,
    [DateExtracted] [date] NULL,
    [tablename][varchar](50) NULL,
    [databaseName] [varchar](50) NULL
)   
WITH (LOCATION='customerfiles/',
      DATA_SOURCE = AzureStorage,  
      FILE_FORMAT = TextFileFormat  
);  

Azure 中的源如下:tmmdevstorage - container > customerfiles > file1.txt , file2.txt 我怀疑我在引用该位置时遇到了错误。 当 select 从它创建外部 table 和 none 时,我没有得到任何错误,只是没有数据。 blob 存储中有包含数据的文件。

关于我遗漏了什么有什么想法吗?

您在上面的评论中所说的是正确的:从外部 table 访问 blob 存储时,您需要针对 blob 存储的凭据。此外,还需要使用数据库主密钥来保护凭证。看看this link,解释的真好

创建身份时设置 IDENTITYSECRET 参数。对于 blob 存储,您可以将 IDENTITY 设置为您想要的任何字符串,我总是使用 user.

如果您浏览到您的存储帐户,您可以在 Azure 门户中找到 SECRET。它位于左侧菜单中的访问键下:

希望对您有所帮助。

在您的外部表代码中提供位置时,将值更改为“/customerfiles”。这将读取 customerfiles 文件夹中存在的所有文件并将数据提取到外部表中。此外,您还必须在创建外部数据源时正确提及您的文件位置。