Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru
Azure SQL Database
Azure SQL Managed Instance
SQL database di Microsoft Fabric
Virtualisasi data memungkinkan Anda menjalankan kueri Transact-SQL (T-SQL) melalui data eksternal tanpa memuatnya ke database Anda. Anda menentukan sumber data eksternal, format file opsional, dan tabel eksternal, lalu mengkueri tabel eksternal dengan SELECT seperti tabel lainnya.
Panduan ini membantu Anda:
- Pahami PolyBase mana yang menampilkan platform SQL dan dukungan versi Anda.
- Pilih antara
OPENROWSET, tabel eksternal, danBULK INSERTuntuk mengkueri atau menyerap data. - Ikuti tautan langkah demi langkah untuk skenario umum.
- Tinjau performa, pemecahan masalah, dan praktik terbaik untuk beban kerja produksi.
Dukungan platform
- PolyBase adalah fitur Microsoft SQL Database Engine yang mengimplementasikan virtualisasi data.
- PolyBase didukung di SQL Server 2016 dan versi berikutnya di Windows serta di SQL Server 2019 dan versi berikutnya di Linux.
- PolyBase tidak didukung di SQL Server 2017 di Linux.
- PolyBase tidak didukung di Azure SQL Database, tetapi Azure SQL Database menyediakan kemampuan virtualisasi data terkait melalui
OPENROWSETtabel eksternal. Untuk informasi selengkapnya, lihat Virtualisasi data dengan Azure SQL Database (Pratinjau). - PolyBase bukanlah fitur di Azure SQL Managed Instance secara nama, tetapi Azure SQL Managed Instance memiliki fitur virtualisasi data yang beroperasi serupa. Untuk informasi selengkapnya, lihat Virtualisasi data dengan Azure SQL Managed Instance.
- PolyBase tidak didukung di database SQL di Fabric, tetapi database SQL di Fabric menyediakan kemampuan virtualisasi data sendiri untuk data di OneLake. Untuk informasi lebih lanjut, lihat Virtualisasi Data dalam database SQL di Fabric.
- PolyBase bukan fitur di Fabric Data Warehouse. Untuk virtualisasi data di Fabric Data Warehouse, pertimbangkan Fabric OneLake Shortcuts. Untuk artikel tentang pemuatan data di Fabric Data Warehouse, lihat Data ingestion with T-SQL dan Dimensional modeling: Load tables.
Kasus penggunaan umum
Tabel berikut ini menjelaskan kemungkinan skenario penggunaan.
| Skenario | Pakai |
|---|---|
| Eksplorasi ad-hoc file | OPENROWSET(BULK ...) |
| Kueri file yang dapat digunakan ulang untuk BI atau pelaporan | Tabel eksternal di atas file |
| Kueri lintas database (SQL Server, Oracle, Teradata, MongoDB, ODBC) | Konektor PolyBase dengan tabel eksternal |
| Mengekspor hasil kueri ke file |
CREATE EXTERNAL TABLE AS SELECT (CETAS) |
| Penyerapan massal ke dalam tabel |
BULK INSERT atau OPENROWSET(BULK ...) dengan INSERT ... SELECT |
- Untuk eksplorasi file ad hoc, gunakan
OPENROWSET(BULK ...)untuk memeriksa file tanpa membuat tabel yang dapat digunakan ulang. - Untuk kueri file yang dapat digunakan ulang dalam skenario BI atau pelaporan, gunakan tabel eksternal di atas file untuk mempertahankan skema dan membagikan hasil di berbagai kueri.
- Untuk kueri lintas database, gunakan konektor PolyBase dengan tabel eksternal untuk mengakses sumber SQL Server, Oracle, Teradata, MongoDB, atau ODBC.
- Untuk mengekspor hasil kueri ke file, gunakan
CREATE EXTERNAL TABLE AS SELECT(CETAS) untuk menulis output Parquet atau CSV di luar database. - Untuk penghapusan massal ke dalam tabel, gunakan
BULK INSERTatauOPENROWSET(BULK ...)denganINSERT ... SELECTuntuk memuat data file ke dalam tabel basis data.
Fitur mana yang tersedia di mana?
Tabel berikut menunjukkan fitur inti PolyBase dan virtualisasi data yang tersedia di setiap platform SQL mulai dari SQL Server 2019. Untuk ketersediaan fitur di SQL Server 2016 dan SQL Server 2017 di Windows, lihat fitur dan batasan PolyBase. Gunakan tabel ini untuk menentukan apa yang dapat Anda lakukan di platform Anda sebelum Anda menggunakan panduan terperinci.
| Feature | SQL Server 2019 | SQL Server 2022 | SQL Server 2025 | Azure SQL Database | Azure SQL Managed Instance | Database SQL di Microsoft Fabric |
|---|---|---|---|---|---|---|
| Tabel eksternal | Yes | Yes | Yes | Yes | Yes | Yes |
| OPENROWSET (BULK) | Ya 1 | Yes | Yes | Yes | Yes | Yes |
| CETAS (ekspor) | No | Yes | Yes | No | Yes | No |
| File CSV atau terbatas | Ya 2 | Yes | Yes | Yes | Yes | Yes |
| File Parquet | No | Yes | Yes | Yes | Yes | Yes |
| Tabel Delta Lake | No | Yes | Yes | No | No | No |
| Menyambungkan ke SQL Server lain | Yes | Yes | Yes | No | No | No |
| Menyambungkan ke Azure SQL Database atau Azure SQL Managed Instance | Ya 3 | Ya 3 | Ya 3 | No | No | No |
| Menyambungkan ke Oracle / Teradata / MongoDB | Yes | Yes | Yes | No | No | No |
| Menyambungkan ke Azure Blob Storage | Yes | Yes | Yes | Yes | Yes | No |
| Menyambungkan ke ADLS Gen2 | Ya 5 | Yes | Yes | Yes | Yes | No |
| Menyambungkan ke penyimpanan yang kompatibel dengan S3 | No | Yes | Yes | No | No | No |
| Sambungkan ke OneLake (Fabric) | No | No | No | No | No | Yes |
| Komputasi tumpukan | Yes | Yes | Yes | No | No | No |
| Autentikasi Identitas Terkelola | No | No | Ya 4 | Yes | Yes | No |
1 SQL Server 2019 (15.x) mendukung jalur file lokal dan jaringan. Di SQL Server 2022 (16.x) dan versi yang lebih baru, OPENROWSET(BULK...) juga mendukung pembacaan dari penyimpanan cloud dengan FORMAT = 'PARQUET', FORMAT = DELTA, dan FORMAT = 'CSV'.
2 dukungan CSV di SQL Server 2019 (15.x) diperlukan Hadoop. Di SQL Server 2022 (16.x) dan versi yang lebih baru, CSV didukung secara asli tanpa Hadoop.
3 Menggunakan konektor SQL Server (sqlserver://). Kredensial yang dijangkau oleh cakupan database menargetkan endpoint SQL. Gunakan langkah yang sama seperti saat menghubungkan ke instance SQL Server lain.
4 Autentikasi Identitas Terkelola didukung untuk menyambungkan ke Azure Blob Storage (ABS) dan ADLS Gen2. Ini memerlukan SQL Server yang diaktifkan Azure Arc atau SQL Server di Komputer Virtual Azure untuk SQL Server lokal. Ini tersedia secara asli di Azure SQL Database dan Azure SQL Managed Instance.
5 SQL Server 2019 CU11 dan versi yang lebih baru mendukung Azure Data Lake Storage Gen2 dengan prefiks abfs atau abfss. Di SQL Server 2022 dan versi berikutnya, gunakan adls awalan.
- Tabel eksternal didukung di SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance, dan database SQL di Microsoft Fabric.
-
OPENROWSET (BULK)didukung di SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance, dan database SQL di Microsoft Fabric. SQL Server 2019 mendukung jalur file lokal maupun jaringan, sedangkan SQL Server 2022 dan versi yang lebih baru juga mendukung pembacaan dari penyimpanan cloud denganFORMAT = 'PARQUET',FORMAT = DELTA, danFORMAT = 'CSV'. - Ekspor CETAS tidak didukung di SQL Server 2019, Azure SQL Database, atau SQL database di Microsoft Fabric. Ekspor CETAS didukung di SQL Server 2022, SQL Server 2025, dan Azure SQL Managed Instance.
- File CSV dan file berformat pembatas didukung di SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance, dan Database SQL di Microsoft Fabric. SQL Server 2019 memerlukan Hadoop untuk dukungan CSV, sementara SQL Server 2022 dan versi selanjutnya mendukung CSV secara native tanpa Hadoop.
- File Parquet tidak didukung di SQL Server 2019. File Parquet didukung di SQL Server 2022, SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance, dan database SQL di Microsoft Fabric.
- Tabel Delta Lake tidak didukung di SQL Server 2019, Azure SQL Database, Azure SQL Managed Instance, atau database SQL di Microsoft Fabric. Tabel Delta Lake didukung di SQL Server 2022 dan SQL Server 2025.
- Menghubungkan ke instance SQL Server lain didukung di SQL Server 2019, SQL Server 2022, dan SQL Server 2025. Menghubungkan ke instance SQL Server lain tidak didukung dari Azure SQL Database, Azure SQL Managed Instance, atau database SQL di Microsoft Fabric.
- Menghubungkan ke Azure SQL Database atau Azure SQL Managed Instance didukung dari SQL Server 2019, SQL Server 2022, dan SQL Server 2025 dengan menggunakan konektor SQL Server. Kredensial yang dijangkau database menargetkan endpoint Azure SQL Database atau Azure SQL Managed Instance, dan langkah konfigurasinya sama seperti saat menghubungkan ke instance SQL Server lain. Koneksi ini tidak didukung dari Azure SQL Database, Azure SQL Managed Instance, atau database SQL di Microsoft Fabric.
- Menghubungkan ke Oracle, Teradata, atau MongoDB didukung dari SQL Server 2019, SQL Server 2022, dan SQL Server 2025. Koneksi ini tidak didukung dari Azure SQL Database, Azure SQL Managed Instance, atau database SQL di Microsoft Fabric.
- Menghubungkan ke Azure Blob Storage didukung oleh SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database, dan Azure SQL Managed Instance. Menghubungkan ke Azure Blob Storage tidak didukung dari database SQL di Microsoft Fabric.
- Menghubungkan ke ADLS Gen2 tidak didukung pada rilis SQL Server 2019 sebelum CU11 atau dari database SQL di Microsoft Fabric. Koneksi ke ADLS Gen2 didukung mulai SQL Server 2019 CU11, serta di SQL Server 2022, SQL Server 2025, Azure SQL Database, dan Azure SQL Managed Instance.
- Menghubungkan ke penyimpanan yang kompatibel dengan S3 tidak didukung oleh SQL Server 2019, Azure SQL Database, Azure SQL Managed Instance, atau database SQL di Microsoft Fabric. Koneksi ke penyimpanan yang kompatibel dengan S3 didukung mulai SQL Server 2022 dan SQL Server 2025.
- Koneksi ke OneLake didukung melalui database SQL di Microsoft Fabric. Menghubungkan ke OneLake tidak didukung dari SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database, atau Azure SQL Managed Instance.
- Komputasi pushdown didukung di SQL Server 2019, SQL Server 2022, dan SQL Server 2025. Komputasi pushdown tidak didukung di Azure SQL Database, Azure SQL Managed Instance, atau database SQL di Microsoft Fabric.
- Autentikasi Identitas Terkelola tidak didukung di SQL Server 2019 atau SQL Server 2022. Autentikasi Managed Identity didukung di SQL Server 2025 untuk koneksi ke Azure Blob Storage dan ADLS Gen2, serta membutuhkan SQL Server atau SQL Server yang mendukung Azure Arc pada mesin virtual Azure. Autentikasi Managed Identity juga didukung di Azure SQL Database dan Azure SQL Managed Instance, namun tidak didukung di database SQL di Microsoft Fabric.
Nota
Mulai SQL Server 2025 (17.x), mengkueri file data (CSV, Parquet, dan Delta) di Penyimpanan Azure Blob, ADLS Gen2, atau penyimpanan yang kompatibel dengan S3 adalah kemampuan mesin asli dan tidak lagi memerlukan penginstalan atau menjalankan layanan PolyBase. Konektor RDBMS (SQL Server, Oracle, Teradata, MongoDB, ODBC) masih memerlukan layanan PolyBase untuk diinstal dan dijalankan. SQL Server 2025 (17.x) juga menambahkan dukungan Linux untuk konektor ini, yang sebelumnya hanya tersedia di Windows.
Kueri data eksternal
Sebelum Anda memilih skenario tertentu, pahami tiga cara untuk mengkueri data eksternal:
| Pendekatan | Sintaksis | Gunakan ketika diperlukan | Authentication | Pemasangan PolyBase diperlukan |
|---|---|---|---|---|
| Kueri ad hoc OLE DB | OPENROWSET(provider, connection, query) |
Anda menginginkan kueri satu kali cepat tanpa objek persisten, atau memerlukan autentikasi ID Microsoft Entra | Autentikasi SQL, autentikasi Windows, ID Microsoft Entra (MSOLEDBSQL) | No |
| Kueri ad hoc pada berkas | OPENROWSET(BULK ...) |
Anda ingin menjelajahi data file dengan cepat atau menguji skema sebelum membuat tabel | Token SAS, kunci akses, Identitas Terkelola, ID Microsoft Entra | SQL Server 2022: Ya 1 SQL Server 2025 dan versi setelahnya: Tidak ada Azure SQL Database, Azure SQL Managed Instance, dan database SQL di Fabric: Built-in |
| Konektor data yang berkelanjutan |
CREATE EXTERNAL TABLE dengan sqlserver://, oracle://, teradata://, dll. |
Anda memerlukan akses yang berulang secara otomatis, tata kelola, statistik, dan komputasi terdorong untuk produksi | Autentikasi SQL saja | Yes |
1 Untuk akses file cloud di SQL Server 2022 (16.x), Anda harus menginstal fitur PolyBase, tetapi konektor penyimpanan kompatibel Azure Blob Storage, ADLS Gen2, dan S3 tidak bergantung pada layanan PolyBase. SQL Server 2025 (17.x) dan versi berikutnya memiliki dukungan native untuk CSV, Parquet, dan Delta tanpa menginstal atau menjalankan layanan PolyBase.
- Kueri ad hoc OLE DB digunakan
OPENROWSET(provider, connection, query)untuk akses cepat sekali pakai ke sumber data jarak jauh tanpa membuat objek persisten. Mereka dapat menggunakan autentikasi SQL, Windows authentication, atau Microsoft Entra ID dengan MSOLEDBSQL. Skenario ini tidak memerlukan instalasi PolyBase. - Kueri ad hoc pada file digunakan
OPENROWSET(BULK ...)untuk menjelajahi data file dengan cepat atau menguji skema sebelum membuat tabel. Mereka dapat menggunakan token SAS, kunci akses, Managed Identity, atau Microsoft Entra ID. SQL Server 2022 memerlukan instalasi fitur PolyBase untuk file cloud, tetapi tidak memerlukan layanan PolyBase. SQL Server 2025 dan versi berikutnya tidak memerlukan PolyBase untuk file cloud. Kueri ad hoc file terintegrasi di Azure SQL Database, Azure SQL Managed Instance, dan database SQL di Fabric. - Konektor data persisten menggunakan
CREATE EXTERNAL TABLEdengansqlserver://,oracle://,teradata://, dan lokasi serupa untuk akses berulang, tata kelola, statistik, dan komputasi pushdown dalam beban kerja produksi. Mereka memerlukan autentikasi SQL dan layanan PolyBase.
Panduan keputusan
| Skenario | Recommendation |
|---|---|
| Anda membutuhkan autentikasi Microsoft Entra ID untuk SQL jarak jauh, atau ingin menghindari layanan PolyBase. | Penggunaan OPENROWSET(MSOLEDBSQL, ...) (ad hoc, tanpa objek persisten). |
| Anda memerlukan tabel permanen, statistik, atau pemrosesan pushdown pada database jarak jauh. | Gunakan CREATE EXTERNAL TABLE dengan konektor PolyBase (sqlserver://, , oracle://, teradata://mongodb://, odbc://).
OPENROWSET tidak mendukung konektor. |
| Anda sedang menjelajahi file baru atau menguji skema. | Penggunaan OPENROWSET(BULK ...) (iterasi cepat, tanpa objek persisten). |
| Anda memasukkan data file ke dalam tabel dengan transformasi. | Gunakan INSERT ... SELECT dari OPENROWSET(BULK ...). |
| Anda membutuhkan tata kelola atau akses bersama untuk banyak pengguna atau aplikasi. | Gunakan CREATE EXTERNAL TABLE agar izin dan metadata terpusat. |
| Anda bekerja di database SQL di Fabric. | Gunakan OPENROWSET(BULK ...) untuk kueri OneLake ad hoc atau tabel eksternal untuk akses yang dapat digunakan kembali; untuk penyimpanan eksternal gunakan pintasan OneLake. |
- Jika Anda membutuhkan autentikasi Microsoft Entra ID untuk SQL jarak jauh atau ingin menghindari layanan PolyBase, gunakan
OPENROWSET(MSOLEDBSQL, ...)untuk kueri jarak jauh ad hoc tanpa objek persisten. - Jika Anda membutuhkan tabel persisten, statistik, atau komputasi pushdown ke database jarak jauh, gunakan
CREATE EXTERNAL TABLEdengan konektor PolyBase sepertisqlserver://,oracle://, ,teradata://mongodb://, danodbc://.OPENROWSETtidak mendukung konektor ini. - Jika Anda menjelajahi file baru atau menguji skema, gunakan
OPENROWSET(BULK ...)untuk iterasi cepat dan tanpa objek persisten. - Jika Anda memasukkan data file ke dalam tabel dengan transformasi, gunakan
INSERT ... SELECTdariOPENROWSET(BULK ...). - Jika Anda membutuhkan tata kelola atau akses bersama untuk banyak pengguna atau aplikasi, gunakan
CREATE EXTERNAL TABLEagar izin dan metadata terpusat. - Jika Anda bekerja di database SQL di Fabric, gunakan
OPENROWSET(BULK ...)untuk kueri ad hoc OneLake atau tabel eksternal untuk akses yang dapat digunakan ulang, dan gunakan pintasan OneLake untuk penyimpanan eksternal.
Pilih skenario Anda
Sekarang setelah Anda memahami tiga pendekatan, gunakan salah satu panduan berikut untuk mengimplementasikan kasus penggunaan spesifik Anda.
Berkas kueri (Parquet, CSV, atau Delta)
Jika data Anda berada dalam file Parquet, CSV, atau Delta di Azure Blob Storage, ADLS Gen2, penyimpanan yang kompatibel dengan S3, atau OneLake, ikuti salah satu panduan berikut:
| Skenario | Panduan yang direkomendasikan | Platforms |
|---|---|---|
| Kueri ad hoc cepat pada file Parquet atau CSV | Gunakan OPENROWSET. Tidak diperlukan tabel eksternal |
SQL Server 2022 (16.x) dan versi yang lebih baru, Azure SQL Database, Azure SQL Managed Instance, database SQL di Fabric |
| Kueri berulang pada file Parquet dengan skema persisten | Membuat tabel eksternal melalui Parquet | SQL Server 2022 (16.x) dan versi yang lebih baru, Azure SQL Database, Azure SQL Managed Instance, database SQL di Fabric |
| Mengkueri file CSV dengan tabel eksternal | Membuat tabel eksternal dengan format file untuk teks yang dibatasi | SQL Server 2019 (15.x) dan versi yang lebih baru, Azure SQL Database, Azure SQL Managed Instance, database SQL di Fabric |
| Menanyakan tabel Delta Lake | Membuat tabel eksternal dengan FILE_FORMAT = DeltaLakeFileFormat |
SQL Server 2022 (16.x) dan versi yang lebih baru |
| Mengekspor hasil kueri ke file Parquet atau CSV (CETAS) | Gunakan CREATE EXTERNAL TABLE AS SELECT |
SQL Server 2022 (16.x) dan versi yang lebih baru, Azure SQL Managed Instance |
- Untuk kueri ad hoc cepat terhadap file Parquet atau CSV, gunakan
OPENROWSET. Metode ini tidak memerlukan tabel eksternal. SQL Server 2022 (16.x) dan versi berikutnya, Azure SQL Database, Azure SQL Managed Instance, dan SQL database di Fabric mendukung pola ini. - Untuk kueri berulang pada file Parquet dengan skema persisten, gunakan tabel eksternal di atas Parquet. SQL Server 2022 (16.x) dan versi berikutnya, Azure SQL Database, Azure SQL Managed Instance, dan SQL database di Fabric mendukung pola ini.
- Untuk kueri pada file CSV, gunakan tabel eksternal dengan format file untuk teks yang dipisahkan. SQL Server 2019 (15.x) dan versi berikutnya, Azure SQL Database, Azure SQL Managed Instance, dan SQL database di Fabric mendukung pola ini.
- Untuk kueri pada tabel Delta Lake, gunakan tabel eksternal dengan
FILE_FORMAT = DeltaLakeFileFormat. SQL Server 2022 (16.x) dan versi selanjutnya mendukung pola ini. - Untuk mengekspor hasil kueri ke file Parquet atau CSV, gunakan
CREATE EXTERNAL TABLE AS SELECT. SQL Server 2022 (16.x) dan versi berikutnya serta Azure SQL Managed Instance mendukung pola ini.
Anda juga dapat mengikuti salah satu tutorial langkah demi langkah ini:
| Tutorial | Deskripsi |
|---|---|
| Mulai menggunakan PolyBase di SQL Server 2022 |
OPENROWSET Mencakup dengan Parquet dan CSV, tabel eksternal, dan navigasi folder. |
| Memvirtualisasi file parquet dalam penyimpanan objek yang kompatibel dengan S3 menggunakan PolyBase | Tutorial untuk SQL Server 2022 (16.x) dan versi yang lebih baru. |
| Virtualisasi file CSV dengan PolyBase | Tutorial untuk SQL Server 2022 (16.x) dan versi yang lebih baru. |
| Virtualisasi tabel delta dengan PolyBase | Tutorial untuk SQL Server 2022 (16.x) dan versi yang lebih baru. |
| Virtualisasi data dengan Azure SQL Database (Pratinjau) | Panduan Azure SQL Database untuk Parquet dan CSV. |
| Virtualisasi data dengan Azure SQL Managed Instance | Panduan Azure SQL Managed Instance untuk Parquet, CSV, dan CETAS. |
| Virtualisasi data dalam database SQL di Fabric | Database SQL dalam panduan Fabric untuk file OneLake. |
Menyambungkan ke instans SQL Server lain, Azure SQL Database, atau SQL Managed Instance
Di SQL Server 2019 (15.x) dan versi yang lebih baru, PolyBase dapat mengkueri tabel di instans SQL Server lain, Azure SQL Database, atau Azure SQL Managed Instance, tanpa menggunakan server tertaut.
Penting
Konektor sqlserver:// tidak didukung dalam database SQL di Fabric. Konektor PolyBase RDBMS menggunakan autentikasi SQL melalui CREATE DATABASE SCOPED CREDENTIAL dan tidak mendukung ID Microsoft Entra, Identitas Terkelola, atau autentikasi perwakilan layanan. Karena database SQL di Fabric memerlukan autentikasi Microsoft Entra, Anda tidak dapat menyambungkannya menggunakan PolyBase.
| Step | Apa yang harus dilakukan |
|---|---|
| 1. Instal PolyBase | Menginstal PolyBase di Windows atau Menginstal PolyBase di Linux |
| 2. Buat kredensial |
CREATE DATABASE SCOPED CREDENTIAL dengan target masuk |
| 3. Buat sumber data eksternal | CREATE EXTERNAL DATA SOURCE ... WITH (LOCATION = 'sqlserver://<server>') |
| 4. Buat tabel eksternal | CREATE EXTERNAL TABLE ... WITH (LOCATION = '<db>.<schema>.<table>') |
| 5. Kueri | SELECT * FROM <external_table> |
-
- Instal PolyBase di Windows atau Linux dengan menggunakan Instal PolyBase di Windows atau Instal PolyBase di Linux sebelum Anda mengonfigurasi akses ke data SQL eksternal.
-
- Buat kredensial cakupan database dengan login target menggunakan
CREATE DATABASE SCOPED CREDENTIALagar mesin dapat melakukan autentikasi ke server jarak jauh.
- Buat kredensial cakupan database dengan login target menggunakan
-
- Buat sumber data eksternal untuk SQL Server jarak jauh dengan menggunakan
CREATE EXTERNAL DATA SOURCE ... WITH (LOCATION = 'sqlserver://<server>').
- Buat sumber data eksternal untuk SQL Server jarak jauh dengan menggunakan
-
- Buat tabel eksternal dengan menggunakan
CREATE EXTERNAL TABLE ... WITH (LOCATION = '<db>.<schema>.<table>')untuk merepresentasikan tabel remote.
- Buat tabel eksternal dengan menggunakan
-
- Kueri tabel eksternal menggunakan
SELECT * FROM <external_table>.
- Kueri tabel eksternal menggunakan
Petunjuk / Saran
Konektor SQL Server (sqlserver://) juga berfungsi untuk Azure SQL Database dan Azure SQL Managed Instance. Gunakan langkah yang sama, dan atur LOCATION ke endpoint Azure SQL Database atau Azure SQL Managed Instance (misalnya, sqlserver://myserver.database.windows.net).
Untuk panduan terperinci, lihat Mengonfigurasi PolyBase untuk mengakses data eksternal di SQL Server.
Menyambungkan ke Oracle, Teradata, atau MongoDB
SQL Server 2019 (15.x) dan versi yang lebih baru dapat mengkueri Oracle, Teradata, MongoDB, dan Cosmos DB melalui konektor PolyBase ODBC.
| Sumber data | Panduan | Persyaratan |
|---|---|---|
| Oracle | Mengonfigurasi PolyBase untuk mengakses data eksternal di Oracle | SQL Server 2019 (15.x) dan versi yang lebih baru, driver klien Oracle |
| Teradata | Mengonfigurasi PolyBase untuk mengakses data eksternal di Teradata | SQL Server 2019 (15.x) dan versi yang lebih baru, driver ODBC Teradata |
| MongoDB / Cosmos DB | Mengonfigurasi PolyBase untuk mengakses data eksternal di MongoDB | SQL Server 2019 (15.x) dan versi yang lebih baru, driver ODBC MongoDB |
| Sumber data ODBC apa pun | Mengonfigurasi PolyBase untuk mengakses data eksternal dengan jenis generik ODBC | SQL Server 2019 (15.x) dan versi yang lebih baru (Windows) (Linux dimulai dengan SQL Server 2025 (17.x)) |
- Sumber data Oracle menggunakan panduan Configure PolyBase untuk mengakses data eksternal di Oracle dan memerlukan SQL Server 2019 (15.x) dan versi berikutnya serta driver klien Oracle.
- Sumber data Teradata menggunakan panduan Configure PolyBase untuk mengakses data eksternal di Teradata dan memerlukan SQL Server 2019 (15.x) dan versi selanjutnya serta driver Teradata ODBC.
- Sumber data MongoDB atau Cosmos DB menggunakan panduan Konfigurasi PolyBase untuk mengakses data eksternal di MongoDB dan memerlukan SQL Server 2019 (15.x) dan versi selanjutnya serta driver ODBC MongoDB.
- Setiap sumber ODBC dapat menggunakan panduan Konfigurasi PolyBase untuk mengakses data eksternal dengan tipe generik ODBC dan memerlukan SQL Server 2019 (15.x) dan versi berikutnya di Windows atau SQL Server 2025 (17.x) dan versi Linux yang lebih baru.
Menyambungkan ke Azure Blob Storage atau ADLS Gen2
| Platform SQL | Opsi autentikasi | Panduan |
|---|---|---|
| SQL Server 2022 (16.x) dan versi yang lebih baru | Token SAS, kunci akses, Identitas Terkelola (dimulai dengan SQL Server 2025 (17.x)) | Mengonfigurasi PolyBase untuk mengakses data eksternal di Azure Blob Storage |
| SQL Server 2019 (15.x) | Kunci akses (melalui konektor Hadoop) | Mengonfigurasi PolyBase untuk mengakses data eksternal di Azure Blob Storage |
| Azure SQL Database | Token SAS, Identitas Terkelola, Microsoft Entra pass-through | Virtualisasi data dengan Azure SQL Database (Pratinjau) |
| Azure SQL Managed Instance | Token SAS, Identitas Terkelola | Virtualisasi data dengan Azure SQL Managed Instance |
- SQL Server 2022 dan versi selanjutnya mendukung autentikasi Azure Blob Storage atau ADLS Gen2 dengan menggunakan token SAS, kunci akses, atau Managed Identity mulai dari SQL Server 2025 (17.x). Untuk informasi selengkapnya, lihat Mengonfigurasi PolyBase untuk mengakses data eksternal di Azure Blob Storage.
- SQL Server 2019 mendukung Azure Blob Storage atau ADLS Gen2 dengan menggunakan kunci akses melalui konektor Hadoop. Untuk informasi selengkapnya, lihat Mengonfigurasi PolyBase untuk mengakses data eksternal di Azure Blob Storage.
- Azure SQL Database mendukung Azure Blob Storage atau ADLS Gen2 dengan menggunakan token SAS, Managed Identity, atau autentikasi pass-through Microsoft Entra. Untuk informasi selengkapnya, lihat Virtualisasi data dengan Azure SQL Database (Pratinjau).
- Azure SQL Managed Instance mendukung Azure Blob Storage atau ADLS Gen2 dengan menggunakan token SAS atau Managed Identity. Untuk informasi selengkapnya, lihat Virtualisasi data dengan Azure SQL Managed Instance.
Di SQL Server 2022 (16.x), awalan URI berubah. Saat bermigrasi dari SQL Server 2019 (15.x) atau versi yang lebih lama:
-
Azure Blob Storage: Ubah
wasb[s]://menjadiabs:// -
ADLS Gen2: Ubah
abfs[s]://menjadiadls://
Untuk informasi selengkapnya, lihat Mengonfigurasi PolyBase untuk mengakses data eksternal di Azure Blob Storage.
Menyambungkan ke penyimpanan objek yang kompatibel dengan S3
SQL Server 2022 (16.x) dan versi yang lebih baru mendukung penyimpanan yang kompatibel dengan S3, seperti Amazon S3, MinIO, dan Ceph.
Untuk informasi selengkapnya, lihat Mengonfigurasi PolyBase untuk mengakses data eksternal di penyimpanan objek yang kompatibel dengan S3.
Mengekspor data dengan CREATE EXTERNAL TABLE AS SELECT (CETAS)
CETAS mengekspor hasil kueri ke file eksternal (Parquet atau CSV) di Penyimpanan Azure Blob, ADLS Gen2, atau penyimpanan yang kompatibel dengan S3.
| Platform SQL | Dukungan | Mengekspor format | Catatan |
|---|---|---|---|
| SQL Server 2022 (16.x) dan versi yang lebih baru. Ekspor ke ADLS Gen2 dengan CETAS memerlukan SQL Server 2022 CU5 atau versi yang lebih baru. | Yes | Parket, CSV | Memerlukan konfigurasi server: izinkan ekspor PolyBase. |
| Azure SQL Managed Instance | Yes | Parket, CSV | Dinonaktifkan secara default |
| Azure SQL Database | No | Tidak | Tidak tersedia |
| Basis data SQL dalam Fabric | No | Tidak | Tidak tersedia |
- SQL Server 2022 dan versi selanjutnya mendukung CETAS dan mengekspor file Parquet serta CSV. Pengaturan Konfigurasi Server: izinkan ekspor PolyBase diperlukan. Ekspor CETAS ke ADLS Gen2 tidak tersedia di rilis SQL Server 2022 sebelum CU5.
- Azure SQL Managed Instance mendukung CETAS dan mengekspor file Parquet dan CSV. Panduan Dinonaktifkan secara default menjelaskan status defaultnya.
- Azure SQL Database tidak mendukung CETAS.
- Database SQL di Fabric tidak mendukung CETAS.
Untuk referensi Transact-SQL, lihat CREATE EXTERNAL TABLE AS SELECT (CETAS).
Contoh Penggunaan Cepat
Contoh 1: Kueri ad hoc pada file Parquet (OPENROWSET)
Tidak diperlukan tabel eksternal. Berfungsi pada SQL Server 2022 (16.x) dan versi yang lebih baru, Azure SQL Database, Azure SQL Managed Instance, dan database SQL di Fabric.
SELECT TOP 10 *
FROM OPENROWSET (
BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet',
FORMAT = 'PARQUET'
) AS [result];
Contoh 2: Tabel eksternal melalui CSV di Azure Blob Storage
Contoh ini berlaku di semua platform SQL yang mendukung tabel eksternal melalui file CSV.
Langkah 1: Buat kunci master database (DMK). Langkah ini diperlukan karena kredensial menyimpan rahasia token SAS. Namun, Anda dapat melewati langkah ini jika menggunakan autentikasi Managed Identity atau Microsoft Entra.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';Langkah 2: Buat kredensial dengan token SAS. Hilangkan bagian depan
?.CREATE DATABASE SCOPED CREDENTIAL MyStorageCred WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = '<your_SAS_token>'; -- omit the leading '?'Langkah 3: Buat sumber data eksternal.
CREATE EXTERNAL DATA SOURCE MyAzureStorage WITH ( LOCATION = 'abs://mycontainer@mystorageaccount.blob.core.windows.net', CREDENTIAL = MyStorageCred );Langkah 4: Buat format file untuk CSV.
CREATE EXTERNAL FILE FORMAT CsvFormat WITH ( FORMAT_TYPE = DELIMITEDTEXT, FORMAT_OPTIONS ( FIELD_TERMINATOR = ',', STRING_DELIMITER = '"', FIRST_ROW = 2 ) );Langkah 5: Buat tabel eksternal.
CREATE EXTERNAL TABLE dbo.SalesExternal ( OrderId INT, OrderDate DATE, Amount DECIMAL (18, 2), Customer NVARCHAR (100) ) WITH ( DATA_SOURCE = MyAzureStorage, LOCATION = '/data/sales/', FILE_FORMAT = CsvFormat );Langkah 6: Mengkueri tabel eksternal.
SELECT * FROM dbo.SalesExternal WHERE OrderDate >= '2025-01-01';
Contoh 3: Mengkueri tabel di SQL Server lain
Contoh ini berfungsi pada SQL Server 2019 (15.x) dan versi yang lebih baru.
Langkah 1: Buat kunci master database (diperlukan karena kredensial menyimpan kata sandi).
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';Langkah 2: Buat kredensial untuk instans SQL Server jarak jauh.
CREATE DATABASE SCOPED CREDENTIAL RemoteSqlCred WITH IDENTITY = 'remote_user', SECRET = '<password>';Langkah 3: Buat sumber data eksternal.
CREATE EXTERNAL DATA SOURCE RemoteSqlServer WITH ( LOCATION = 'sqlserver://remote-server.contoso.com', PUSHDOWN = ON, CREDENTIAL = RemoteSqlCred );Langkah 4: Buat tabel eksternal (nama tiga bagian di
LOCATION).CREATE EXTERNAL TABLE dbo.RemoteCustomers ( CustomerId INT, CustomerName NVARCHAR (200) COLLATE SQL_Latin1_General_CP1_CI_AS ) WITH ( DATA_SOURCE = RemoteSqlServer, LOCATION = 'SalesDB.dbo.Customers' );Langkah 5: Kueri di seluruh server.
SELECT c.CustomerName, s.Amount FROM dbo.RemoteCustomers AS c INNER JOIN dbo.LocalSales AS s ON c.CustomerId = s.CustomerId;
Contoh 4: Mengekspor hasil ke Parquet dengan CETAS
Berfungsi pada SQL Server 2022 (16.x) dan versi yang lebih baru, Azure SQL Managed Instance.
Langkah 1: Aktifkan CETAS (hanya SQL Server).
EXECUTE sp_configure 'allow polybase export', 1; RECONFIGURE;Langkah 2: Buat kredensial dan sumber data (gunakan kembali dari contoh sebelumnya).
Langkah 3: Buat format file untuk ekspor Parquet.
CREATE EXTERNAL FILE FORMAT ParquetFormat WITH ( FORMAT_TYPE = PARQUET );Langkah 4: Ekspor hasil kueri.
CREATE EXTERNAL TABLE dbo.Sales2025Export WITH ( DATA_SOURCE = MyAzureStorage, LOCATION = '/exports/sales_2025.parquet', FILE_FORMAT = ParquetFormat ) AS SELECT * FROM Sales.Orders WHERE OrderDate >= '2025-01-01';
Blok penyusun T-SQL untuk PolyBase
Sebelum menerapkan skenario apa pun, pahami objek T-SQL inti yang digunakan PolyBase dan bagaimana mereka cocok bersama:
Diagram memperlihatkan objek T-SQL PolyBase dan hubungannya, dari autentikasi (kunci master database, kredensial) melalui sumber data dan format file ke metode kueri (Tabel Eksternal, OPENROWSET, BULK INSERT, CETAS).
- Untuk sintaks sumber data eksternal, lihat CREATE EXTERNAL DATA SOURCE.
- Untuk sintaks format file eksternal, lihat CREATE EXTERNAL FILE FORMAT.
- Untuk sintaks tabel eksternal, lihat CREATE EXTERNAL TABLE.
- Untuk sintaks akses data ad hoc, lihat OPENROWSET.
- Untuk sintaks CETAS, lihat CREATE EXTERNAL TABLE AS SELECT (CETAS).
Untuk referensi Transact-SQL lengkap untuk semua objek, lihat referensi Transact-SQL PolyBase.
Penting
Periksa pemetaan jenis data untuk format file eksternal Anda. Saat Anda membuat format file eksternal, atau file kueri menggunakan OPENROWSET, PolyBase secara otomatis memetakan jenis data sumber (Parquet, CSV, Delta, Oracle, Teradata, MongoDB) ke jenis data SQL Server. Jenis yang tidak cocok dapat menyebabkan pemotongan diam-diam, kehilangan presisi, atau kesalahan kueri. Misalnya, sebuah Parquet DECIMAL(38,18) dipetakan menjadi DECIMAL(18,0). Tinjau tabel pemetaan sebelum Anda menentukan kolom tabel eksternal atau WITH klausa. Untuk referensi lengkapnya, lihat Pemetaan jenis dengan PolyBase.
Kapan Anda perlu CREATE MASTER KEY?
Kunci master database (DMK) dibuat menggunakan CREATE MASTER KEY sintaksis. DMK mengenkripsi rahasia yang disimpan di dalam kredensial yang dicakup oleh database. Ini diperlukan hanya ketika kredensial berisi nilai rahasia, yaitu, ketika menyimpan kata sandi, token, atau kunci akses.
DMK diperlukan (kredensial menyimpan rahasia):
Jenis autentikasi IDENTITYnilaiMemiliki rahasia DMK token SAS 'SHARED ACCESS SIGNATURE'Yes Required Kunci akses S3 'S3 ACCESS KEY'Yes Required Login SQL / autentikasi dasar '<username>'Yes Required Kunci akses akun penyimpanan '<storage_account_name>'Yes Required - Kredensial token SAS menggunakan
IDENTITY = 'SHARED ACCESS SIGNATURE'dan menyimpan nilai rahasia, sehingga memerlukan kunci master basis data. - Kredensial kunci akses S3 menggunakan
IDENTITY = 'S3 ACCESS KEY'dan menyimpan nilai rahasia, sehingga memerlukan kunci master basis data.- Login SQL atau kredensial autentikasi dasar menggunakan
IDENTITY = '<username>'dan menyimpan nilai rahasia, sehingga memerlukan kunci master basis data.
- Login SQL atau kredensial autentikasi dasar menggunakan
- Kredensial akses kunci penyimpanan menggunakan
IDENTITY = '<storage_account_name>'dan menyimpan nilai rahasia, sehingga memerlukan kunci master basis data.
- Kredensial token SAS menggunakan
DMK tidak diperlukan (tidak ada rahasia yang disimpan):
Jenis autentikasi IDENTITYnilaiMemiliki rahasia DMK Identitas yang Dikelola 'Managed Identity'No Tidak diperlukan Microsoft Entra ID 'User Identity'atau'Managed Identity'No Tidak diperlukan - Kredensial Managed Identity menggunakan
IDENTITY = 'Managed Identity'dan tidak menyimpan rahasia, sehingga tidak memerlukan kunci master database. - Kredensial Microsoft Entra ID menggunakan
IDENTITY = 'User Identity'atauIDENTITY = 'Managed Identity'dan tidak menyimpan rahasia, sehingga tidak memerlukan kunci master database.
- Kredensial Managed Identity menggunakan
Petunjuk / Saran
Jika pernyataan Anda CREATE DATABASE SCOPED CREDENTIAL tidak menyertakan rahasia, Anda tidak perlu DMK. Autentikasi Identitas Terkelola dan ID Microsoft Entra mendelegasikan kepercayaan ke platform. Database tidak menyimpan kata sandi atau token.
contoh :
Dalam contoh kueri ini, DMK diperlukan (Kredensial menyimpan token SAS).
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
CREATE DATABASE SCOPED CREDENTIAL SasCred
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<your_SAS_token>';
Dalam contoh kueri ini, DMK tidak diperlukan (Identitas Terkelola, tanpa rahasia).
CREATE DATABASE SCOPED CREDENTIAL ManagedIdentityCred
WITH IDENTITY = 'Managed Identity';
Dalam contoh kueri ini, DMK tidak diperlukan (Microsoft Entra pass-through, tanpa rahasia).
CREATE DATABASE SCOPED CREDENTIAL EntraIdCred
WITH IDENTITY = 'User Identity';
Akses data jarak jauh dengan OPENROWSET dan tabel eksternal
SQL Server menawarkan tiga pendekatan berbeda untuk mengkueri data jarak jauh. Anda dapat memilih pendekatan yang tepat saat memahami perbedaan sintaks, autentikasi, dan arsitektur.
| Pendekatan | Sintaksis | Menyambungkan ke | Authentication | Layanan PolyBase | Platforms |
|---|---|---|---|---|---|
| Kueri OLE DB | OPENROWSET(provider, connection, query) |
Sumber OLE DB apa pun melalui MSOLEDBSQL, SQLOLEDB, atau penyedia lainnya | Autentikasi SQL, autentikasi Windows, ID Microsoft Entra (MSOLEDBSQL) | No | SQL Server (semua versi yang didukung) |
| Kueri file di SQL Server 2022 (16.x) dan SQL Server 2019 (15.x) | OPENROWSET(BULK ...) |
File di disk, jaringan, atau cloud lokal (Azure Blob, ADLS, S3, OneLake) | Token SAS, kunci akses, Identitas Terkelola, ID Microsoft Entra | Ya untuk cloud 1; Tidak untuk lokal | SQL Server 2022 (16.x) dan SQL Server 2019 (15.x) |
| Kueri file di SQL Server 2025 (17.x) dan versi selanjutnya | OPENROWSET(BULK ...) |
File di disk, jaringan, atau cloud lokal (Azure Blob, ADLS, S3, OneLake) | Token SAS, kunci akses, Identitas Terkelola, ID Microsoft Entra | No | SQL Server 2022 (16.x) dan versi yang lebih baru, Azure SQL Database, Azure SQL Managed Instance, database SQL di Fabric |
| Konektor PolyBase |
CREATE EXTERNAL TABLE dengan CREATE EXTERNAL DATA SOURCE menggunakan sqlserver://, oracle://, teradata://, mongodb://, odbc:// |
Sumber SQL Server Jarak Jauh, Oracle, Teradata, MongoDB, ODBC | Autentikasi SQL saja | Yes | SQL Server 2019 (15.x) dan versi yang lebih baru (Windows); SQL Server 2025 (17.x) dan versi yang lebih baru (Linux) |
1 Untuk akses file cloud di SQL Server 2022 (16.x), fitur PolyBase harus diinstal.
- Kueri OLE DB digunakan
OPENROWSET(provider, connection, query)untuk terhubung ke sumber OLE DB mana pun melalui MSOLEDBSQL, SQLOLEDB, atau penyedia lain pada semua versi SQL Server yang didukung. Mereka mendukung autentikasi SQL, Windows authentication, dan Microsoft Entra ID dengan MSOLEDBSQL, dan tidak memerlukan layanan PolyBase untuk diinstal. - Kueri file menggunakan
OPENROWSET(BULK ...)untuk membaca file di disk lokal, berbagi pakai jaringan, atau penyimpanan cloud seperti Azure Blob Storage, ADLS, S3, atau OneLake menggunakan token SAS, kunci akses, Managed Identity, atau Microsoft Entra ID. File ini didukung untuk file lokal dan jaringan di SQL Server 2005 dan versi berikutnya, untuk file cloud di SQL Server 2022 (16.x) dan versi berikutnya, serta di Azure SQL Database, Azure SQL Managed Instance, dan database SQL di Fabric. Kueri file tidak memerlukan layanan PolyBase untuk file lokal atau untuk file cloud di SQL Server 2022 (16.x) dan versi yang lebih baru. - Konektor PolyBase menggunakan
CREATE EXTERNAL TABLEdenganCREATE EXTERNAL DATA SOURCEdan lokasisqlserver://,oracle://,teradata://,mongodb://, atauodbc://untuk terhubung ke sumber SQL Server, Oracle, Teradata, MongoDB, atau ODBC di jarak jauh. Mereka memerlukan otentikasi SQL dan layanan PolyBase di SQL Server 2019 (15.x) dan versi berikutnya di Windows dan SQL Server 2025 (17.x) serta versi Linux yang lebih baru. Untuk informasi selengkapnya, lihat CREATE EXTERNAL DATA SOURCE (Transact-SQL).
Kapan menggunakan setiap pendekatan
Gunakan OLE DB OPENROWSET untuk:
- Gunakan OLE DB
OPENROWSETuntuk kueri ad hoc cepat sekali pakai tanpa membuat objek persisten. - Gunakan OLE DB
OPENROWSETuntuk Microsoft Entra ID atau autentikasi Managed Identity melalui MSOLEDBSQL. - Gunakan OLE DB
OPENROWSETuntuk menghindari ketergantungan layanan PolyBase. - Gunakan OLE DB
OPENROWSETuntuk terhubung ke sumber data mana pun yang memiliki penyedia OLE DB.
Gunakan File OPENROWSET(BULK) untuk:
- Gunakan file
OPENROWSET(BULK ...)untuk eksplorasi file ad hoc dan penemuan skema. - Gunakan file
OPENROWSET(BULK ...)untuk transformasi cepat dan pratinjau sebelum Anda berkomitmen pada definisi tabel. - Gunakan file
OPENROWSET(BULK ...)untuk transformasi kolom inline yang fleksibel seperti casting, filtering, dan computed columns. - Gunakan file
OPENROWSET(BULK ...)untuk data yang tidak sering berubah dan tidak memerlukan metadata persisten.
Gunakan konektor PolyBase dengan CREATE EXTERNAL TABLE untuk:
- Gunakan konektor PolyBase dengan
CREATE EXTERNAL TABLEuntuk definisi tabel persisten yang dapat digunakan kembali dan diakses oleh banyak pengguna atau aplikasi. - Gunakan konektor PolyBase dengan
CREATE EXTERNAL TABLEuntuk beban kerja produksi yang memerlukan statistik dan pengoptimalan rencana kueri. - Gunakan konektor PolyBase dengan
CREATE EXTERNAL TABLEuntuk komputasi pushdown pada sumber jarak jauh seperti Oracle dan SQL Server. - Gunakan konektor PolyBase dengan
CREATE EXTERNAL TABLEuntuk tata kelola dan keamanan bersama; setelah tabel dibuat, pengguna hanya memerlukan izinSELECT. - Gunakan konektor PolyBase dengan
CREATE EXTERNAL TABLEsaat autentikasi SQL tersedia untuk sumber jarak jauh.
OPENROWSET (OLE DB) - kueri jarak jauh ad hoc (tidak diperlukan layanan PolyBase)
Bentuk OPENROWSET OLE DB terhubung ke sumber data jarak jauh melalui penyedia OLE DB, menjalankan kueri pass-through, dan mengembalikan hasilnya sebagai set baris. Ini adalah alternatif ad hoc sekali pakai untuk server tertaut. Tidak ada metadata persisten yang dibuat. Sintaks ini tidak memerlukan layanan PolyBase, dan tidak mendukung file cloud atau sumber data eksternal.
Contoh kueri ini tersambung ke SQL Server jarak jauh melalui OLE DB (bukan PolyBase).
SELECT *
FROM OPENROWSET (
'MSOLEDBSQL',
'Server=remote-server;Database=AdventureWorks;Trusted_Connection=yes;',
'SELECT TOP 10 * FROM AdventureWorks.Sales.SalesOrderHeader'
);
OPENROWSET(BULK) - kueri berbasis file (PolyBase)
Bentuk BULK dari OPENROWSET membaca data langsung dari berkas-berkas. Pada SQL Server 2019 (15.x) dan versi yang lebih lama, SQL Server membaca dari jalur file lokal atau UNC dan memerlukan file format. Di SQL Server 2022 (16.x) dan versi yang lebih baru, Anda dapat membaca dari penyimpanan cloud menggunakan parameter DATA_SOURCE dan FORMAT. Pendekatan ini adalah versi terintegrasi PolyBase yang digunakan untuk virtualisasi data.
Dalam konteks PolyBase dan virtualisasi data, ketika panduan ini mengacu pada OPENROWSET, itu berarti sintaks OPENROWSET(BULK ...) dengan klausa FORMAT untuk menjalankan kueri pada file eksternal.
contoh :
Contoh kueri ini membaca file Parquet dari Azure Blob Storage (SQL Server 2022 dan versi yang lebih baru).
SELECT TOP 10 *
FROM OPENROWSET (
BULK 'data/sales/*.parquet',
DATA_SOURCE = 'MyAzureStorage',
FORMAT = 'PARQUET'
) AS [result];
Contoh kueri ini membaca file Parquet dengan jalur sebaris (Azure SQL Database, Azure SQL Managed Instance).
SELECT TOP 10 *
FROM OPENROWSET (
BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet',
FORMAT = 'PARQUET'
) AS [result];
Kapan menggunakan OPENROWSET vs. tabel eksternal
Baik OPENROWSET(BULK ...) maupun tabel eksternal memungkinkan Anda untuk mengkueri data eksternal dengan T-SQL, namun keduanya dirancang untuk kasus penggunaan yang berbeda. Tabel berikut ini meringkas perbedaan utama untuk membantu Anda memutuskan pendekatan mana yang sesuai dengan skenario Anda.
| Kemampuan | OPENROWSET(BULK ...) |
Tabel eksternal |
|---|---|---|
| Purpose | Eksplorasi langsung dan kueri sekali pakai | Definisi tabel yang persisten dan dapat digunakan kembali |
| Metadata disimpan dalam database | Tidak. Tidak ada yang disimpan setelah kueri dijalankan | Ya. Definisi tabel, sumber data, dan format file disimpan sebagai objek database |
| Definisi skema | Disimpulkan secara otomatis dari file (Parquet) atau ditentukan secara langsung dengan klausa WITH |
Ditentukan secara eksplisit dalam CREATE EXTERNAL TABLE pernyataan |
| Permissions |
ADMINISTER BULK OPERATIONS Memerlukan ADMINISTER DATABASE BULK OPERATIONS atau ADMINISTER BULK OPERATIONS |
Setelah dibuat, izin standar SELECT pada tabel sudah cukup |
| Kolom terhitung | Ya. Tambahkan ekspresi dan kolom komputasi dalam SELECT daftar; fungsi metadata seperti filename() dan filepath() hanya tersedia di sini. |
Tidak. Daftar kolom tetap; melakukan transformasi dalam tampilan atau dalam kueri yang membaca tabel eksternal |
| Statistik | Azure SQL Managed Instance: statistik kolom tunggal yang dibuat secara manual melalui sys.sp_create_openrowset_statistics. Lihat Statistik manual OPENROWSET. SQL Server 2022 (16.x) dan versi berikutnya, Azure SQL Database, database SQL di Fabric: membuat statistik secara otomatis pada predikat. Statistik manual OPENROWSET tidak didukung di SQL Server. |
Dukungan penuh CREATE STATISTICS pada semua platform, ditambah pembuatan otomatis di SQL Server 2022 (16.x) dan versi yang lebih baru. Lihat Membuat statistik manual tabel eksternal. |
| Pushdown | Dukungan terbatas. Mesin mungkin mendorong filter ke bawah ke pemindaian file tetapi tidak ada pushdown ke sumber RDBMS jarak jauh | Ya. Mendukung komputasi pushdown untuk konektor RDBMS (SQL Server, Oracle, Teradata, MongoDB) |
| Pilihan terbaik untuk | Eksplorasi data, penemuan skema, kueri prototipe, pemuatan data satu kali, transformasi fleksibel | Beban kerja produksi, kueri berulang, akses bersama untuk semua pengguna, dasbor, dan pelaporan |
-
OPENROWSET(BULK ...)Terbaik untuk eksplorasi ad hoc dan kueri satu kali, sementara tabel eksternal lebih baik untuk definisi tabel yang persisten dan dapat digunakan ulang. -
OPENROWSET(BULK ...)tidak menyimpan metadata di database setelah query dijalankan, sementara tabel eksternal menyimpan definisi tabel, sumber data, dan format file sebagai objek database. -
OPENROWSET(BULK ...)menentukan skema secara otomatis dari file Parquet atau mendefinisikan skema secara langsung dengan klausaWITH, sementara tabel eksternal mendefinisikan skema secara eksplisit dalam pernyataanCREATE EXTERNAL TABLE. -
OPENROWSET(BULK ...)membutuhkanADMINISTER BULK OPERATIONSatauADMINISTER DATABASE BULK OPERATIONS, sementara tabel eksternal dapat diquery oleh pengguna yang hanya membutuhkan izin standarSELECTsetelah tabel tersebut ada. -
OPENROWSET(BULK ...)mendukung kolom terhitung dalam kueri dan fungsi metadata sepertifilename()danfilepath(), sedangkan tabel eksternal memiliki daftar kolom yang tetap dan memerlukan transformasi dalam tampilan atau dalam kueri yang membaca tabel eksternal. -
OPENROWSET(BULK ...)memiliki dukungan statistik yang terbatas: Azure SQL Managed Instance dapat menggunakansys.sp_create_openrowset_statisticsuntuk statistik satu kolom, tetapi SQL Server 2022 (16.x) dan versi yang lebih baru, Azure SQL Database, serta database SQL di Fabric secara otomatis membuat statistik pada predikat. Statistik manualOPENROWSETtidak didukung di SQL Server, Azure SQL Database, dan SQL database di Fabric. Tabel eksternal mendukung kemampuan penuhCREATE STATISTICSdi semua platform serta statistik otomatis di SQL Server 2022 (16.x) dan versi berikutnya, Azure SQL Database, dan database SQL di Fabric. Lihat statistik manual OPENROWSET dan membuat statistik manual untuk tabel eksternal. -
OPENROWSET(BULK ...)hanya mendukung pushdown terbatas dan tidak mendukung pushdown ke sumber RDBMS jarak jauh, sedangkan tabel eksternal mendukung komputasi pushdown untuk konektor RDBMS. -
OPENROWSET(BULK ...)paling cocok untuk eksplorasi data, penemuan skema, pembuatan prototipe, pemuatan satu kali, dan transformasi yang fleksibel, sedangkan tabel eksternal paling cocok untuk beban kerja produksi, kueri berulang, akses bersama, dasbor, dan pelaporan.
Gunakan OPENROWSET saat Anda membutuhkan fleksibilitas
Gunakan OPENROWSET untuk menjelajahi file, menguji skema yang berbeda, atau menambahkan kolom dan transformasi komputasi tanpa membuat objek persisten apa pun. Misalnya, Anda dapat mengekstrak jalur file sebagai kolom, mentransmisikan jenis data sebaris, atau memfilter ekspresi komputasi dalam satu kueri.
Contoh kueri ini mencakup kolom dan transformasi komputasi:
SELECT result.filename() AS [FileName],
result.filepath(1) AS [Year],
result.filepath(2) AS [Month],
CAST (OrderDate AS DATE) AS OrderDate,
Amount,
OrderDate
FROM OPENROWSET (
BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*/*/*/*.parquet',
FORMAT = 'PARQUET'
) AS result
WHERE result.filepath(1) = '2025';
Petunjuk / Saran
Fungsi filepath() dan filename() tersedia di Azure SQL Database, Azure SQL Managed Instance, dan SQL Server 2022 (16.x) dan versi yang lebih baru. Mereka memungkinkan Anda memfilter pada bagian jalur file (eliminasi partisi) dan mengekspos nama file sumber sebagai kolom, yang tidak secara langsung dimungkinkan dengan tabel eksternal.
Menggunakan tabel eksternal saat Anda memerlukan persistensi dan tata kelola
Gunakan tabel eksternal saat beberapa pengguna atau aplikasi perlu mengkueri data eksternal yang sama berulang kali. Anda menentukan skema, sumber data, dan kredensial sekali dan menyimpannya di database. Konsumen hanya memerlukan SELECT izin akses terhadap tabel.
Tabel eksternal juga mendukung statistik, yang digunakan pengoptimal kueri untuk membangun rencana eksekusi yang lebih baik. Anda dapat membuat statistik secara manual atau membiarkan mesin membuatnya secara otomatis (SQL Server 2022 (16.x) dan versi yang lebih baru).
Contoh kueri ini membuat statistik pada tabel eksternal untuk rencana kueri yang lebih baik.
CREATE STATISTICS Stats_OrderDate
ON dbo.SalesExternal(OrderDate)
WITH FULLSCAN;
Untuk informasi selengkapnya tentang statistik untuk kedua pendekatan, lihat Pertimbangan performa PolyBase - Statistik.
BULK INSERT vs. OPENROWSET(BULK): Mana yang harus saya gunakan?
Baik BULK INSERT dan OPENROWSET(BULK ...) mengimpor data dari file ke SQL Server dengan menggunakan mesin pemuatan massal yang sama dan mendasar. Namun, mereka berbeda dalam sintaksis, fleksibilitas, dan apa yang dapat Anda lakukan dengan hasilnya. Tabel berikut ini meringkas perbedaan utama:
Nota
Pernyataan mandiri BULK INSERT tidak didukung di database SQL di Fabric. Untuk menginput data, gunakan INSERT ... SELECT dengan OPENROWSET(BULK ...) melawan OneLake.
| Kemampuan | BULK INSERT |
OPENROWSET(BULK ...) |
|---|---|---|
| Tujuan dasar | Memuat data dari file langsung ke tabel target | Mengembalikan kumpulan baris yang Anda gunakan dalam pernyataan SELECT atau INSERT ... SELECT |
| Pola penggunaan | Pernyataan mandiri: BULK INSERT <table> FROM '<file>' |
Harus digunakan di dalam kueri: SELECT * FROM OPENROWSET(BULK ...) atau INSERT INTO <table> SELECT * FROM OPENROWSET(BULK ...) |
| Membutuhkan tabel target? | Ya. Selalu menulis langsung ke tabel | Tidak. Anda dapat SELECT darinya tanpa menyisipkannya ke tempat mana pun, atau menyisipkannya ke dalam tabel atau tabel sementara. |
| Transformasi kolom selama pemuatan | Dukungan terbatas. Data mengalir dari file ke tabel seperti adanya (pemetaan dikontrol oleh format file atau urutan kolom) | Dukungan penuh. Anda dapat menambahkan ekspresi, CASTWHERE filter, JOIN tabel lain, dan kolom komputasi di sekitarnyaSELECT |
| Petunjuk tabel | Klausul WITH ini mencakup dukungan untuk BATCHSIZE, , CHECK_CONSTRAINTSFIRE_TRIGGERS, KEEPIDENTITY, KEEPNULLS, TABLOCK, dan lainnya |
Mendukung petunjuk tabel melalui INSERT ... SELECT * FROM OPENROWSET(BULK ...) WITH (TABLOCK, IGNORE_CONSTRAINTS, ...) sintaks |
| Impor nilai tunggal objek besar (LOB) | Tidak didukung | Ya.
SINGLE_BLOBMendukung , SINGLE_CLOB, SINGLE_NCLOB untuk mengimpor seluruh file sebagai satu nilai varbinary(max), varchar(max), atau nvarchar(max) |
| Format file | Ya. Didukung melalui (XML dan non-XML) | Ya. Didukung (XML dan non-XML) |
| Akses file di cloud |
DATA_SOURCEmendukung Azure Blob Storage in SQL Server 2017 (14.x) dan versi berikutnya, Azure SQL Database, dan Azure SQL Managed Instance. SQL Server 2019 CU11 dan pembaruan setelahnya juga mendukung ADLS Gen2. Penyimpanan kompatibel dengan S3 tidak didukung. |
DATA_SOURCEmendukung Azure Blob Storage in SQL Server 2017 (14.x) dan versi berikutnya, ADLS Gen2 di SQL Server 2019 CU11 dan versi berikutnya, serta penyimpanan kompatibel S3 di SQL Server 2022 (16.x) dan versi berikutnya. Azure SQL Database dan Azure SQL Managed Instance mendukung Azure Blob Storage dan ADLS Gen2. Database SQL di Fabric mendukung OneLake dan penyimpanan eksternal melalui pintasan OneLake. |
| File Parquet atau Delta | Tidak didukung. Hanya teks CSV/dibatasi | Ya. SQL Server 2022 (16.x) dan versi yang lebih baru, Azure SQL Managed Instance, dan Azure SQL Database mendukung FORMAT = 'PARQUET' dan FORMAT = 'DELTA'; database SQL di Fabric mendukung FORMAT = 'PARQUET', tetapi tidak DELTA. Untuk informasi selengkapnya, lihat OPENROWSET BULK (Transact-SQL). |
| Izin diperlukan |
ADMINISTER BULK OPERATIONS atau ADMINISTER DATABASE BULK OPERATIONS, plus INSERT pada tabel target |
ADMINISTER BULK OPERATIONS atau ADMINISTER DATABASE BULK OPERATIONS |
| Pengelogan minimal | Ya. Didukung di bawah model pemulihan sederhana atau dicatat massal dengan TABLOCK |
Ya. Didukung saat digunakan dengan INSERT ... SELECT dan TABLOCK |
-
BULK INSERTmemuat data dari file langsung ke dalam tabel target, sedangkanOPENROWSET(BULK ...)mengembalikan kumpulan baris yang dapat Anda gunakan dalam pernyataanSELECTatauINSERT ... SELECT. -
BULK INSERTadalah pernyataan mandiri, sementaraOPENROWSET(BULK ...)harus digunakan di dalam kueri sepertiSELECT * FROM OPENROWSET(BULK ...)atauINSERT INTO <table> SELECT * FROM OPENROWSET(BULK ...). -
BULK INSERTselalu menulis langsung ke tabel target, sedangkanOPENROWSET(BULK ...)dapatSELECTdari file tanpa memasukkannya ke mana pun atau ke tabel apa pun maupun tabel sementara. -
BULK INSERTmemiliki dukungan terbatas untuk transformasi kolom karena data mengalir dari file ke tabel as-is, dengan pemetaan dikendalikan oleh format file atau urutan kolom.OPENROWSET(BULK ...)mendukung ekspresi,CAST, filterJOIN,SELECT, dan kolom terhitung dalamWHEREdi sekitarnya. -
BULK INSERTmenggunakanWITHklausa untukBATCHSIZE,CHECK_CONSTRAINTS,FIRE_TRIGGERS,KEEPIDENTITY,KEEPNULLSTABLOCKdan petunjuk lainnya.OPENROWSET(BULK ...)mendukung petunjuk tabel melaluiINSERT ... SELECT * FROM OPENROWSET(BULK ...) WITH (TABLOCK, IGNORE_CONSTRAINTS, ...). -
BULK INSERTtidak mendukung impor nilai tunggal objek besar.OPENROWSET(BULK ...)mendukungSINGLE_BLOB,SINGLE_CLOB, danSINGLE_NCLOBuntuk mengimpor seluruh file sebagai satu nilai varbinary(max), varchar(max), atau nvarchar(max), masing-masing. - Baik
BULK INSERTmaupunOPENROWSET(BULK ...)mendukung berkas berformat XML dan non-XML. - Untuk akses file cloud dengan
BULK INSERT, parameter iniDATA_SOURCEmendukung Azure Blob Storage di SQL Server 2017 (14.x) dan versi berikutnya, Azure SQL Database, dan Azure SQL Managed Instance. SQL Server 2019 CU11 dan pembaruan setelahnya juga mendukung ADLS Gen2, tetapiBULK INSERTtidak mendukung penyimpanan yang kompatibel dengan S3. UntukOPENROWSET(BULK ...),DATA_SOURCEmendukung Azure Blob Storage di SQL Server 2017 (14.x) dan versi berikutnya, ADLS Gen2 di SQL Server 2019 CU11 dan versi berikutnya, serta penyimpanan kompatibel S3 di SQL Server 2022 (16.x) dan versi berikutnya. Azure SQL Database dan Azure SQL Managed Instance mendukung Azure Blob Storage dan ADLS Gen2. Database SQL di Fabric mendukung OneLake dan penyimpanan eksternal melalui pintasan OneLake. -
BULK INSERTtidak mendukung file Parquet atau Delta dan hanya mendukung file CSV atau teks yang dipisahkan dengan delimiter.OPENROWSET(BULK ...)mendukungFORMAT = 'PARQUET'danFORMAT = 'DELTA'dalam SQL Server 2022 (16.x) dan versi berikutnya, Azure SQL Database, dan Azure SQL Managed Instance. Database SQL di Fabric mendukungFORMAT = 'PARQUET'tetapi tidakFORMAT = 'DELTA'. Untuk informasi selengkapnya, lihat OPENROWSET BULK (Transact-SQL). -
BULK INSERTmemerlukanADMINISTER BULK OPERATIONSatauADMINISTER DATABASE BULK OPERATIONSplusINSERTizin pada tabel target, sementaraOPENROWSET(BULK ...)memerlukanADMINISTER BULK OPERATIONSatauADMINISTER DATABASE BULK OPERATIONS. -
BULK INSERTmendukung pencatatan minimal dalam model pemulihan sederhana atau bulk-logged denganTABLOCK.OPENROWSET(BULK ...)mendukung pencatatan minimal saat digunakan denganINSERT ... SELECTdanTABLOCK.
Kapan harus memilih BULK INSERT
Gunakan BULK INSERT saat Anda memiliki beban file-ke-tabel yang mudah dan tidak perlu mengubah, memfilter, atau menggabungkan data selama impor. Ini menggunakan sintaks yang lebih sederhana untuk CSV atau file berbatas lainnya:
Contoh kueri ini memuat file CSV dari Azure Blob Storage langsung ke dalam tabel.
BULK INSERT Sales.Invoices
FROM 'invoices/inv-2025-01.csv'
WITH (
DATA_SOURCE = 'MyAzureBlobStorage',
FORMAT = 'CSV',
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
);
Contoh kueri ini memuat file lokal dengan file format untuk pemetaan kolom.
BULK INSERT dbo.Products
FROM 'C:\Data\products.csv'
WITH (
FORMATFILE = 'C:\Data\products.fmt',
FIRSTROW = 2,
TABLOCK
);
Kapan memilih OPENROWSET(BULK)
Gunakan OPENROWSET(BULK ...) saat Anda memerlukan satu atau beberapa kondisi berikut:
- Gunakan
OPENROWSET(BULK ...)untuk melakukan query atau pratinjau data file tanpa membuat tabel terlebih dahulu. - Gunakan
OPENROWSET(BULK ...)untuk mengubah, memfilter, atau menggabungkan data selama impor. - Digunakan
OPENROWSET(BULK ...)untuk memuat file Parquet atau Delta karenaBULK INSERTtidak mendukung format tersebut. - Gunakan
OPENROWSET(BULK ...)untuk mengimpor seluruh file sebagai satu nilai LOB denganSINGLE_BLOB,SINGLE_CLOB, atauSINGLE_NCLOB.
Contoh kueri ini mempratinjau file CSV dari Azure Blob Storage tanpa menyisipkan data di mana saja.
SELECT TOP 10 *
FROM OPENROWSET (
BULK 'invoices/inv-2025-01.csv',
DATA_SOURCE = 'MyAzureBlobStorage',
FORMAT = 'CSV',
FIRSTROW = 2,
FIELDTERMINATOR = ','
) AS src;
Contoh kueri ini menyisipkan data dengan transformasi dan pemfilteran.
INSERT INTO Sales.Invoices (InvoiceDate, Amount, Customer)
SELECT CAST (InvoiceDate AS DATE),
Amount * 1.1, -- Apply a 10% markup
UPPER(Customer)
FROM OPENROWSET (
BULK 'invoices/inv-2025-01.csv',
DATA_SOURCE = 'MyAzureBlobStorage',
FORMAT = 'CSV',
FIRSTROW = 2
) WITH (
InvoiceDate VARCHAR (10),
Amount DECIMAL (18, 2),
Customer VARCHAR (100)
) AS src
WHERE Amount IS NOT NULL;
Contoh kueri ini memuat file Parquet (tidak dimungkinkan dengan BULK INSERT).
INSERT INTO Sales.Invoices
SELECT *
FROM OPENROWSET (
BULK 'data/invoices/*.parquet',
DATA_SOURCE = 'MyAzureStorage',
FORMAT = 'PARQUET') AS src;
Contoh kueri ini mengimpor seluruh file XML sebagai nilai varbinary(max) tunggal.
INSERT INTO dbo.XmlDocuments (DocContent)
SELECT BulkColumn
FROM OPENROWSET (
BULK 'C:\Data\catalog.xml',
SINGLE_BLOB
) AS x;
Petunjuk / Saran
Salah satu pendekatannya adalah memulai dengan OPENROWSET(BULK ...) di SELECT untuk menjelajahi dan memvalidasi data file, lalu beralih ke BULK INSERT untuk beban produksi akhir jika Anda tidak memerlukan transformasi. Jika Anda memerlukan dukungan Parquet, Delta, atau pemfilteran sebaris, gunakan OPENROWSET.
Untuk informasi selengkapnya, lihat panduan terkait berikut ini:
- Artikel Menggunakan BULK INSERT atau OPENROWSET(BULK...) untuk mengimpor data ke SQL Server menyediakan panduan komparatif yang rinci beserta pertimbangan keamanan.
-
Artikel Impor dan Ekspor Data Massal (SQL Server) memberikan gambaran umum tentang semua metode pemindahan data massal, termasuk bcp,
BULK INSERT, danOPENROWSET. - Artikel BULK INSERT (Transact-SQL) menyediakan referensi lengkap T-SQL untuk
BULK INSERT. - Artikel OPENROWSET BULK (Transact-SQL) menyediakan referensi lengkap T-SQL untuk
OPENROWSET(BULK ...). - Contoh akses massal ke data di Azure Blob Storage artikel menyediakan contoh berdampingan yang menggunakan kedua metode tersebut dengan Azure Storage.
- Artikel Mengimpor massal data objek besar dengan OPENROWSET Bulk Rowset Provider (SQL Server) berisi contoh
SINGLE_BLOB,SINGLE_CLOB, danSINGLE_NCLOB. - Artikel Gunakan file format untuk mengimpor data secara massal (SQL Server) menjelaskan penggunaan file format dengan kedua metode.
- Untuk panduan tentang mempertahankan null atau menerapkan nilai default selama impor massal, lihat Simpan null atau nilai default selama impor massal (SQL Server).
- Untuk panduan tentang mempertahankan nilai identitas selama impor massal, lihat Simpan nilai identitas saat mengimpor data secara massal (SQL Server).
Fungsi metadata yang berguna
Saat Anda membuat kueri terhadap file eksternal dengan menggunakan OPENROWSET atau tabel eksternal, gunakan fungsi dan prosedur bawaan untuk memeriksa metadata file, mengidentifikasi skema, dan menerapkan kueri yang peka terhadap partisi.
filepath() dan filename()
Fungsi filepath() dan filename() mengembalikan bagian dari jalur file atau nama file untuk setiap baris dalam tataan hasil. Mereka sangat berguna untuk:
Penghapusan partisi: Filter pada segmen folder (misalnya, partisi tahun/bulan/hari) sehingga mesin hanya membaca file yang cocok alih-alih memindai semuanya.
Mengekspos metadata sumber: Sertakan nama atau jalur file asal sebagai kolom dalam hasil kueri, yang berguna untuk audit atau penelusuran kesalahan.
| Fungsi | Pengembalian Barang | Example |
|---|---|---|
filename() |
Nama file (termasuk ekstensi) file sumber untuk setiap baris | sales_2025_01.parquet |
filepath(N) |
Segment folder ke-N dari wildcard (*) di jalur BULK, di mana N dimulai dari 1 |
Untuk jalur sales/2025/01/*.parquet, filepath(1) mengembalikan 2025, filepath(2) mengembalikan 01 |
Berlaku untuk: Azure SQL Database, Azure SQL Managed Instance, SQL Server 2022 (16.x) dan versi yang lebih baru, database SQL di Fabric.
Contoh kueri ini menggunakan filepath() untuk penghapusan partisi dan filename() untuk mengidentifikasi file sumber. Ini hanya membaca file di dalam folder /2025/, dan hanya membaca file di dalam subfolder /06/.
SELECT result.filename() AS SourceFile,
result.filepath(1) AS [Year],
result.filepath(2) AS [Month],
*
FROM OPENROWSET (
BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*/*/*.parquet',
FORMAT = 'PARQUET'
) AS result
WHERE result.filepath(1) = '2025'
AND result.filepath(2) = '06';
Petunjuk / Saran
Letakkan filepath() pemfilteran dalam WHERE klausa daripada dalam subkueri atau CTE. Ketika filter berada dalam WHERE klausul, mesin dapat melakukan eliminasi partisi pada tingkat pemindaian file, yang secara signifikan mengurangi I/O.
sp_describe_first_result_set - cermati tipe kolom pada OPENROWSET
Saat Anda menggunakan OPENROWSET dengan file Parquet, mesin menyimpulkan jenis data kolom secara otomatis (inferensi skema). Jenis yang disimpulkan mungkin lebih besar dari yang diperlukan. Misalnya, kolom karakter sering disimpulkan sebagai varchar(8000) karena metadata Parquet tidak menyertakan panjang maksimum. Pilihan ini dapat menurunkan performa dan mengonsumsi lebih banyak memori.
Gunakan sp_describe_first_result_set untuk memeriksa skema yang disimpulkan sebelum Anda menyelesaikan kueri Anda. Setelah Anda melihat jenis yang disimpulkan, tentukan jenis yang lebih sempit pada bagian WITH untuk meningkatkan kinerja.
Langkah 1: Periksa skema yang disimpulkan.
EXECUTE sp_describe_first_result_set N' SELECT * FROM OPENROWSET( BULK ''abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet'', FORMAT = ''PARQUET'' ) AS result';Output menunjukkan nama setiap kolom, jenis data yang disimpulkan, panjang maksimum, presisi, dan skala. Jika Anda melihat varchar(8000) padahal varchar(100) sudah cukup, ganti saja.
Langkah 2: Gunakan jenis eksplisit untuk performa yang lebih baik.
SELECT TOP 100 * FROM OPENROWSET ( BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet', FORMAT = 'PARQUET' ) WITH ( OrderId INT, OrderDate DATE, Amount DECIMAL (18, 2), Customer VARCHAR (100) -- much narrower than the inferred varchar(8000) ) AS result;
Inferensi skema hanya berfungsi dengan file Parquet. Untuk file CSV, selalu tentukan definisi kolom baik dalam WITH klausa (untuk OPENROWSET) atau dalam CREATE EXTERNAL TABLE pernyataan.
sp_describe_first_result_set adalah prosedur umum untuk SQL Server, Azure SQL Database, Azure SQL Managed Instance, dan database SQL di Fabric, tetapi prosedur ini sangat berguna untuk kueri OPENROWSET. Untuk informasi selengkapnya, lihat sp_describe_first_result_set.
Performa, pemecahan masalah, dan praktik terbaik
Setelah Anda menerapkan virtualisasi data, gunakan panduan ini untuk mengoptimalkan performa, mendiagnosis masalah, dan memastikan kesiapan produksi:
| Wilayah | Artikel | Rincian |
|---|---|---|
| Kinerja PolyBase | Pertimbangan performa di PolyBase untuk SQL Server | Statistik, pushdown, paralelisme, dan pengelolaan memori |
| Komputasi tumpukan | Komputasi pushdown di PolyBase | Menentukan operasi mana yang mengunggah ke sumber jarak jauh |
| Cara mengetahui apakah pushdown terjadi | Cara untuk mengetahui apakah terjadi dorongan eksternal | Rencana kueri dan DMV |
| Pemecahan masalah | Memantau dan memecahkan masalah PolyBase | Kesalahan dan resolusi umum |
| Konektivitas Kerberos | Memecahkan masalah konektivitas PolyBase Kerberos | |
| FAQ | Pertanyaan yang sering diajukan polyBase | |
| Kesalahan dan solusi | Kesalahan PolyBase dan kemungkinan solusi |