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:
- MEMBUAT KREDENSIAL CAKUPAN DATABASE (Transact-SQL)
- BUAT SUMBER DATA EKSTERNAL (TRANSACT-SQL)
- BUAT FORMAT FILE EKSTERNAL (TRANSACT-SQL)
- BUAT TABEL EKSTERNAL (Transact-SQL)
- MEMBUAT STATISTIK (Transact-SQL)
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:
- Hadoop
- Penyimpanan Blob Azure
- SQL Server
- Oracle
- Teradata
- MongoDB
- Jenis generik ODBC
- Penyimpanan objek yang kompatibel dengan S3
- CSV
- Tabel Delta
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;