USQL,将文件夹名提取到输出
问题描述:
我试图从data lake
存储中提取文件夹名并将其作为列输出到csv
文件中。有没有办法通过USQL
提取整个文件夹名称或部分文件夹名称?例如/input/Testing
- 我需要Testing
。USQL,将文件夹名提取到输出
我知道你可以提取文件名,并把它变成像这样的虚拟列:
// Filesets, file set with virtual column
@q =
EXTRACT rowId int,
filename string,
extension string
FROM "/input/filesets example/{filename}.{extension}"
USING Extractors.Tsv();
@output =
SELECT filename,
extension,
COUNT(*) AS records
FROM @q
GROUP BY filename,
extension;
OUTPUT @output TO "/output/output.csv"
USING Outputters.Csv();
答
您可以在路径中的任何地方使用{virtual_column}
功能(不只是为文件名和扩展名),并在稍后进行投影。这将工作:
@q = EXTRACT
rowId int,
folder string,
filename string,
extension string
FROM "/input/{folder}/{filename}.{extension}"
USING Extractors.Tsv();
@output =
SELECT folder,
filename,
extension,
COUNT(*) AS records
FROM @q
GROUP BY folder,
filename,
extension;
但是请注意,通过路径中使用虚拟列,您也越来越通配符功能(你将皮卡的所有文件夹中的情况下,你有一个以上的)...
有一个在虚拟列上的谓词,以确保你只能得到你想要的文件夹,例如'WHERE folder ==“yourFolder”;' – wBob
当我尝试运行上面的代码时,它说Virtual Column'文件夹'没有在EXTRACT语句中定义。 – FutureTony
当我尝试运行上面的代码时,我在提取语句中添加了文件夹字符串,并且我的结果返回了一个空输入。 – FutureTony