Sunucusuz SQL havuzu sorgularında dosya meta verilerini kullanma

Sunucusuz SQL havuzu, Sorgu klasörleri ve birden çok dosya makalesinde açıklandığı gibi birden çok dosya ve klasörü ele alabilir. Bu makalede, sorgulardaki dosya ve klasör adları hakkındaki meta veri bilgilerini kullanmayı öğreneceksiniz.

Bazen hangi dosya veya klasör kaynağının sonuç kümesindeki belirli bir satırla bağıntılı olduğunu bilmeniz gerekebilir.

sonuç kümesindeki dosya adlarını ve/veya yolu döndürmek için ve filename işlevini filepath kullanabilirsiniz. Alternatif olarak, verileri dosya adına ve/veya klasör yoluna göre filtrelemek için de kullanabilirsiniz. Bu işlevler, dosyaadı işlevi ve dosya yolu işlevinin söz dizimi bölümünde açıklanmıştır. Aşağıdaki bölümlerde örneklerle ilgili kısa açıklamalar bulabilirsiniz.

Ö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 kurulum betiğini 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ı

Bu işlev, satırın kaynağı olan 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 okunacağı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 WHERE yan tümcesinde filename() öğesinin nasıl kullanılabileceğini gösterir. Sorgunun OPENROWSET bölümündeki klasörün tamamına erişir ve WHERE yan tümcesindeki 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

Dosya yolu işlevi 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. OPENROWSET'te DATA_SOURCE kullanıldığında, DATA_SOURCE göre yolu 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 okunacağı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 WHERE yan tümcesinde filepath() öğesinin nasıl kullanılabileceğini gösterir.

Sorgunun OPENROWSET bölümünde joker karakterleri kullanabilir ve WHERE yan tümcesindeki 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ımlar

Sonraki makalede Parquet dosyalarını sorgulamayı öğreneceksiniz.