2016-11-30 67 views
2

我有一个U-SQL托管表,其中包含模式化的结构化数据。将数据从U-SQL托管表传输到Azure SQL数据库表

CREATE TABLE [AdlaDb].[dbo].[User] 
(
    UserGuid Guid, 
    Postcode string, 
    Age int? 
    DateOfBirth DateTime?, 
) 

和一个Azure SQL数据库表。

CREATE TABLE [SqlDb].[dbo].[User] 
(
    UserGuid uniqueidentifier NOT NULL, 
    Postcode varchar(15) NULL, 
    Age   int NULL, 
    DateOfBirth Date NULL, 
) 

我想将数据从U-SQL托管表传输到Azure SQLDB表,而不会丢失数据类型。

我使用的是湛蓝的数据工厂,好像我不能

  1. 直接查询在U-SQL管理表作为数据工厂输入数据集
  2. 做联合查询天青SQLDB

因此,我有一个中间步骤,我从U-SQL托管表复制到Azure Blob,然后移动到Azure SQLDB表。这样做,我正在丢失数据类型,并在插入之前再次进行类型转换/转换。

有没有更好的方式将数据从U-SQL托管表传输到Azure SQL数据库表而不会丢失数据类型?或者我错过了什么?

回答

3

此时你有下列选项:

  1. 导出在U-SQL表到ADLS或Blob存储的中间格式(例如,CSV)。
  2. 使用ADF将文件移动到Azure SQL数据库中。

我知道ADF团队有一个工作项目可以为您做到这一点。我会要求他们回复此主题。

由于U-SQL中的容错重试和扩展处理,直接从U-SQL脚本写入表格会带来很多挑战。这使并行原子写入交易存储更加复杂(参见例如http://www.vldb.org/conf/1996/P460.PDF)。

2

现在有另一种选择将数据从USQL托管表传输到Azure SQL数据库表。

  • 写出从USQL管理的表或从USQL脚本Azure的Blob存储为文本文件中的数据(.CSV,.TXT等)在
  • 然后利用公共预览feature的Azure的SQL数据库 - BULK INSERT - 把这个包到一个存储过程
  • 添加存储过程活动Azure的数据工厂安排

注:有一两件事需要注意创建数据库范围CREDENTIAL时,请参考这个堆栈溢出question

相关问题