在Azure SQL数据仓库中将外部表创建为基于通配符的文件或文件夹路径

时间:2017-08-21 10:44:39

标签: sql-server azure azure-sql-database external-tables sql-data-warehouse

我知道我们可以在Azure SQL数据仓库中创建指向的外部表 一个LOCATION,它是文件路径或文件夹路径。此文件或文件夹路径是否可以基于通配符模式而不是显式路径。

此处我的文件路径是Azure Data Lake Store中的一个位置。

- SQL Server的语法

- 创建新的外部表
CREATE EXTERNAL TABLE [database_name。 [schema_name]。 |模式名。 ] table_name
    ([,... n])
    WITH(
         LOCATION ='folder_or_filepath'
        DATA_SOURCE = external_data_source_name,
        FILE_FORMAT = external_file_format_name
        [,[,... n]]
    )
[;]

1 个答案:

答案 0 :(得分:2)

Polybase / External Tables目前不支持通配符。每个外部表只需一个文件夹即可。如果您认为这是一个重要的缺失功能,您可以在此处创建请求并投票:

https://feedback.azure.com/forums/307516-sql-data-warehouse

请记住Polybase(在Azure SQL数据仓库中)现在可以在blob存储或Azure Data Lake Storage(ADLS)中读取文件。因此,作为另一种解决方法,Azure Data Lake Analytics(ADLA)和U-SQL支持Polybase,因此您可以使用U-SQL将您想要的文件从blob存储区移动到您的湖中,例如

// Move data from blob store to data lake
// add filename and structure as one file
DECLARE @inputFilepath string = "wasb://someContainer@someStorageAccount.blob.core.windows.net/someFilter/{filepath}.csv";
DECLARE @outputFilepath string = "output/special folder/output.csv";


@input =
    EXTRACT 
            ...     // your column list
            filepath string
    FROM @inputFilepath
    USING Extractors.Csv()


@input =
    SELECT * FROM @input
    WHERE filename.Contains("yourFilter");


// Export as csv
OUTPUT @input
TO @outputFilepath
USING Outputters.Csv(quoting:false);


// Now the data is in Data Lake which Polybase can also use as a source