指定LOCATION为文件夹时PolyBase未读取子文件夹文件,微软文档是否过时?
问题分析与解决
微软文档的描述并未过时,你遇到的问题是由于针对Azure Data Lake Storage Gen2的PolyBase需要显式开启递归扫描配置:
核心原因
当外部数据源为Azure Data Lake Storage Gen2时,PolyBase默认不会递归扫描子文件夹。文档中提到的“读取文件夹及其所有子文件夹内容”的默认行为,仅针对Hadoop类数据源生效;对于ADLS Gen2,必须手动添加参数开启递归。
修正后的代码
修改外部数据源的创建语句,加入RECURSIVE_FILES = ON参数:
CREATE EXTERNAL DATA SOURCE secureFiles WITH ( LOCATION = 'https://datalakeXXX.dfs.core.windows.net/files/', RECURSIVE_FILES = ON -- 启用子文件夹递归扫描 ); GO CREATE EXTERNAL TABLE mytab( id INT, p_name VARCHAR(20), age INT ) WITH( DATA_SOURCE=secureFiles, LOCATION= 'folder1/', FILE_FORMAT=CsvFormat ) GO SELECT * FROM mytab;
额外验证点
请确认子文件夹folder2、folder3下的文件名没有以下划线(_)或句点(.)开头——这类文件会被PolyBase自动忽略,这一点和文档描述完全一致。
内容的提问来源于stack exchange,提问作者user3579222
相关产品推荐
相关产品推荐

