Share via


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, sorgularda dosya ve klasör adları hakkındaki meta veri bilgilerini kullanmayı öğreneceksiniz.

Bazen, sonuç kümesindeki belirli bir satırla hangi dosya veya klasör kaynağının 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. Ya da bunları kullanarak verileri dosya adına ve/veya klasör yoluna göre filtreleyebilirsiniz. Bu işlevler filename işlevi ve filepath işlevi 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

Dosyaadı

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

Aşağıdaki örnek, 2017'nin son üç ayı için NYC Yellow Taxi veri dosyalarını okur ve dosya başına sürüş 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];

Filepath

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, yolun parametresinde belirtilen konumda joker karakterle eşleşen 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 sürüş 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.