Aracılığıyla paylaş


PolyBase Transact-SQL referansı

Şunlar için geçerlidir: SQL Server

Bu makalede, çeşitli dış veri kaynakları için veri sanallaştırma olarak adlandırılan dış verileri yerinde sorgulamak için PolyBase kullanma seçenekleri incelenir.

PolyBase'de kullanılan T-SQL söz dizimi

PolyBase'i kullanmak için dış verilerinize başvurmak için dış tablolar oluşturmanız gerekir. Başvurun:

Uyarı

PolyBase'i kullanmak için veritabanında sysadmin veya CONTROL SERVER düzeyinde izinlere sahip olmanız gerekir.

Tutorials

Sorgu örnekleri için bkz. PolyBase Sorguları.

Çeşitli dış veri kaynakları hakkında daha fazla eğitim için şunları inceleyin:

Dosya meta veri işlevleri

Bazen, hangi dosya veya klasör kaynağının sonuç kümesindeki belirli bir satırla ilişkili olduğunu bilmeniz gerekebilir.

Fonksiyonları filepath ve filename dosya adlarını ve/veya sonuç kümesinde yolu döndürmek için kullanabilirsin. Ya da dosya adı ve/veya klasör yoluna göre verileri filtrelemek için onları kullanabilirsiniz. Aşağıdaki bölümlerde, örnekler ile birlikte kısa açıklamalar bulabilirsiniz.

Dosya adı fonksiyonu

Bu fonksiyon, satırın geldiği dosya adını döndürür.

Dönüş veri tipi nvarchar(1024)'dir. En iyi performans için dosya adı fonksiyonunun sonucunu her zaman uygun veri tipine aktarın. Karakter veri tipi kullanıyorsanız, uygun uzunluk kullandığınızdan emin olun.

Aşağıdaki örnek, 2017 yılının son üç ayına ait NYC Yellow Taxi veri dosyalarını okuyor ve dosya başına yapılan yolculuk sayısını geri döndürüyor. Sorgu OPENROWSET kısmı 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 cümlede filename() nasıl WHERE kullanılabileceğini göstermektedir. Sorgu kısmındaki OPENROWSET tüm klasöre erişir ve maddedeki 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 fonksiyonu

Bu fonksiyon tam bir yol veya yolun bir kısmını döndürür:

  • Parametre olmadan çağrıldığında, bir satırın başladığı tam dosya yolunu döndürür.
  • Parametre ile çağrıldığında, parametrede belirtilen konumda joker kartla eşleşen yolun bir kısmını döndürür. Örneğin, parametre değeri 1, yolun ilk joker kartla eşleşen bir kısmını döndürür.

Dönüş veri tipi nvarchar(1024)'dir. En iyi performans için her zaman fonksiyonun filepath sonucunu uygun veri tipine aktarın. Karakter veri tipi kullanıyorsanız, uygun uzunluk kullandığınızdan emin olun.

Aşağıdaki örnek, 2017 yılının son üç ayına ait NYC Yellow Taxi veri dosyalarını okumaktadır. Dosya yolu başına gidiş sayısını döndürür. Sorgu OPENROWSET kısmı 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 cümlede filepath() nasıl WHERE kullanılabileceğini göstermektedir.

Sorgunun OPENROWSET bölümünde joker karakterleri kullanabilir ve ifadenin WHERE bölümünde 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;