2017-10-12 90 views
1

我試圖從data lake存儲中提取文件夾名並將其作爲列輸出到csv文件中。有沒有辦法通過USQL提取整個文件夾名稱或部分文件夾名稱?例如/input/Testing - 我需要TestingUSQL,將文件夾名提取到輸出

我知道你可以提取文件名,並把它變成像這樣的虛擬列:

// 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(); 

See pic here.

回答

2

您可以在路徑中的任何地方使用{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; 

但是請注意,通過路徑中使用虛擬列,您也越來越通配符功能(你將皮卡的所有文件夾中的情況下,你有一個以上的)...

+1

有一個在虛擬列上的謂詞,以確保你只能得到你想要的文件夾,例如'WHERE folder ==「yourFolder」;' – wBob

+0

當我嘗試運行上面的代碼時,它說Virtual Column'文件夾'沒有在EXTRACT語句中定義。 – FutureTony

+0

當我嘗試運行上面的代碼時,我在提取語句中添加了文件夾字符串,並且我的結果返回了一個空輸入。 – FutureTony

相關問題