我需要从Azure数据仓库中取出大表,然后将它们移到独立的Azure SQL数据库中。我还没有能够让数据工厂足够快地运行我的方案。我可以通过外部表从我的数据仓库中获取我的表到Blob存储。我无法弄清楚的是如何使用外部数据源在Azure SQL数据库上创建外部表到我的Blob存储。
这是用于将我的表放入blob存储的格式文件,外部数据源和外部表:
CREATE EXTERNAL FILE FORMAT [DelimitedText]
WITH (
FORMAT_TYPE = DELIMITEDTEXT,
FORMAT_OPTIONS (
FIELD_TERMINATOR = N'~¶~',
USE_TYPE_DEFAULT = False
),
DATA_COMPRESSION = N'org.apache.hadoop.io.compress.GzipCodec')
GO
CREATE EXTERNAL DATA SOURCE [myDataSource]
WITH (
TYPE = HADOOP,
LOCATION = N'wasbs://<blob container>@<storage account>.blob.core.windows.net',
CREDENTIAL = [myCredential])
GO
CREATE EXTERNAL TABLE [dbo].[myTable]
WITH (
DATA_SOURCE = [myDataSource] ,
LOCATION = N'MY_FOLDER/',
FILE_FORMAT = [DelimitedText]
)
AS
SELECT *
FROM dbo.mytable
我能够在Azure SQL数据库中创建的唯一外部数据源TYPE=SHARD_MAP_MANAGER
是正确的还是必要的?此链接看起来我应该能够使用TYPE=HADOOP
创建外部数据源,但我在EXTERNAL&#34;附近出现了错误#34;错误。我也无法创建外部文件格式。这可能在Azure SQL数据库中吗?
https://msdn.microsoft.com/en-us/library/dn935022.aspx#Examples: Azure SQL Database
最终,我尝试为我的blob存储创建一个外部表,然后从该blob插入我的Azure SQL数据库中的表。然后放下容器。
答案 0 :(得分:4)
无法在 Azure SQL数据库上使用PolyBase功能,仅在内部部署 SQL Server 2016数据库中使用。
在the article中有一个注释:
仅在SQL Server 2016,Azure SQL数据仓库和并行数据仓库上支持PolyBase。仅在Azure SQL数据库v12或更高版本上支持弹性数据库查询。
相反,您可以创建Azure SQL Data Warehouse(如果您愿意,可以在同一个Azure SQL Server上)。如果您继续使用该指南,该指南将适合您。它不适用于Hadoop(https://msdn.microsoft.com/en-us/library/mt703314.aspx),但正如我所理解的那样,您从Azure blob存储导入问题,这将适用于Azure SQL数据仓库。
答案 1 :(得分:2)
Azure SQL数据库最近获得了使用BULK INSERT或OPENROWSET从Azure Blob存储加载文件的功能。开始here。
从链接文章中获取的两个简单代码示例:
DO
$$
DECLARE
qs TEXT;
BEGIN
FOR qs IN array_cat( -- as @ammoQ suggested to do UNION ALL
SELECT array_agg(messages) FROM posts UNION ALL
SELECT array_agg(comments) FROM boards )
LOOP
-- here I need: count chars really processed
-- to do not exceed the billing quota of external api
-- then make an UPSERT into cache table for another long process
-- if quota is not exceeded
END LOOP;
-- and return total of processed symbols
END;
$$ LANGUAGE plpgsql;