在 Azure SQL DB 中处理错误“提供的数据源类型不支持外部表”?
Posted
技术标签:
【中文标题】在 Azure SQL DB 中处理错误“提供的数据源类型不支持外部表”?【英文标题】:Handle error "External tables are not supported with the provided data source type" in Azure SQL DB? 【发布时间】:2020-04-07 03:35:17 【问题描述】:根据Microsoft Documentation,Azure SQL 数据库现在可以使用外部表,并将 Blob 存储作为数据源。
我能够根据下面的脚本创建TYPE = BLOB_STORAGE
的主密钥、凭据和数据源,并注意到此版本不支持文件格式(也不知道如何处理) .
所以我尝试创建一个外部表,其中一个字段为VARCHAR(MAX)
。因此我遇到了这个错误消息:
Mensagem 46525、Nível 16、Estado 31、Linha 32 提供的数据源类型不支持外部表。
这是我一直在使用的脚本:
-- Cria uma chave mestra
CREATE MASTER KEY;
go
-- Cria credencial com a chave do Blob fsarquivo2 (essa é a chave)
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH
IDENTITY = 'user',
SECRET = 'Q/rAy00000000000000000000000003Zo4RsxbIb57i2DoJTtU4JYQl1W5FDBIITapphJDRSv4OtniL3Dg=='
;
-- Aqui vc mostra onde fica a fechadura através da URI
CREATE EXTERNAL DATA SOURCE AzureStorage
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'wasbs://container0@fsblobstorage.blob.core.windows.net',
CREDENTIAL = AzureStorageCredential
);
create external table luiz
(field varchar(MAX))
with
(
DATA_SOURCE = AzureStorage,
LOCATION = 'container0/terrcad.txt'
)
谁能帮帮我?
【问题讨论】:
【参考方案1】:您所做的一切都是正确的,只是您尝试从 Blob 存储中的数据源创建外部表,但这是不可能的。您需要使用 BULK INSERT 或 OPENROWSET 来访问文件并将其导入,而不是创建外部表。
以下是使用 BULK/INSERT 的示例:
BULK INSERT Product
FROM 'container0/terrcad.txt'
WITH ( DATA_SOURCE = 'AzureStorage');
使用批量插入。
SELECT * FROM OPENROWSET(
BULK 'inv-2017-01-19.csv',
DATA_SOURCE = 'AzureStorage',
FORMAT = 'CSV',
FORMATFILE='invoices.fmt',
FORMATFILE_DATA_SOURCE = 'MyAzureInvoices'
) AS DataFile;
更多信息,请访问this文章。
【讨论】:
什么是invoices.fmt
?在我的 CSV 场景中,我在 blob 存储中只有 1 个文件,如果我为 FORMATFILE
弥补了一些东西,那么我会看到这个错误:Cannot bulk load. The file "foo.fmt" does not exist or you don't have file access rights.
它是一个格式文件。请阅读以下文档以了解如何创建格式文件:docs.microsoft.com/en-us/sql/relational-databases/import-export/…以上是关于在 Azure SQL DB 中处理错误“提供的数据源类型不支持外部表”?的主要内容,如果未能解决你的问题,请参考以下文章
性能缓慢 Azure“Web 应用”+ Azure SQL DB
通过 ms jdbc 连接到 Azure SQL DB 的 Android 应用程序错误
如何使用 iOS Swift 在 Azure DB 中执行 SQL 字符串包含查询?