练习 - 将数据加载到 Azure SQL 数据库
大容量加载数据时,它必须来自某个位置。 在 Azure 中,通常会将数据存储或转储到 Azure Blob 存储。 Blob 存储经过优化,能够以相对较低的成本存储巨量的非结构化数据。
在这种情况下,Adventure Works Cycles 将根据存储标识号接收存储返回数据。 此数据存储在 .dat 文件中,然后将这些文件推送到 Azure Blob 存储中。 数据位于 Blob 存储之后,Azure SQL 需要一种方法来访问它。 为此,你可创建有权访问存储帐户的外部数据源。 可以通过 Microsoft Entra ID、共享密钥授权或共享访问签名 (SAS) 来控制对该存储帐户的访问。
在本练习中,我们将探讨一种方案,以便使用 sqlcmd 中的 T-SQL 将数据从 Azure Blob 存储批量加载到 Azure SQL 数据库中。
使用 sqlcmd
将数据加载到 Azure SQL 数据库中
sqlcmd
是一个命令行工具,借助该工具,你可以使用命令行与 SQL Server 和 Azure SQL 交互。 在此练习中,你将在 Azure Cloud Shell 的 PowerShell 实例中使用 sqlcmd
。
sqlcmd
默认情况下已安装,因此可以从 Azure Cloud Shell 轻松使用。
由于 Azure Cloud Shell for Bash 的配置方式,首先需要在 Azure Cloud Shell 中运行以下命令来更改终端模式。
TERM=dumb
修改服务器名称和密码后,在集成终端中运行以下命令。
sqlcmd -S <server name>.database.windows.net -P <password> -U cloudadmin -d AdventureWorks
创建一个表和架构,以将数据加载到其中。 这个过程是一个简单的 T-SQL。 连接到数据库后,在终端中运行以下脚本:
DROP TABLE IF EXISTS holiday CREATE TABLE [dbo].[holiday]( [countryOrRegion] [varchar](255) NULL, [holidayName] [varchar](255) NULL, [normalizeHolidayName] [varchar](255) NULL, [isPaidTimeOff] [varchar](255) NULL, [countryRegionCode] [varchar](255) NULL, [date] varchar(255) NULL ) ON [PRIMARY];
提示
T-SQL 语句后面会显示一个数字条目。 它表示 T-SQL 条目的每一行。 例如,上述命令以
26
结尾。 请务必选择这些行后的 ENTER 。再次出现
1>
时(它指示sqlcmd
已为下一个 T-SQL 条目的第一行做好了准备),你会知道该命令已完成。为容器创建外部数据源:
DROP EXTERNAL DATA SOURCE holiday_dataset; CREATE EXTERNAL DATA SOURCE holiday_dataset WITH ( TYPE = BLOB_STORAGE, LOCATION = 'https://fabrictutorialdata.blob.core.windows.net/sampledata/Fabric/Holiday' );
批量插入其中一个存储返回文件。 运行以下脚本,并在完成时查看注释:
SET NOCOUNT ON -- Reduce network traffic by stopping the message that shows the number of rows affected BULK INSERT holiday -- Table you created previously FROM 'Holiday.csv' -- Within the container, the ___location of the file WITH (DATA_SOURCE = 'holiday_dataset' -- Using the external data source from step 6 , FORMAT = 'CSV' , FIRSTROW = 2 , FIELDTERMINATOR = ',' , ROWTERMINATOR = '0x0a' , CODEPAGE = '65001' ,BATCHSIZE=100000 -- Reduce network traffic by inserting in batches , TABLOCK -- Minimize number of log records for the insert operation );
检查插入到表中的行数:
SELECT COUNT(*) FROM holiday; GO
如果一切正常运行,应会返回
274
。
此代码是如何将 Blob 存储中的数据插入 Azure SQL 数据库的简单示例。 如果要再次运行此练习,请运行以下代码来重置已完成的操作:
DROP EXTERNAL DATA SOURCE holiday_dataset
DROP TABLE holiday
GO