Menyambungkan, mengkueri, dan mengekspor data dengan PolyBase

Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru Azure SQL DatabaseAzure SQL Managed InstanceSQL 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, dan BULK INSERT untuk 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

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 INSERT atau OPENROWSET(BULK ...) dengan INSERT ... SELECT untuk 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 dengan FORMAT = 'PARQUET', FORMAT = DELTA, dan FORMAT = '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 TABLE dengan sqlserver://, 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 TABLE dengan konektor PolyBase seperti sqlserver://, oracle://, , teradata://mongodb://, dan odbc://. OPENROWSET tidak 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 ... SELECT dari OPENROWSET(BULK ...).
  • Jika Anda membutuhkan tata kelola atau akses bersama untuk banyak pengguna atau aplikasi, gunakan CREATE EXTERNAL TABLE agar 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>
    1. 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.
    1. Buat kredensial cakupan database dengan login target menggunakan CREATE DATABASE SCOPED CREDENTIAL agar mesin dapat melakukan autentikasi ke server jarak jauh.
    1. Buat sumber data eksternal untuk SQL Server jarak jauh dengan menggunakan CREATE EXTERNAL DATA SOURCE ... WITH (LOCATION = 'sqlserver://<server>').
    1. Buat tabel eksternal dengan menggunakan CREATE EXTERNAL TABLE ... WITH (LOCATION = '<db>.<schema>.<table>') untuk merepresentasikan tabel remote.
    1. Kueri tabel eksternal menggunakan SELECT * FROM <external_table>.

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

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

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]:// menjadi abs://
  • ADLS Gen2: Ubah abfs[s]:// menjadi adls://

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 polyBase Transact-SQL objek dan hubungannya.

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 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 IDENTITY nilai Memiliki 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.
    • Kredensial akses kunci penyimpanan menggunakan IDENTITY = '<storage_account_name>' dan menyimpan nilai rahasia, sehingga memerlukan kunci master basis data.
  • DMK tidak diperlukan (tidak ada rahasia yang disimpan):

    Jenis autentikasi IDENTITY nilai Memiliki 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' atau IDENTITY = 'Managed Identity' dan tidak menyimpan rahasia, sehingga tidak memerlukan kunci master database.

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 TABLE dengan CREATE EXTERNAL DATA SOURCE dan lokasi sqlserver://, oracle://, teradata://, mongodb://, atau odbc:// 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 OPENROWSET untuk kueri ad hoc cepat sekali pakai tanpa membuat objek persisten.
  • Gunakan OLE DB OPENROWSET untuk Microsoft Entra ID atau autentikasi Managed Identity melalui MSOLEDBSQL.
  • Gunakan OLE DB OPENROWSET untuk menghindari ketergantungan layanan PolyBase.
  • Gunakan OLE DB OPENROWSET untuk 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 TABLE untuk definisi tabel persisten yang dapat digunakan kembali dan diakses oleh banyak pengguna atau aplikasi.
  • Gunakan konektor PolyBase dengan CREATE EXTERNAL TABLE untuk beban kerja produksi yang memerlukan statistik dan pengoptimalan rencana kueri.
  • Gunakan konektor PolyBase dengan CREATE EXTERNAL TABLE untuk komputasi pushdown pada sumber jarak jauh seperti Oracle dan SQL Server.
  • Gunakan konektor PolyBase dengan CREATE EXTERNAL TABLE untuk tata kelola dan keamanan bersama; setelah tabel dibuat, pengguna hanya memerlukan izin SELECT.
  • Gunakan konektor PolyBase dengan CREATE EXTERNAL TABLE saat 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 klausa WITH, sementara tabel eksternal mendefinisikan skema secara eksplisit dalam pernyataan CREATE EXTERNAL TABLE.
  • OPENROWSET(BULK ...) membutuhkan ADMINISTER BULK OPERATIONS atau ADMINISTER DATABASE BULK OPERATIONS, sementara tabel eksternal dapat diquery oleh pengguna yang hanya membutuhkan izin standar SELECT setelah tabel tersebut ada.
  • OPENROWSET(BULK ...) mendukung kolom terhitung dalam kueri dan fungsi metadata seperti filename() dan filepath(), 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 menggunakan sys.sp_create_openrowset_statistics untuk 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 manual OPENROWSET tidak didukung di SQL Server, Azure SQL Database, dan SQL database di Fabric. Tabel eksternal mendukung kemampuan penuh CREATE STATISTICS di 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 INSERT memuat data dari file langsung ke dalam tabel target, sedangkan OPENROWSET(BULK ...) mengembalikan kumpulan baris yang dapat Anda gunakan dalam pernyataan SELECT atau INSERT ... SELECT.
  • BULK INSERT adalah pernyataan mandiri, sementara OPENROWSET(BULK ...) harus digunakan di dalam kueri seperti SELECT * FROM OPENROWSET(BULK ...) atau INSERT INTO <table> SELECT * FROM OPENROWSET(BULK ...).
  • BULK INSERT selalu menulis langsung ke tabel target, sedangkan OPENROWSET(BULK ...) dapat SELECT dari file tanpa memasukkannya ke mana pun atau ke tabel apa pun maupun tabel sementara.
  • BULK INSERT memiliki 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, filter JOIN, SELECT, dan kolom terhitung dalam WHERE di sekitarnya.
  • BULK INSERTmenggunakan WITH klausa untuk BATCHSIZE, CHECK_CONSTRAINTS, FIRE_TRIGGERS, KEEPIDENTITY, KEEPNULLSTABLOCKdan petunjuk lainnya. OPENROWSET(BULK ...) mendukung petunjuk tabel melalui INSERT ... SELECT * FROM OPENROWSET(BULK ...) WITH (TABLOCK, IGNORE_CONSTRAINTS, ...).
  • BULK INSERT tidak mendukung impor nilai tunggal objek besar. OPENROWSET(BULK ...) mendukung SINGLE_BLOB, SINGLE_CLOB, dan SINGLE_NCLOB untuk mengimpor seluruh file sebagai satu nilai varbinary(max), varchar(max), atau nvarchar(max), masing-masing.
  • Baik BULK INSERT maupun OPENROWSET(BULK ...) mendukung berkas berformat XML dan non-XML.
  • Untuk akses file cloud dengan BULK INSERT, parameter ini DATA_SOURCE mendukung 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, tetapi BULK INSERT tidak mendukung penyimpanan yang kompatibel dengan S3. Untuk OPENROWSET(BULK ...), DATA_SOURCE mendukung 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 INSERT tidak mendukung file Parquet atau Delta dan hanya mendukung file CSV atau teks yang dipisahkan dengan delimiter. OPENROWSET(BULK ...)mendukung FORMAT = 'PARQUET' dan FORMAT = 'DELTA' dalam SQL Server 2022 (16.x) dan versi berikutnya, Azure SQL Database, dan Azure SQL Managed Instance. Database SQL di Fabric mendukung FORMAT = 'PARQUET' tetapi tidak FORMAT = 'DELTA'. Untuk informasi selengkapnya, lihat OPENROWSET BULK (Transact-SQL).
  • BULK INSERT memerlukan ADMINISTER BULK OPERATIONS atau ADMINISTER DATABASE BULK OPERATIONS plus INSERT izin pada tabel target, sementara OPENROWSET(BULK ...) memerlukan ADMINISTER BULK OPERATIONS atau ADMINISTER DATABASE BULK OPERATIONS.
  • BULK INSERT mendukung pencatatan minimal dalam model pemulihan sederhana atau bulk-logged dengan TABLOCK. OPENROWSET(BULK ...) mendukung pencatatan minimal saat digunakan dengan INSERT ... SELECT dan TABLOCK.

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 karena BULK INSERT tidak mendukung format tersebut.
  • Gunakan OPENROWSET(BULK ...) untuk mengimpor seluruh file sebagai satu nilai LOB dengan SINGLE_BLOB, SINGLE_CLOB, atau SINGLE_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:

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