批量导入Azure

Sli*_*009 1 t-sql bulkinsert azure-sql-database

对于批量插入,我有一个数据文件和一个格式文件(xml);

  • File.dat
  • File.xml

这正在使用批量插入语句处理OnPremises,但是在Azure中,格式文件似乎有问题。以下是我已采取的步骤


设置存储访问

  • 创建一个共享访问签名
  • 将容器访问策略设置为'Blob(仅对Blob进行匿名读取访问)

创建存储的数据库范围凭证

CREATE DATABASE SCOPED CREDENTIAL StorageCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'This is my secret' (Shared Access Signature Key)
Run Code Online (Sandbox Code Playgroud)

创建一个外部数据源

CREATE EXTERNAL DATA SOURCE Storage
WITH  (
    TYPE = BLOB_STORAGE,
    LOCATION = 'https://<storagename>.blob.core.windows.net/<containername>', 
    CREDENTIAL = StorageCredential
);
Run Code Online (Sandbox Code Playgroud)

文件查询(批量插入或Openrowset)

BULK INSERT <Schema>.<Table>
FROM 'File.dat'
WITH (
    DATA_SOURCE = 'Storage',
    FORMATFILE = 'File.xml'
)
Run Code Online (Sandbox Code Playgroud)

要么

SELECT * FROM OPENROWSET(
    BULK 'File.dat',
    DATA_SOURCE = 'Storage',
    FORMATFILE =  'File.xml'
) AS DataFile;
Run Code Online (Sandbox Code Playgroud)

它们都无法处理错误;

“无法批量加载,因为文件不完整或无法读取”

但是,如果我可以成功运行以下查询;

SELECT * FROM OPENROWSET(
    BULK 'File.xml', 
    DATA_SOURCE = 'Storage',
    SINGLE_NClob) AS DataFile
Run Code Online (Sandbox Code Playgroud)

Sli*_*009 5

我找到了答案,我将自己张贴(如果其他人也遇到此问题)。

格式文件的数据源应单独指定。我尝试了Microsoft文档中指定的方式;批量插入

但是,参数名称中有错误。它指出正确的参数是“ FORMATFILE_DATASOURCE”,但是应该是“ FORMATFILE_DATA_SOURCE”。(在底部评论)

BULK INSERT <Schema>.<Table>
FROM 'File.dat'
WITH (
    DATA_SOURCE = 'Storage',
    FORMATFILE = 'File.xml',
    FORMATFILE_DATA_SOURCE = 'Storage'
)
Run Code Online (Sandbox Code Playgroud)