Referensi PolyBase Transact-SQL

Berlaku untuk:SQL Server

Artikel ini meninjau opsi untuk menggunakan PolyBase untuk mengkueri data eksternal di tempat, yang disebut sebagai virtualisasi data, untuk berbagai sumber data eksternal.

Sintaks T-SQL yang digunakan dalam PolyBase

Untuk menggunakan PolyBase, Anda harus membuat tabel eksternal untuk mereferensikan data eksternal Anda. Lihat:

Catatan

Untuk menggunakan PolyBase, Anda harus memiliki izin tingkat sysadmin atau CONTROL SERVER pada database.

Tutorial

Untuk contoh kueri, lihat Kueri PolyBase.

Untuk tutorial selengkapnya tentang berbagai sumber data eksternal, tinjau:

Fungsi metadata file

Terkadang, Anda mungkin perlu mengetahui file atau sumber folder mana yang berkorelasi dengan baris tertentu dalam tataan hasil.

Anda dapat menggunakan fungsi filepath dan filename untuk mengembalikan nama file dan/atau jalur dalam tataan hasil. Atau, Anda dapat menggunakannya untuk memfilter data berdasarkan nama file dan/atau jalur folder. Di bagian berikut, Anda akan menemukan deskripsi singkat bersama sampel.

Fungsi filename

Fungsi ini menampilkan nama file asal baris tersebut.

Jenis data yang dikembalikan adalah nvarchar(1024). Demi performa optimal, selalu transmisikan hasil fungsi filename ke jenis data yang sesuai. Jika Anda menggunakan jenis data karakter, pastikan menggunakan panjang yang sesuai.

Contoh berikut membaca file data Taksi Kuning NYC selama tiga bulan terakhir di tahun 2017 dan menampilkan jumlah perjalanan per file. Bagian OPENROWSET kueri menentukan file mana yang akan dibaca.

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();

Contoh berikut menunjukkan cara filename() dapat digunakan dalam WHERE klausul untuk memfilter file yang akan dibaca. Ini mengakses seluruh folder di OPENROWSET bagian kueri dan memfilter file dalam WHERE klausa.

Hasil Anda akan sama dengan contoh sebelumnya.

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];

Fungsi filepath

Fungsi ini menampilkan jalur lengkap atau bagian dari jalur:

  • Ketika dipanggil tanpa parameter, menampilkan jalur file lengkap asal baris tersebut.
  • Saat dipanggil dengan parameter, mengembalikan bagian dari jalur yang cocok dengan wildcard pada posisi yang ditentukan dalam parameter . Misalnya, nilai parameter 1 akan mengembalikan bagian dari jalur yang cocok dengan kartubebas pertama.

Jenis data yang dikembalikan adalah nvarchar(1024). Untuk performa optimal, selalu berikan hasil filepath fungsi ke jenis data yang sesuai. Jika Anda menggunakan jenis data karakter, pastikan menggunakan panjang yang sesuai.

Contoh berikut membaca file data Taksi Kuning NYC selama tiga bulan terakhir di tahun 2017. Pembacaan ini menampilkan jumlah perjalanan per jalur file. Bagian OPENROWSET kueri menentukan file mana yang akan dibaca.

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;

Contoh berikut menunjukkan cara filepath() dapat digunakan dalam WHERE klausul untuk memfilter file yang akan dibaca.

Anda bisa menggunakan kartubebas di OPENROWSET bagian kueri dan memfilter file dalam WHERE klausa. Hasil Anda akan sama dengan contoh sebelumnya.

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;