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çindeOPENROWSET
kullanıldığında, yoluna göreDATA_SOURCE
yolunu 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;