2017-10-12 6 views
1

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

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 'folder'はEXTRACT文で定義されていません。 – FutureTony

+0

上記のコードを実行しようとすると、抽出文にフォルダ文字列が追加され、結果が空の入力に戻ってきました。 – FutureTony

関連する問題