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

Create External Table in Azure SQL Data warehouse to a wild card based file or folder path

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

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

-- SQL 服务器

的语法
-- Create a new external table  
CREATE EXTERNAL TABLE [ database_name . [ schema_name ] . | schema_name. ] table_name   
    ( <column_definition> [ ,...n ] )  
    WITH (   
        **LOCATION = 'folder_or_filepath'**,  
        DATA_SOURCE = external_data_source_name,  
        FILE_FORMAT = external_file_format_name  
        [ , <reject_options> [ ,...n ] ]  
    )  
[;]  

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

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