Aracılığıyla paylaş


Sunucusuz SQL havuzu sorgularında dosya meta verilerini kullanma

Bu makalede, meta verileri kullanarak belirli dosyaları veya klasörleri sorgulamayı öğreneceksiniz. Sunucusuz SQL havuzu birden çok dosya ve klasörü ele alabilir. Daha fazla bilgi için bkz . Sorgu klasörleri ve birden çok dosya.

Bazen, hangi dosya veya klasör kaynağının sonuç kümesindeki belirli bir satırla bağıntılı olduğunu bilmeniz gerekebilir. İşlevleri ve filename kullanarak filepath sonuç kümesindeki dosya adlarını ve/veya yolu döndürebilir veya bunları kullanarak verileri dosya adına veya klasör yoluna göre filtreleyebilirsiniz. Bu işlevler filename işlevi ve filepath işlevinde açıklanmıştır.

Aşağıdaki bölümlerde kısa açıklamalar ve kod örnekleri sağlanır.

Önkoşullar

İlk adımınız, depolama hesabına başvuran bir veri kaynağına sahip bir veritabanı oluşturmaktır. Ardından, bu veritabanında bir kurulum betiği yürüterek nesneleri başlatın. Bu kurulum betiği, bu örneklerde kullanılan veri kaynaklarını, veritabanı kapsamlı kimlik bilgilerini ve dış dosya biçimlerini oluşturur.

İşlevler

Dosya adı

işlevi, filename satırın kaynaklandığı dosya adını döndürür.

Aşağıdaki örnek Eylül 2017 için NYC Sarı Taksi veri dosyalarını okur ve dosya başına yolculuk sayısını döndürür. Sorgunun OPENROWSET bölümü hangi dosyaların okunacaklarını belirtir.

SELECT
    nyc.filename() AS [filename]
    ,COUNT_BIG(*) AS [rows]
FROM  
    OPENROWSET(
        BULK 'parquet/taxi/year=2017/month=9/*.parquet',
        DATA_SOURCE = 'SqlOnDemandDemo',
        FORMAT='PARQUET'
    ) nyc
GROUP BY nyc.filename();

Aşağıdaki örnek, okunacak dosyaları filtrelemek için yan tümcesinde WHERE nasıl filename() kullanılabileceğini gösterir. Sorgunun bölümündeki klasörün tamamına OPENROWSET erişir ve yan tümcesindeki WHERE dosyaları filtreler.

Sonuçlarınız önceki örnekle aynı olacaktır.

SELECT
    r.filename() AS [filename]
    ,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
    BULK 'csv/taxi/yellow_tripdata_2017-*.csv',
        DATA_SOURCE = 'SqlOnDemandDemo',
        FORMAT = 'CSV',
        PARSER_VERSION = '2.0',
        FIRSTROW = 2) 
        WITH (C1 varchar(200) ) AS [r]
WHERE
    r.filename() IN ('yellow_tripdata_2017-10.csv', 'yellow_tripdata_2017-11.csv', 'yellow_tripdata_2017-12.csv')
GROUP BY
    r.filename()
ORDER BY
    [filename];

Dosya yolu

filepath İşlev tam veya kısmi bir yol döndürür:

  • Parametresiz çağrıldığında, satırın kaynaklandığı tam dosya yolunu döndürür. DATA_SOURCE içinde OPENROWSETkullanıldığında, yoluna göre DATA_SOURCEyolunu döndürür.
  • Parametresiyle çağrıldığında, parametresinde belirtilen konumda joker karakterle eşleşen yolun bir bölümünü döndürür. Örneğin, parametre değeri 1 , yolun ilk joker karakterle eşleşen bir bölümünü döndürür.

Aşağıdaki örnek, 2017'nin son üç ayı için NYC Yellow Taxi veri dosyalarını okur. Dosya yolu başına yolculuk sayısını döndürür. Sorgunun OPENROWSET bölümü hangi dosyaların okunacaklarını belirtir.

SELECT
    r.filepath() AS filepath
    ,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
        BULK 'csv/taxi/yellow_tripdata_2017-1*.csv',
        DATA_SOURCE = 'SqlOnDemandDemo',
        FORMAT = 'CSV',
        PARSER_VERSION = '2.0',
        FIRSTROW = 2
    )
    WITH (
        vendor_id INT
    ) AS [r]
GROUP BY
    r.filepath()
ORDER BY
    filepath;

Aşağıdaki örnek, okunacak dosyaları filtrelemek için yan tümcesinde WHERE nasıl filepath() kullanılabileceğini gösterir.

Sorgunun bölümünde joker karakterleri OPENROWSET kullanabilir ve yan tümcesindeki WHERE dosyaları filtreleyebilirsiniz. Sonuçlarınız önceki örnekle aynı olacaktır.

SELECT
    r.filepath() AS filepath
    ,r.filepath(1) AS [year]
    ,r.filepath(2) AS [month]
    ,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
        BULK 'csv/taxi/yellow_tripdata_*-*.csv',
        DATA_SOURCE = 'SqlOnDemandDemo',
        FORMAT = 'CSV',
        PARSER_VERSION = '2.0',        
        FIRSTROW = 2
    )
WITH (
    vendor_id INT
) AS [r]
WHERE
    r.filepath(1) IN ('2017')
    AND r.filepath(2) IN ('10', '11', '12')
GROUP BY
    r.filepath()
    ,r.filepath(1)
    ,r.filepath(2)
ORDER BY
    filepath;

Sonraki adım