BUAT SUMBER DATA EKSTERNAL (TRANSACT-SQL)

Membuat sumber data eksternal untuk kueri menggunakan SQL Server, Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, Analytics Platform System (PDW), atau Azure SQL Edge.

Artikel ini menyediakan sintaks, argumen, keterangan, izin, dan contoh untuk produk SQL mana pun yang Anda pilih.

Pilih produk

Di baris berikut, pilih nama produk yang Anda minati, dan hanya informasi produk yang ditampilkan.

Gambaran Umum: SQL Server 2016

Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru

Membuat sumber data eksternal untuk kueri PolyBase. Sumber data eksternal digunakan untuk membangun konektivitas dan mendukung kasus penggunaan utama ini:

  • Virtualisasi data dan pemuatan data menggunakan PolyBase
  • Operasi pemuatan massal menggunakan BULK INSERT atau OPENROWSET

Catatan

Sintaks ini bervariasi dalam versi SQL Server yang berbeda. Gunakan menu dropdown pemilih versi untuk memilih versi yang sesuai.
Untuk melihat fitur SQL Server 2019 (15.x), kunjungi CREATE EXTERNAL DATA SOURCE. Untuk melihat fitur SQL Server 2022 (16.x), kunjungi CREATE EXTERNAL DATA SOURCE.

Sintaks untuk SQL Server 2016

Untuk informasi selengkapnya tentang konvensi sintaks, lihat Konvensi sintaks transact-SQL.

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] TYPE = { HADOOP } ]
    [ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]

Argumen

data_source_name

Menentukan nama yang ditentukan pengguna untuk sumber data. Nama harus unik dalam database di SQL Server.

LOCATION = '<prefix>://<path[:port]>'

Menyediakan protokol dan jalur konektivitas ke sumber data eksternal.

Sumber Data Eksternal awalan lokasi Koneksi or Jalur lokasi Lokasi yang didukung berdasarkan produk / layanan Autentikasi
Cloudera CDH atau Hortonworks HDP hdfs <Namenode>[:port] SQL Server 2016 (13.x) ke SQL Server 2019 (15.x) Autentikasi anonim atau dasar
Akun Azure Storage(V2) wasb[s] <container>@<storage_account>.blob.core.windows.net Dimulai dengan SQL Server 2016 (13.x)
Namespace Hierarkis tidak didukung
Kunci akun Azure Storage

Jalur lokasi:

  • <Namenode> = nama mesin, URI layanan nama, atau alamat Namenode IP di kluster Hadoop. PolyBase harus menyelesaikan nama DNS apa pun yang digunakan oleh kluster Hadoop.
  • port = Port yang didengarkan sumber data eksternal. Di Hadoop, port dapat ditemukan menggunakan fs.defaultFS parameter konfigurasi. Defaultnya adalah 8020.
  • <container> = kontainer akun penyimpanan yang menyimpan data. Kontainer root bersifat baca-saja, data tidak dapat ditulis kembali ke kontainer.
  • <storage_account> = nama akun penyimpanan sumber daya Azure.
  • <server_name> = nama host.
  • <instance_name> = nama instans bernama SQL Server. Digunakan jika Anda memiliki SQL Server Browser Service yang berjalan pada instans target.

Catatan dan panduan tambahan saat mengatur lokasi:

  • Mesin Database SQL Server tidak memverifikasi keberadaan sumber data eksternal saat objek dibuat. Untuk memvalidasi, buat tabel eksternal menggunakan sumber data eksternal.
  • Gunakan sumber data eksternal yang sama untuk semua tabel saat mengkueri Hadoop untuk memastikan semantik kueri yang konsisten.
  • wasbs bersifat opsional tetapi direkomendasikan di SQL Server 2016 (13.x) untuk mengakses Akun Azure Storage karena data akan dikirim menggunakan koneksi TLS/SSL yang aman.
  • Untuk memastikan kueri PolyBase yang berhasil selama fail-over Hadoop Namenode , pertimbangkan untuk menggunakan alamat IP virtual untuk Namenode kluster Hadoop. Jika tidak, jalankan perintah UBAH SUMBER DATA EKSTERNAL untuk menunjuk ke lokasi baru.

INFO MASUK = credential_name

Menentukan kredensial cakupan database untuk mengautentikasi ke sumber data eksternal.

CREDENTIAL hanya diperlukan jika data telah diamankan. CREDENTIAL tidak diperlukan untuk himpunan data yang memungkinkan akses anonim.

Untuk membuat kredensial lingkup database, lihat MEMBUAT KREDENSIAL CAKUPAN DATABASE (Transact-SQL).

TYPE = [ HADOOP ]

Menentukan jenis sumber data eksternal yang sedang dikonfigurasi. Di SQL Server 2016, parameter ini selalu diperlukan, dan hanya boleh ditentukan sebagai HADOOP. Mendukung koneksi ke Cloudera CDH, Hortonworks HDP, atau akun Azure Storage. Perilaku parameter ini berbeda di versi SQL Server yang lebih baru.

Untuk contoh penggunaan TYPE = HADOOP untuk memuat data dari akun Azure Storage, lihat Membuat sumber data eksternal untuk mengakses data di Azure Storage menggunakan antarmuka wasb://

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]'

Konfigurasikan nilai opsional ini saat menyambungkan ke Cloudera CDH, Hortonworks HDP, atau akun Azure Storage saja. Untuk daftar lengkap versi Hadoop yang didukung, lihat Konfigurasi Koneksi ivitas PolyBase (Transact-SQL).

RESOURCE_MANAGER_LOCATION Ketika ditentukan, pengoptimal kueri membuat keputusan berbasis biaya untuk meningkatkan performa. Pekerjaan MapReduce dapat digunakan untuk menurunkan komputasi ke Hadoop. Menentukan RESOURCE_MANAGER_LOCATION dapat secara signifikan mengurangi volume data yang ditransfer antara Hadoop dan SQL Server, yang dapat menyebabkan peningkatan performa kueri.

Jika Resource Manager tidak ditentukan, mendorong komputasi ke Hadoop dinonaktifkan untuk kueri PolyBase. Buat sumber data eksternal untuk mereferensikan Hadoop dengan push-down diaktifkan memberikan contoh konkret dan panduan lebih lanjut.

Nilai RESOURCE_MANAGER_LOCATION tidak divalidasi saat Anda membuat sumber data eksternal. Memasukkan nilai yang salah dapat menyebabkan kegagalan kueri pada waktu eksekusi setiap kali push-down dicoba karena nilai yang disediakan tidak akan dapat diselesaikan.

Agar PolyBase berfungsi dengan benar dengan sumber data eksternal Hadoop, port untuk komponen kluster Hadoop berikut harus terbuka:

  • Port HDFS
    • Namenode
    • Datanode
  • Resource Manager
    • Pengajuan Pekerjaan
    • Job history

Jika port tidak ditentukan, nilai default dipilih menggunakan pengaturan saat ini untuk konfigurasi 'konektivitas hadoop'.

Hadoop Koneksi ivity Default Resource Manager Port
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050
8 8032

Tabel berikut ini memperlihatkan port default untuk komponen-komponen ini. Ada dependensi versi Hadoop serta kemungkinan konfigurasi kustom yang tidak menggunakan penetapan port default.

Komponen kluster Hadoop Default Port
NameNode 8020
DataNode (Transfer data, port IPC non-hak istimewa) 50010
DataNode (Transfer data, port IPC hak istimewa) 1019
Pengiriman Pekerjaan Resource Manager (Hortonworks 1.3) 50300
Pengiriman Pekerjaan Resource Manager (Cloudera 4.3) 8021
Pengiriman Pekerjaan Resource Manager (Hortonworks 2.0 di Windows, Cloudera 5.x di Linux) 8032
Pengiriman Pekerjaan Resource Manager (Hortonworks 2.x, 3.0 di Linux, Hortonworks 2.1-3 di Windows) 8050
Riwayat Pekerjaan Resource Manager 10020

Izin

CONTROL Memerlukan izin pada database di SQL Server.

Penguncian

Mengambil kunci bersama pada EXTERNAL DATA SOURCE objek.

Keamanan

PolyBase mendukung autentikasi berbasis proksi untuk sebagian besar sumber data eksternal. Buat kredensial lingkup database untuk membuat akun proksi.

Contoh

Penting

Untuk informasi tentang cara menginstal dan mengaktifkan PolyBase, lihat Menginstal PolyBase di Windows

J. Membuat sumber data eksternal untuk mereferensikan Hadoop

Untuk membuat sumber data eksternal untuk mereferensikan kluster Hortonworks HDP atau Cloudera CDH Hadoop Anda, tentukan nama mesin, atau alamat IP Hadoop Namenode dan port.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
    LOCATION = 'hdfs://10.10.10.10:8050',
    TYPE = HADOOP
);

B. Membuat sumber data eksternal untuk mereferensikan Hadoop dengan push-down diaktifkan

RESOURCE_MANAGER_LOCATION Tentukan opsi untuk mengaktifkan komputasi push-down ke Hadoop untuk kueri PolyBase. Setelah diaktifkan, PolyBase membuat keputusan berbasis biaya untuk menentukan apakah komputasi kueri harus didorong ke Hadoop.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
    LOCATION = 'hdfs://10.10.10.10:8020',
    TYPE = HADOOP,
    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);

C. Membuat sumber data eksternal untuk mereferensikan Hadoop yang diamankan Kerberos

Untuk memverifikasi apakah kluster Hadoop diamankan Kerberos, periksa nilai hadoop.security.authentication properti di Hadoop core-site.xml. Untuk mereferensikan kluster Hadoop yang diamankan Kerberos, Anda harus menentukan kredensial cakupan database yang berisi nama pengguna dan kata sandi Kerberos Anda. Kunci master database digunakan untuk mengenkripsi rahasia kredensial lingkup database.

-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
    WITH IDENTITY = '<hadoop_user_name>',
    SECRET = '<hadoop_password>';

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
    LOCATION = 'hdfs://10.10.10.10:8050',
    CREDENTIAL = HadoopUser1,
    TYPE = HADOOP,
    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);

D. Membuat sumber data eksternal untuk mengakses data di Azure Storage menggunakan antarmuka wasb://

Dalam contoh ini, sumber data eksternal adalah akun Azure V2 Storage bernama logs. Kontainer penyimpanan disebut daily. Sumber data eksternal Azure Storage hanya untuk transfer data. Ini tidak mendukung pendorongan predikat. Namespace hierarkis tidak didukung saat mengakses data melalui wasb:// antarmuka.

Contoh ini memperlihatkan cara membuat kredensial cakupan database untuk autentikasi ke akun Azure V2 Storage. Tentukan kunci akun Azure Storage dalam rahasia kredensial database. Anda dapat menentukan string apa pun dalam identitas kredensial lingkup database karena tidak digunakan selama autentikasi ke Azure Storage. Perhatikan bahwa saat menyambungkan ke Azure Storage melalui konektor WASB,autentikasi harus dilakukan dengan kunci akun penyimpanan, bukan dengan tanda tangan akses bersama (SAS).

Di SQL Server 2016 (13.x), TYPE harus diatur ke HADOOP bahkan saat mengakses Azure Storage.

-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
    WITH IDENTITY = '<my_account>',
    SECRET = '<azure_storage_account_key>';

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
    LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
    CREDENTIAL = AzureStorageCredential,
    TYPE = HADOOP
);

Langkah berikutnya

Ringkasan: SQL Server 2017

Berlaku untuk: SQL Server 2017 (14.x) saja

Membuat sumber data eksternal untuk kueri PolyBase. Sumber data eksternal digunakan untuk membangun konektivitas dan mendukung kasus penggunaan utama ini:

  • Virtualisasi data dan pemuatan data menggunakan PolyBase
  • Operasi pemuatan massal menggunakan BULK INSERT atau OPENROWSET

Catatan

Sintaks ini bervariasi dalam versi SQL Server yang berbeda di Linux. Gunakan menu dropdown pemilih versi untuk memilih versi yang sesuai.
Untuk melihat fitur SQL Server 2019 (15.x), kunjungi CREATE EXTERNAL DATA SOURCE. Untuk melihat fitur SQL Server 2022 (16.x), kunjungi CREATE EXTERNAL DATA SOURCE.

Catatan

Sintaks ini bervariasi dalam versi SQL Server yang berbeda. Gunakan menu dropdown pemilih versi untuk memilih versi yang sesuai.
Untuk melihat fitur SQL Server 2019 (15.x), kunjungi CREATE EXTERNAL DATA SOURCE. Untuk melihat fitur SQL Server 2022 (16.x), kunjungi CREATE EXTERNAL DATA SOURCE.

Sintaks untuk SQL Server 2017

Untuk informasi selengkapnya tentang konvensi sintaks, lihat Konvensi sintaks transact-SQL.

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] TYPE = { HADOOP | BLOB_STORAGE } ]
    [ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]

Argumen

data_source_name

Menentukan nama yang ditentukan pengguna untuk sumber data. Nama harus unik dalam database di SQL Server.

LOCATION = '<prefix>://<path[:port]>'

Menyediakan protokol dan jalur konektivitas ke sumber data eksternal.

Sumber Data Eksternal awalan lokasi Koneksi or Jalur lokasi Lokasi yang didukung berdasarkan produk / layanan Autentikasi
Cloudera CDH atau Hortonworks HDP hdfs <Namenode>[:port] SQL Server 2016 (13.x) ke SQL Server 2019 (15.x) saja Autentikasi anonim atau dasar
Akun Azure Storage(V2) wasb[s] <container>@<storage_account>.blob.core.windows.net Dimulai dengan SQL Server 2016 (13.x)
Namespace Hierarkis tidak didukung
Kunci akun Azure Storage
Operasi Massal https <storage_account>.blob.core.windows.net/<container> Dimulai dengan SQL Server 2017 (14.x) Tanda Tangan Akses Bersama (SAS)

Jalur lokasi:

  • <Namenode> = nama komputer, URI layanan nama, atau alamat Namenode IP di kluster Hadoop. PolyBase harus menyelesaikan nama DNS apa pun yang digunakan oleh kluster Hadoop.
  • port = Port yang didengarkan sumber data eksternal. Di Hadoop, port dapat ditemukan menggunakan fs.defaultFS parameter konfigurasi. Defaultnya adalah 8020.
  • <container> = kontainer akun penyimpanan yang menyimpan data. Kontainer root bersifat baca-saja, data tidak dapat ditulis kembali ke kontainer.
  • <storage_account> = nama akun penyimpanan sumber daya Azure.
  • <server_name> = nama host.
  • <instance_name> = nama instans bernama SQL Server. Digunakan jika Anda memiliki SQL Server Browser Service yang berjalan pada instans target.

Catatan dan panduan tambahan saat mengatur lokasi:

  • Mesin Database SQL Server tidak memverifikasi keberadaan sumber data eksternal saat objek dibuat. Untuk memvalidasi, buat tabel eksternal menggunakan sumber data eksternal.
  • Gunakan sumber data eksternal yang sama untuk semua tabel saat mengkueri Hadoop untuk memastikan semantik kueri yang konsisten.
  • Tentukan Driver={<Name of Driver>} saat menyambungkan melalui ODBC.
  • wasbs bersifat opsional tetapi direkomendasikan di SQL Server 2017 (14.x) untuk mengakses Akun Azure Storage karena data akan dikirim menggunakan koneksi TLS/SSL yang aman.
  • Untuk memastikan kueri PolyBase yang berhasil selama fail-over Hadoop Namenode , pertimbangkan untuk menggunakan alamat IP virtual untuk Namenode kluster Hadoop. Jika tidak, jalankan perintah UBAH SUMBER DATA EKSTERNAL untuk menunjuk ke lokasi baru.

INFO MASUK = credential_name

Menentukan kredensial cakupan database untuk mengautentikasi ke sumber data eksternal.

Catatan dan panduan tambahan saat membuat kredensial:

  • CREDENTIAL hanya diperlukan jika data telah diamankan. CREDENTIAL tidak diperlukan untuk himpunan data yang memungkinkan akses anonim.
  • TYPE = BLOB_STORAGEKetika , kredensial harus dibuat menggunakan SHARED ACCESS SIGNATURE sebagai identitas.
  • TYPE = BLOB_STORAGE hanya diizinkan untuk operasi massal; Anda tidak dapat membuat tabel eksternal untuk sumber data eksternal dengan TYPE = BLOB_STORAGE.
  • Perhatikan bahwa saat menyambungkan ke Azure Storage melalui konektor WASB,autentikasi harus dilakukan dengan kunci akun penyimpanan, bukan dengan tanda tangan akses bersama (SAS).
  • Ketika TYPE = HADOOP kredensial harus dibuat menggunakan kunci akun penyimpanan sebagai SECRET.

Ada beberapa cara untuk membuat tanda tangan akses bersama:

  • Anda dapat membuat token SAS dengan menavigasi ke portal Azure -><Your_Storage_Account> -> Tanda tangan akses bersama -> Mengonfigurasi izin -> Hasilkan SAS dan string koneksi. Untuk informasi selengkapnya, lihat Membuat tanda tangan akses bersama.

  • Anda dapat membuat dan mengonfigurasi SAS dengan Azure Storage Explorer.

  • Anda dapat membuat SAS secara terprogram melalui PowerShell, Azure CLI, .NET, dan REST API. Untuk informasi selengkapnya, lihat Berikan akses terbatas ke sumber daya Azure Storage menggunakan tanda tangan akses bersama (SAS).

  • Token SAS harus dikonfigurasi sebagai berikut:

    • Ketika token SAS dihasilkan, token SAS menyertakan tanda tanya ('?') di awal token. Kecualikan yang terdepan ? saat dikonfigurasi sebagai SECRET.
    • Gunakan periode kedaluwarsa yang valid (semua tanggal dalam waktu UTC).
    • Berikan setidaknya izin baca pada file yang harus dimuat (misalnya srt=o&sp=r). Beberapa tanda tangan akses bersama dapat dibuat untuk kasus penggunaan yang berbeda. Izin harus diberikan sebagai berikut:
    Perbuatan Izin
    Membaca data dari file Baca
    Membaca data dari beberapa file dan subfolder Baca dan Daftar

Untuk contoh penggunaan CREDENTIAL dengan SHARED ACCESS SIGNATURE danBLOB_STORAGETYPE = , lihat Membuat sumber data eksternal untuk menjalankan operasi massal dan mengambil data dari Azure Storage ke SQL Database

Untuk membuat kredensial lingkup database, lihat MEMBUAT KREDENSIAL CAKUPAN DATABASE (Transact-SQL).

TYPE = [ HADOOP | BLOB_STORAGE ]

Menentukan jenis sumber data eksternal yang sedang dikonfigurasi. Parameter ini tidak selalu diperlukan, dan hanya boleh ditentukan saat menyambungkan ke Cloudera CDH, Hortonworks HDP, akun Azure Storage, atau Azure Data Lake Storage Gen2.

  • Gunakan HADOOP saat sumber data eksternal adalah Cloudera CDH, Hortonworks HDP, akun Azure Storage, atau Azure Data Lake Storage Gen2.
  • Gunakan BLOB_STORAGE saat menjalankan operasi massal dari akun Azure Storage menggunakan BULK INSERT atau OPENROWSET. Diperkenalkan dengan SQL Server 2017 (14.x). Gunakan HADOOP saat ingin MEMBUAT TABEL EKSTERNAL terhadap Azure Storage.

Catatan

TYPE harus diatur ke HADOOP bahkan saat mengakses Azure Storage.

Untuk contoh penggunaan TYPE = HADOOP untuk memuat data dari akun Azure Storage, lihat Membuat sumber data eksternal untuk mengakses data di Azure Storage menggunakan antarmuka wasb://

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]'

Konfigurasikan nilai opsional ini saat menyambungkan ke Cloudera CDH, Hortonworks HDP, atau akun Azure Storage saja. Untuk daftar lengkap versi Hadoop yang didukung, lihat Konfigurasi Koneksi ivitas PolyBase (Transact-SQL).

RESOURCE_MANAGER_LOCATION Ketika ditentukan, pengoptimal kueri akan membuat keputusan berbasis biaya untuk meningkatkan performa. Pekerjaan MapReduce dapat digunakan untuk menurunkan komputasi ke Hadoop. Menentukan RESOURCE_MANAGER_LOCATION dapat secara signifikan mengurangi volume data yang ditransfer antara Hadoop dan SQL Server, yang dapat menyebabkan peningkatan performa kueri.

Jika Resource Manager tidak ditentukan, mendorong komputasi ke Hadoop dinonaktifkan untuk kueri PolyBase. Buat sumber data eksternal untuk mereferensikan Hadoop dengan push-down diaktifkan memberikan contoh konkret dan panduan lebih lanjut.

Nilai RESOURCE_MANAGER_LOCATION tidak divalidasi saat Anda membuat sumber data eksternal. Memasukkan nilai yang salah dapat menyebabkan kegagalan kueri pada waktu eksekusi setiap kali push-down dicoba karena nilai yang disediakan tidak akan dapat diselesaikan.

Agar PolyBase berfungsi dengan benar dengan sumber data eksternal Hadoop, port untuk komponen kluster Hadoop berikut harus terbuka:

  • Port HDFS
    • Namenode
    • Datanode
  • Resource Manager
    • Pengajuan Pekerjaan
    • Job history

Jika port tidak ditentukan, nilai default dipilih menggunakan pengaturan saat ini untuk konfigurasi 'konektivitas hadoop'.

Hadoop Koneksi ivity Default Resource Manager Port
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050
8 8032

Tabel berikut ini memperlihatkan port default untuk komponen-komponen ini. Perhatikan bahwa ada dependensi versi Hadoop serta kemungkinan konfigurasi kustom yang tidak menggunakan penetapan port default.

Komponen kluster Hadoop Default Port
NameNode 8020
DataNode (Transfer data, port IPC non-hak istimewa) 50010
DataNode (Transfer data, port IPC hak istimewa) 1019
Pengiriman Pekerjaan Resource Manager (Hortonworks 1.3) 50300
Pengiriman Pekerjaan Resource Manager (Cloudera 4.3) 8021
Pengiriman Pekerjaan Resource Manager (Hortonworks 2.0 di Windows, Cloudera 5.x di Linux) 8032
Pengiriman Pekerjaan Resource Manager (Hortonworks 2.x, 3.0 di Linux, Hortonworks 2.1-3 di Windows) 8050
Riwayat Pekerjaan Resource Manager 10020

Izin

CONTROL Memerlukan izin pada database di SQL Server.

Penguncian

Mengambil kunci bersama pada EXTERNAL DATA SOURCE objek.

Keamanan

PolyBase mendukung autentikasi berbasis proksi untuk sebagian besar sumber data eksternal. Buat kredensial lingkup database untuk membuat akun proksi.

Token SAS dengan jenis HADOOP tidak didukung. Ini hanya didukung dengan jenis = BLOB_STORAGE ketika kunci akses akun penyimpanan digunakan sebagai gantinya. Mencoba membuat sumber data eksternal dengan jenis HADOOP dan kredensial SAS gagal dengan kesalahan berikut:

Msg 105019, Level 16, State 1 - EXTERNAL TABLE access failed due to internal error: 'Java exception raised on call to HdfsBridge_Connect. Java exception message: Parameters provided to connect to the Azure storage account are not valid.: Error [Parameters provided to connect to the Azure storage account are not valid.] occurred while accessing external file.'

Contoh

Penting

Untuk informasi tentang cara menginstal dan mengaktifkan PolyBase, lihat Menginstal PolyBase di Windows

J. Membuat sumber data eksternal untuk mereferensikan Hadoop

Untuk membuat sumber data eksternal untuk mereferensikan kluster Hortonworks HDP atau Cloudera CDH Hadoop Anda, tentukan nama mesin, atau alamat IP Hadoop Namenode dan port.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
    LOCATION = 'hdfs://10.10.10.10:8050',
    TYPE = HADOOP
);

B. Membuat sumber data eksternal untuk mereferensikan Hadoop dengan push-down diaktifkan

RESOURCE_MANAGER_LOCATION Tentukan opsi untuk mengaktifkan komputasi push-down ke Hadoop untuk kueri PolyBase. Setelah diaktifkan, PolyBase membuat keputusan berbasis biaya untuk menentukan apakah komputasi kueri harus didorong ke Hadoop.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
    LOCATION = 'hdfs://10.10.10.10:8020',
    TYPE = HADOOP,
    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);

C. Membuat sumber data eksternal untuk mereferensikan Hadoop yang diamankan Kerberos

Untuk memverifikasi apakah kluster Hadoop diamankan Kerberos, periksa nilai hadoop.security.authentication properti di Hadoop core-site.xml. Untuk mereferensikan kluster Hadoop yang diamankan Kerberos, Anda harus menentukan kredensial cakupan database yang berisi nama pengguna dan kata sandi Kerberos Anda. Kunci master database digunakan untuk mengenkripsi rahasia kredensial lingkup database.

-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
    WITH IDENTITY = '<hadoop_user_name>',
    SECRET = '<hadoop_password>';

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
    LOCATION = 'hdfs://10.10.10.10:8050',
    CREDENTIAL = HadoopUser1,
    TYPE = HADOOP,
    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);

D. Membuat sumber data eksternal untuk mengakses data di Azure Storage menggunakan antarmuka wasb://

Dalam contoh ini, sumber data eksternal adalah akun Azure V2 Storage bernama logs. Kontainer penyimpanan disebut daily. Sumber data eksternal Azure Storage hanya untuk transfer data. Ini tidak mendukung pendorongan predikat. Namespace hierarkis tidak didukung saat mengakses data melalui wasb:// antarmuka. Perhatikan bahwa saat menyambungkan ke Azure Storage melalui konektor WASB,autentikasi harus dilakukan dengan kunci akun penyimpanan, bukan dengan tanda tangan akses bersama (SAS).

Contoh ini memperlihatkan cara membuat kredensial cakupan database untuk autentikasi ke akun Azure V2 Storage. Tentukan kunci akun Azure Storage dalam rahasia kredensial database. Anda dapat menentukan string apa pun dalam identitas kredensial lingkup database karena tidak digunakan selama autentikasi ke Azure Storage.

-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
    WITH IDENTITY = '<my_account>',
    SECRET = '<azure_storage_account_key>';

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
    LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
    CREDENTIAL = AzureStorageCredential,
    TYPE = HADOOP
);

Contoh: Operasi massal

Penting

Jangan tambahkan /parameter tanda tangan akses berikutnya, nama file, atau tanda tangan akses bersama di akhir LOCATION URL saat mengonfigurasi sumber data eksternal untuk operasi massal.

E. Membuat sumber data eksternal untuk operasi massal yang mengambil data dari Azure Storage

Berlaku untuk: SQL Server 2017 (14.x) dan yang lebih baru.

Gunakan sumber data berikut untuk operasi massal menggunakan BULK INSERT atau OPENROWSET. Kredensial harus ditetapkan SHARED ACCESS SIGNATURE sebagai identitas, tidak boleh memiliki yang terdepan ? dalam token SAS, harus memiliki setidaknya izin baca pada file yang harus dimuat (misalnya srt=o&sp=r), dan periode kedaluwarsa harus valid (semua tanggal dalam waktu UTC). Untuk informasi selengkapnya tentang tanda tangan akses bersama, lihat Menggunakan Tanda Tangan Akses Bersama (SAS).

CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    -- Remove ? from the beginning of the SAS token
    SECRET = '<azure_storage_account_key>';

CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
    LOCATION = 'https://newinvoices.blob.core.windows.net/week3',
    CREDENTIAL = AccessAzureInvoices,
    TYPE = BLOB_STORAGE
);

Untuk melihat contoh ini yang digunakan, lihat contoh INSERT MASSAL.

Langkah berikutnya

Ringkasan: SQL Server 2019

Berlaku untuk: SQL Server 2019 (15.x) dan yang lebih baru

Membuat sumber data eksternal untuk kueri PolyBase. Sumber data eksternal digunakan untuk membangun konektivitas dan mendukung kasus penggunaan utama ini:

  • Virtualisasi data dan pemuatan data menggunakan PolyBase
  • Operasi pemuatan massal menggunakan BULK INSERT atau OPENROWSET

Catatan

Sintaks ini bervariasi dalam versi SQL Server yang berbeda. Gunakan menu dropdown pemilih versi untuk memilih versi yang sesuai.
Untuk melihat fitur SQL Server 2022 (16.x), kunjungi CREATE EXTERNAL DATA SOURCE.

Catatan

Sintaks ini bervariasi dalam versi SQL Server yang berbeda. Gunakan menu dropdown pemilih versi untuk memilih versi yang sesuai.
Untuk melihat fitur SQL Server 2022 (16.x), kunjungi CREATE EXTERNAL DATA SOURCE.

Sintaks untuk SQL Server 2019

Untuk informasi selengkapnya tentang konvensi sintaks, lihat Konvensi sintaks transact-SQL.

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] PUSHDOWN = { ON | OFF } ]
    [ [ , ] TYPE = { HADOOP | BLOB_STORAGE } ]
    [ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]

Argumen

data_source_name

Menentukan nama yang ditentukan pengguna untuk sumber data. Nama harus unik dalam database di SQL Server.

LOCATION = '<prefix>://<path[:port]>'

Menyediakan protokol dan jalur konektivitas ke sumber data eksternal.

Sumber Data Eksternal awalan lokasi Koneksi or Jalur lokasi Lokasi yang didukung berdasarkan produk / layanan Autentikasi
Cloudera CDH atau Hortonworks HDP hdfs <Namenode>[:port] SQL Server 2016 (13.x) ke SQL Server 2019 (15.x) Autentikasi anonim atau dasar
Akun Azure Storage(V2) wasb[s] <container>@<storage_account>.blob.core.windows.net Dimulai dengan SQL Server 2016 (13.x)
Namespace Hierarkis tidak didukung
Kunci akun Azure Storage
Server SQL sqlserver <server_name>[\<instance_name>][:port] Dimulai dengan SQL Server 2019 (15.x) Autentikasi SQL saja
Oracle oracle <server_name>[:port] Dimulai dengan SQL Server 2019 (15.x) Autentikasi dasar saja
Teradata teradata <server_name>[:port] Dimulai dengan SQL Server 2019 (15.x) Autentikasi dasar saja
MongoDB atau Cosmos DB API untuk MongoDB mongodb <server_name>[:port] Dimulai dengan SQL Server 2019 (15.x) Autentikasi dasar saja
Konektivitas Database Terbuka Generik odbc <server_name>[:port] Dimulai dengan SQL Server 2019 (15.x) - Hanya Windows Autentikasi dasar saja
Operasi Massal https <storage_account>.blob.core.windows.net/<container> Dimulai dengan SQL Server 2017 (14.x) Tanda Tangan Akses Bersama (SAS)
Azure Data Lake Storage Gen2 abfs[s] abfss://<container>@<storage _account>.dfs.core.windows.net Dimulai dengan SQL Server 2019 (15.x) CU11+. Kunci Akses Storage
Kumpulan data Kluster Big Data SQL Server sqldatapool sqldatapool://controller-svc/default Hanya didukung di Kluster Big Data SQL Server 2019 Autentikasi dasar saja
Kumpulan penyimpanan Kluster Big Data SQL Server sqlhdfs sqlhdfs://controller-svc/default Hanya didukung di Kluster Big Data SQL Server 2019 Autentikasi dasar saja

Jalur lokasi:

  • <Namenode> = nama mesin, URI layanan nama, atau alamat Namenode IP di kluster Hadoop. PolyBase harus menyelesaikan nama DNS apa pun yang digunakan oleh kluster Hadoop.
  • port = Port yang didengarkan sumber data eksternal. Di Hadoop, port dapat ditemukan menggunakan fs.defaultFS parameter konfigurasi. Defaultnya adalah 8020.
  • <container> = kontainer akun penyimpanan yang menyimpan data. Kontainer root bersifat baca-saja, data tidak dapat ditulis kembali ke kontainer.
  • <storage_account> = nama akun penyimpanan sumber daya Azure.
  • <server_name> = nama host.
  • <instance_name> = nama instans bernama SQL Server. Digunakan jika Anda memiliki SQL Server Browser Service yang berjalan pada instans target.

Catatan dan panduan tambahan saat mengatur lokasi:

  • Mesin Database SQL Server tidak memverifikasi keberadaan sumber data eksternal saat objek dibuat. Untuk memvalidasi, buat tabel eksternal menggunakan sumber data eksternal.
  • Gunakan sumber data eksternal yang sama untuk semua tabel saat mengkueri Hadoop untuk memastikan semantik kueri yang konsisten.
  • Anda dapat menggunakan sqlserver konektor untuk menyambungkan SQL Server 2019 (15.x) ke SQL Server lain, atau ke Azure SQL Database.
  • Tentukan Driver={<Name of Driver>} saat menyambungkan melalui ODBC.
  • Menggunakan wasbs atau abfss bersifat opsional tetapi direkomendasikan di SQL Server 2019 (15.x) untuk mengakses Akun Azure Storage karena data akan dikirim menggunakan koneksi TLS/SSL yang aman.
  • abfs API atau abfss didukung saat mengakses Akun Azure Storage yang dimulai dengan SQL Server 2019 (15.x) CU11. Untuk informasi selengkapnya, lihat driver Azure Blob Filesystem (ABFS).
  • Opsi Namespace Hierarkis untuk Akun Penyimpanan Azure (V2) yang menggunakan abfs[s] didukung melalui Azure Data Lake Storage Gen2 dimulai dengan SQL Server 2019 (15.x) CU11+. Opsi Namespace Hierarkis tidak didukung, dan opsi ini harus tetap dinonaktifkan.
  • Untuk memastikan kueri PolyBase yang berhasil selama fail-over Hadoop Namenode , pertimbangkan untuk menggunakan alamat IP virtual untuk Namenode kluster Hadoop. Jika tidak, jalankan perintah UBAH SUMBER DATA EKSTERNAL untuk menunjuk ke lokasi baru.
  • Jenis sqlhdfs dan sqldatapool didukung untuk menyambungkan antara instans master dan kumpulan penyimpanan kluster big data. Untuk Cloudera CDH atau Hortonworks HDP, gunakan hdfs. Untuk informasi selengkapnya tentang penggunaan sqlhdfs untuk mengkueri kumpulan penyimpanan Kluster Big Data SQL Server, lihat Mengkueri HDFS di Kluster Big Data SQL Server 2019.
  • Dukungan SQL Server untuk sumber data eksternal HDFS Cloudera (CDP) dan Hortonworks (HDP) akan dihentikan dan tidak akan disertakan dalam SQL Server 2022 (16.x). Untuk informasi selengkapnya, lihat Opsi big data di platform Microsoft SQL Server.

CONNECTION_OPTIONS = key_value_pair

Ditentukan untuk SQL Server 2019 (15.x) dan yang lebih baru. Menentukan opsi tambahan saat menyambungkan ODBC ke sumber data eksternal. Untuk menggunakan beberapa opsi koneksi, pisahkan dengan titik koma.

Berlaku untuk koneksi generik ODBC , serta konektor bawaan ODBC untuk SQL Server, Oracle, Teradata, MongoDB, dan Azure Cosmos DB API untuk MongoDB.

key_value_pair adalah kata kunci dan nilai untuk opsi koneksi tertentu. Kata kunci dan nilai yang tersedia bergantung pada jenis sumber data eksternal. Nama driver diperlukan sebagai minimum, tetapi ada opsi lain seperti APP='<your_application_name>' atau ApplicationIntent= ReadOnly|ReadWrite yang juga berguna untuk diatur dan dapat membantu pemecahan masalah.

Pasangan nilai kunci yang mungkin khusus untuk penyedia untuk vendor sumber data eksternal. Untuk informasi selengkapnya untuk setiap penyedia, lihat MEMBUAT SUMBER DATA EKSTERNAL (Transact-SQL) CONNECTION_OPTIONS.

Mulai pembaruan kumulatif SQL Server 2019 (15.x) 19, kata kunci tambahan diperkenalkan untuk mendukung file Oracle TNS:

  • Kata kunci TNSNamesFile menentukan jalur file ke file yang tnsnames.ora terletak di server Oracle.
  • Kata kunci ServerName menentukan alias yang digunakan di dalam tnsnames.ora yang akan digunakan untuk mengganti nama host dan port.

Pushdown = AKTIF | OFF

Ditentukan hanya untuk SQL Server 2019 (15.x). Menyatakan apakah komputasi dapat didorong ke sumber data eksternal. Ini aktif secara default.

PUSHDOWN didukung saat menyambungkan ke SQL Server, Oracle, Teradata, MongoDB, API Azure Cosmos DB untuk MongoDB, atau ODBC di tingkat sumber data eksternal.

Mengaktifkan atau menonaktifkan push-down di tingkat kueri dicapai melalui petunjuk.

INFO MASUK = credential_name

Menentukan kredensial cakupan database untuk mengautentikasi ke sumber data eksternal.

Catatan dan panduan tambahan saat membuat kredensial:

  • CREDENTIAL hanya diperlukan jika data telah diamankan. CREDENTIAL tidak diperlukan untuk himpunan data yang memungkinkan akses anonim.
  • TYPE = BLOB_STORAGEKetika , kredensial harus dibuat menggunakan SHARED ACCESS SIGNATURE sebagai identitas.
    • TYPE = BLOB_STORAGE hanya diizinkan untuk operasi massal; Anda tidak dapat membuat tabel eksternal untuk sumber data eksternal dengan TYPE = BLOB_STORAGE.

Ada beberapa cara untuk membuat tanda tangan akses bersama:

  • Anda dapat membuat token SAS dengan menavigasi ke portal Azure -><Your_Storage_Account> -> Tanda tangan akses bersama -> Mengonfigurasi izin -> Hasilkan SAS dan string koneksi. Untuk informasi selengkapnya, lihat Membuat tanda tangan akses bersama.

  • Anda dapat membuat dan mengonfigurasi SAS dengan Azure Storage Explorer.

  • Anda dapat membuat SAS secara terprogram melalui PowerShell, Azure CLI, .NET, dan REST API. Untuk informasi selengkapnya, lihat Berikan akses terbatas ke sumber daya Azure Storage menggunakan tanda tangan akses bersama (SAS).

  • Token SAS harus dikonfigurasi sebagai berikut:

    • Ketika token SAS dihasilkan, token SAS menyertakan tanda tanya ('?') di awal token. Kecualikan yang terdepan ? saat dikonfigurasi sebagai SECRET.
    • Gunakan periode kedaluwarsa yang valid (semua tanggal dalam waktu UTC).
    • Berikan setidaknya izin baca pada file yang harus dimuat (misalnya srt=o&sp=r). Beberapa tanda tangan akses bersama dapat dibuat untuk kasus penggunaan yang berbeda. Izin harus diberikan sebagai berikut:
    Perbuatan Izin
    Membaca data dari file Baca
    Membaca data dari beberapa file dan subfolder Baca dan Daftar

Untuk contoh penggunaan CREDENTIAL dengan SHARED ACCESS SIGNATURE danBLOB_STORAGETYPE = , lihat Membuat sumber data eksternal untuk menjalankan operasi massal dan mengambil data dari Azure Storage ke SQL Database

Untuk membuat kredensial lingkup database, lihat MEMBUAT KREDENSIAL CAKUPAN DATABASE (Transact-SQL).

TYPE = [ HADOOP | BLOB_STORAGE ]

Menentukan jenis sumber data eksternal yang sedang dikonfigurasi. Parameter ini tidak selalu diperlukan, dan hanya boleh ditentukan saat menyambungkan ke Cloudera CDH, Hortonworks HDP, akun Azure Storage, atau Azure Data Lake Storage Gen2.

  • Di SQL Server 2019 (15.x), jangan tentukan TYPE kecuali menyambungkan ke Cloudera CDH, Hortonworks HDP, akun Azure Storage.
  • Gunakan HADOOP saat sumber data eksternal adalah Cloudera CDH, Hortonworks HDP, akun Azure Storage, atau Azure Data Lake Storage Gen2.
  • Gunakan BLOB_STORAGE saat menjalankan operasi massal dari akun Azure Storage menggunakan BULK INSERT, atau OPENROWSET dengan SQL Server 2017 (14.x). Gunakan HADOOP saat ingin MEMBUAT TABEL EKSTERNAL terhadap Azure Storage.
  • Dukungan SQL Server untuk sumber data eksternal HDFS Cloudera (CDP) dan Hortonworks (HDP) akan dihentikan dan tidak akan disertakan dalam SQL Server 2022 (16.x). Untuk informasi selengkapnya, lihat Opsi big data di platform Microsoft SQL Server.

Untuk contoh penggunaan TYPE = HADOOP untuk memuat data dari akun Azure Storage, lihat Membuat sumber data eksternal untuk mengakses data di Azure Storage menggunakan antarmuka wasb://

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]'

Di SQL Server 2019 (15.x), jangan tentukan RESOURCE_MANAGER_LOCATION kecuali menyambungkan ke Cloudera CDH, Hortonworks HDP, akun Azure Storage.

Konfigurasikan nilai opsional ini saat menyambungkan ke Cloudera CDH, Hortonworks HDP, atau akun Azure Storage saja. Untuk daftar lengkap versi Hadoop yang didukung, lihat Konfigurasi Koneksi ivitas PolyBase (Transact-SQL).

RESOURCE_MANAGER_LOCATION Ketika ditentukan, pengoptimal kueri membuat keputusan berbasis biaya untuk meningkatkan performa. Pekerjaan MapReduce dapat digunakan untuk menurunkan komputasi ke Hadoop. Menentukan RESOURCE_MANAGER_LOCATION dapat secara signifikan mengurangi volume data yang ditransfer antara Hadoop dan SQL Server, yang dapat menyebabkan peningkatan performa kueri.

Jika Resource Manager tidak ditentukan, mendorong komputasi ke Hadoop dinonaktifkan untuk kueri PolyBase. Buat sumber data eksternal untuk mereferensikan Hadoop dengan push-down diaktifkan memberikan contoh konkret dan panduan lebih lanjut.

Nilai RESOURCE_MANAGER_LOCATION tidak divalidasi saat Anda membuat sumber data eksternal. Memasukkan nilai yang salah dapat menyebabkan kegagalan kueri pada waktu eksekusi setiap kali push-down dicoba karena nilai yang disediakan tidak akan dapat diselesaikan.

Agar PolyBase berfungsi dengan benar dengan sumber data eksternal Hadoop, port untuk komponen kluster Hadoop berikut harus terbuka:

  • Port HDFS
    • Namenode
    • Datanode
  • Resource Manager
    • Pengajuan Pekerjaan
    • Job history

Jika port tidak ditentukan, nilai default dipilih menggunakan pengaturan saat ini untuk konfigurasi 'konektivitas hadoop'.

Hadoop Koneksi ivity Default Resource Manager Port
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050
8 8032

Tabel berikut ini memperlihatkan port default untuk komponen-komponen ini. Perhatikan bahwa ada dependensi versi Hadoop serta kemungkinan konfigurasi kustom yang tidak menggunakan penetapan port default.

Komponen kluster Hadoop Default Port
NameNode 8020
DataNode (Transfer data, port IPC non-hak istimewa) 50010
DataNode (Transfer data, port IPC hak istimewa) 1019
Pengiriman Pekerjaan Resource Manager (Hortonworks 1.3) 50300
Pengiriman Pekerjaan Resource Manager (Cloudera 4.3) 8021
Pengiriman Pekerjaan Resource Manager (Hortonworks 2.0 di Windows, Cloudera 5.x di Linux) 8032
Pengiriman Pekerjaan Resource Manager (Hortonworks 2.x, 3.0 di Linux, Hortonworks 2.1-3 di Windows) 8050
Riwayat Pekerjaan Resource Manager 10020

Izin

CONTROL Memerlukan izin pada database di SQL Server.

Penguncian

Mengambil kunci bersama pada EXTERNAL DATA SOURCE objek.

Keamanan

PolyBase mendukung autentikasi berbasis proksi untuk sebagian besar sumber data eksternal. Buat kredensial lingkup database untuk membuat akun proksi.

Saat Anda terhubung ke penyimpanan atau kumpulan data di Kluster Big Data SQL Server 2019, kredensial pengguna diteruskan ke sistem back-end. Buat login di kumpulan data itu sendiri untuk mengaktifkan autentikasi pass through.

Token SAS dengan jenis HADOOP tidak didukung. Ini hanya didukung dengan jenis = BLOB_STORAGE ketika kunci akses akun penyimpanan digunakan sebagai gantinya. Mencoba membuat sumber data eksternal dengan jenis HADOOP dan kredensial SAS gagal dengan kesalahan berikut:

Msg 105019, Level 16, State 1 - EXTERNAL TABLE access failed due to internal error: 'Java exception raised on call to HdfsBridge_Connect. Java exception message: Parameters provided to connect to the Azure storage account are not valid.: Error [Parameters provided to connect to the Azure storage account are not valid.] occurred while accessing external file.'

Contoh

Penting

Untuk informasi tentang cara menginstal dan mengaktifkan PolyBase, lihat Menginstal PolyBase di Windows

J. Membuat sumber data eksternal di SQL Server 2019 untuk mereferensikan Oracle

Untuk membuat sumber data eksternal yang mereferensikan Oracle, pastikan Anda memiliki kredensial lingkup database. Anda juga dapat secara opsional mengaktifkan atau menonaktifkan push-down komputasi terhadap sumber data ini.

-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL OracleProxyAccount
    WITH IDENTITY = 'oracle_username',
    SECRET = 'oracle_password';

CREATE EXTERNAL DATA SOURCE MyOracleServer
WITH (
    LOCATION = 'oracle://145.145.145.145:1521',
    CREDENTIAL = OracleProxyAccount,
    PUSHDOWN = ON
);

Secara opsional, sumber data eksternal ke Oracle dapat menggunakan autentikasi proksi untuk memberikan kontrol akses butir halus. Pengguna proksi dapat dikonfigurasi untuk memiliki akses terbatas dibandingkan dengan pengguna yang ditiru.

CREATE DATABASE SCOPED CREDENTIAL [OracleProxyCredential]
    WITH IDENTITY = 'oracle_username',
    SECRET = 'oracle_password';

CREATE EXTERNAL DATA SOURCE [OracleSalesSrvr]
WITH (
    LOCATION = 'oracle://145.145.145.145:1521',
    CONNECTION_OPTIONS = 'ImpersonateUser=%CURRENT_USER',
    CREDENTIAL = [OracleProxyCredential]
);

Atau, Anda dapat menggunakan autentikasi TNS.

Mulai SQL Server 2019 (15.x) Pembaruan Kumulatif 19, CREATE EXTERNAL DATA SOURCE sekarang mendukung penggunaan file TNS saat menyambungkan ke Oracle. Parameter CONNECTION_OPTIONS diperluas dan sekarang menggunakan TNSNamesFile dan ServerName sebagai variabel untuk menelusuri tnsnames.ora file dan membangun koneksi dengan server.

Dalam contoh di bawah ini, selama runtime SQL Server akan mencari tnsnames.ora lokasi file yang ditentukan oleh TNSNamesFile dan mencari host dan port jaringan yang ditentukan oleh ServerName.

CREATE EXTERNAL DATA SOURCE [external_data_source_name]
WITH (
    LOCATION = N'oracle://XE',
    CREDENTIAL = [OracleCredentialTest],
    CONNECTION_OPTIONS = N'TNSNamesFile=C:\Temp\tnsnames.ora;ServerName=XE'
);

Untuk contoh tambahan ke sumber data lain seperti MongoDB, lihat Mengonfigurasi PolyBase untuk mengakses data eksternal di MongoDB.

B. Membuat sumber data eksternal untuk mereferensikan Hadoop

Untuk membuat sumber data eksternal untuk mereferensikan kluster Hortonworks HDP atau Cloudera CDH Hadoop Anda, tentukan nama mesin, atau alamat IP Hadoop Namenode dan port.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
    LOCATION = 'hdfs://10.10.10.10:8050',
    TYPE = HADOOP
);

C. Membuat sumber data eksternal untuk mereferensikan Hadoop dengan push-down diaktifkan

RESOURCE_MANAGER_LOCATION Tentukan opsi untuk mengaktifkan komputasi push-down ke Hadoop untuk kueri PolyBase. Setelah diaktifkan, PolyBase membuat keputusan berbasis biaya untuk menentukan apakah komputasi kueri harus didorong ke Hadoop.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
    LOCATION = 'hdfs://10.10.10.10:8020',
    TYPE = HADOOP,
    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);

D. Membuat sumber data eksternal untuk mereferensikan Hadoop yang diamankan Kerberos

Untuk memverifikasi apakah kluster Hadoop diamankan Kerberos, periksa nilai hadoop.security.authentication properti di Hadoop core-site.xml. Untuk mereferensikan kluster Hadoop yang diamankan Kerberos, Anda harus menentukan kredensial cakupan database yang berisi nama pengguna dan kata sandi Kerberos Anda. Kunci master database digunakan untuk mengenkripsi rahasia kredensial lingkup database.

-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
    WITH IDENTITY = '<hadoop_user_name>',
    SECRET = '<hadoop_password>';

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
    LOCATION = 'hdfs://10.10.10.10:8050',
    CREDENTIAL = HadoopUser1,
    TYPE = HADOOP,
    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);

E. Membuat sumber data eksternal untuk mengakses data di Azure Storage menggunakan antarmuka wasb://

Dalam contoh ini, sumber data eksternal adalah akun Azure V2 Storage bernama logs. Kontainer penyimpanan disebut daily. Sumber data eksternal Azure Storage hanya untuk transfer data. Ini tidak mendukung pendorongan predikat. Namespace hierarkis tidak didukung saat mengakses data melalui wasb:// antarmuka. Perhatikan bahwa saat menyambungkan ke Azure Storage melalui konektor WASB,autentikasi harus dilakukan dengan kunci akun penyimpanan, bukan dengan tanda tangan akses bersama (SAS).

Contoh ini memperlihatkan cara membuat kredensial cakupan database untuk autentikasi ke akun Azure V2 Storage. Tentukan kunci akun Azure Storage dalam rahasia kredensial database. Anda dapat menentukan string apa pun dalam identitas kredensial lingkup database karena tidak digunakan selama autentikasi ke Azure Storage.

-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
    WITH IDENTITY = '<my_account>',
    SECRET = '<azure_storage_account_key>';

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
    LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
    CREDENTIAL = AzureStorageCredential,
    TYPE = HADOOP
);

F. Membuat sumber data eksternal untuk mereferensikan instans bernama SQL Server melalui konektivitas PolyBase

Berlaku untuk: SQL Server 2019 (15.x) dan yang lebih baru

Untuk membuat sumber data eksternal yang mereferensikan instans bernama SQL Server, gunakan CONNECTION_OPTIONS untuk menentukan nama instans.

Dalam contoh berikut, WINSQL2019 adalah nama host dan SQL2019 merupakan nama instans. 'Server=%s\SQL2019' adalah pasangan nilai kunci.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2019',
    CONNECTION_OPTIONS = 'Server=%s\SQL2019',
    CREDENTIAL = SQLServerCredentials
);

Atau, Anda dapat menggunakan port untuk menyambungkan ke instans default SQL Server.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2019:58137',
    CREDENTIAL = SQLServerCredentials
);

G. Membuat sumber data eksternal untuk mereferensikan replika sekunder grup ketersediaan AlwaysOn yang dapat dibaca

Berlaku untuk: SQL Server 2019 (15.x) dan yang lebih baru

Untuk membuat sumber data eksternal yang mereferensikan replika sekunder SQL Server yang dapat dibaca, gunakan CONNECTION_OPTIONS untuk menentukan ApplicationIntent=ReadOnly.

Pertama, buat kredensial lingkup database, menyimpan kredensial untuk login terautentikasi SQL. SQL ODBC Koneksi or untuk PolyBase hanya mendukung autentikasi dasar. Sebelum Anda membuat kredensial lingkup database, database harus memiliki kunci master untuk melindungi kredensial. Untuk informasi selengkapnya, lihat MEMBUAT KUNCI MASTER. Contoh berikut membuat kredensial cakupan database, menyediakan login dan kata sandi Anda sendiri.

CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
    WITH IDENTITY = 'username',
    SECRET = 'password';

Selanjutnya, buat sumber data eksternal baru.

Parameter ODBC Database tidak diperlukan, berikan nama database sebagai gantinya melalui nama tiga bagian dalam pernyataan CREATE EXTERNAL TABLE, dalam parameter LOCATION. Misalnya, lihat MEMBUAT TABEL EKSTERNAL.

Dalam contoh berikut, WINSQL2019AGL adalah nama pendengar grup ketersediaan dan dbname merupakan nama database yang akan menjadi target pernyataan CREATE EXTERNAL TABLE.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly',
    CREDENTIAL = SQLServerCredentials
);

Anda dapat menunjukkan perilaku pengalihan grup ketersediaan dengan menentukan ApplicationIntent dan membuat tabel eksternal pada tampilan sys.serverssistem . Dalam contoh skrip berikut, dua sumber data eksternal dibuat, dan satu tabel eksternal dibuat untuk masing-masing. Gunakan tampilan untuk menguji server mana yang merespons koneksi. Hasil serupa juga dapat dicapai melalui fitur perutean baca-saja. Untuk informasi selengkapnya, lihat Mengonfigurasi perutean baca-saja untuk grup ketersediaan AlwaysOn.

CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadOnlyIntent]
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly',
    CREDENTIAL = [SQLServerCredentials]
);
GO

CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadWriteIntent]
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadWrite',
    CREDENTIAL = [SQLServerCredentials]
);
GO

Di dalam database dalam grup ketersediaan, buat tampilan untuk dikembalikan sys.servers dan nama instans lokal, yang membantu Anda mengidentifikasi replika mana yang merespons kueri. Untuk informasi selengkapnya, lihat sys.servers.

CREATE VIEW vw_sys_servers
AS
SELECT [name]
FROM sys.servers
WHERE server_id = 0;
GO

Kemudian, buat tabel eksternal pada instans sumber:

CREATE EXTERNAL TABLE vw_sys_servers_ro (name SYSNAME NOT NULL)
WITH (
    DATA_SOURCE = [DataSource_SQLInstanceListener_ReadOnlyIntent],
    LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO

CREATE EXTERNAL TABLE vw_sys_servers_rw (name SYSNAME NOT NULL)
WITH (
    DATA_SOURCE = [DataSource_SQLInstanceListener_ReadWriteIntent],
    LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO

SELECT [name]
FROM dbo.vw_sys_servers_ro;--should return secondary replica instance

SELECT [name]
FROM dbo.vw_sys_servers_rw;--should return primary replica instance
GO

Contoh: Operasi massal

Penting

Jangan tambahkan /parameter tanda tangan akses berikutnya, nama file, atau tanda tangan akses bersama di akhir LOCATION URL saat mengonfigurasi sumber data eksternal untuk operasi massal.

H. Membuat sumber data eksternal untuk operasi massal yang mengambil data dari Azure Storage

Berlaku untuk: SQL Server 2017 (14.x) dan SQL Server 2019 (15.x)

Gunakan sumber data berikut untuk operasi massal menggunakan BULK INSERT atau OPENROWSET. Kredensial harus ditetapkan SHARED ACCESS SIGNATURE sebagai identitas, tidak boleh memiliki yang terdepan ? dalam token SAS, harus memiliki setidaknya izin baca pada file yang harus dimuat (misalnya srt=o&sp=r), dan periode kedaluwarsa harus valid (semua tanggal dalam waktu UTC). Untuk informasi selengkapnya tentang tanda tangan akses bersama, lihat Menggunakan Tanda Tangan Akses Bersama (SAS).

CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    -- Remove ? from the beginning of the SAS token
    SECRET = '<azure_shared_access_signature>';

CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
    LOCATION = 'https://newinvoices.blob.core.windows.net/week3',
    CREDENTIAL = AccessAzureInvoices,
    TYPE = BLOB_STORAGE
);

Untuk melihat contoh ini yang digunakan, lihat contoh INSERT MASSAL.

I. Membuat sumber data eksternal untuk mengakses data di Azure Storage menggunakan antarmuka abfs://

Berlaku untuk: SQL Server 2019 (15.x) CU11 dan yang lebih baru

Dalam contoh ini, sumber data eksternal adalah akun logsAzure Data Lake Storage Gen2 , menggunakan driver Azure Blob Filesystem (ABFS). Kontainer penyimpanan disebut daily. Sumber data eksternal Azure Data Lake Storage Gen2 hanya untuk transfer data, karena pendorongan predikat tidak didukung.

Contoh ini memperlihatkan cara membuat kredensial cakupan database untuk autentikasi ke akun Azure Data Lake Storage Gen2. Tentukan kunci akun Azure Storage dalam rahasia kredensial database. Anda dapat menentukan string apa pun dalam identitas kredensial lingkup database karena tidak digunakan selama autentikasi ke Azure Storage.

-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
    WITH IDENTITY = '<my_account>',
    SECRET = '<azure_storage_account_key>';

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
    LOCATION = 'abfss://daily@logs.dfs.core.windows.net/',
    CREDENTIAL = AzureStorageCredential,
    TYPE = HADOOP
);

j. Membuat sumber data eksternal menggunakan ODBC generik ke PostgreSQL

Seperti dalam contoh sebelumnya, pertama-tama buat kunci master database dan kredensial cakupan database. Kredensial cakupan database akan digunakan untuk sumber data eksternal. Contoh ini juga mengasumsikan bahwa penyedia data ODBC generik untuk PostgreSQL diinstal di server.

Dalam contoh ini, penyedia data ODBC generik digunakan untuk menyambungkan ke server database PostgreSQL di jaringan yang sama, di mana nama domain server PostgreSQL yang sepenuhnya memenuhi syarat adalah POSTGRES1, menggunakan port default TCP 5432.

CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH (
    LOCATION = 'odbc://POSTGRES1.domain:5432',
    CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};',
    CREDENTIAL = postgres_credential
);

Langkah berikutnya

Ringkasan: SQL Server 2022

Berlaku untuk: SQL Server 2022 (16.x) dan yang lebih baru

Membuat sumber data eksternal untuk kueri PolyBase. Sumber data eksternal digunakan untuk membangun konektivitas dan mendukung kasus penggunaan utama ini:

  • Virtualisasi data dan pemuatan data menggunakan PolyBase
  • Operasi pemuatan massal menggunakan BULK INSERT atau OPENROWSET

Catatan

Sintaks ini bervariasi dalam versi SQL Server yang berbeda. Gunakan menu dropdown pemilih versi untuk memilih versi yang sesuai. Konten ini berlaku untuk SQL Server 2022 (16.x) dan yang lebih baru.

Sintaks untuk SQL Server 2022 dan yang lebih baru

Untuk informasi selengkapnya tentang konvensi sintaks, lihat Konvensi sintaks transact-SQL.

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] PUSHDOWN = { ON | OFF } ]
  )
[ ; ]

Argumen

data_source_name

Menentukan nama yang ditentukan pengguna untuk sumber data. Nama harus unik dalam database di SQL Server.

LOCATION = '<prefix>://<path[:port]>'

Menyediakan protokol dan jalur konektivitas ke sumber data eksternal.

Sumber Data Eksternal awalan lokasi Koneksi or Jalur lokasi Lokasi yang didukung berdasarkan produk / layanan Autentikasi
Akun Azure Storage(V2) abs abs://<container_name>@<storage_account_name>.blob.core.windows.net/
or
abs://<storage_account_name>.blob.core.windows.net/<container_name>
Dimulai dengan SQL Server 2022 (16.x)
Namespace Hierarkis didukung.
Tanda Tangan Akses Bersama (SAS)
Azure Data Lake Storage Gen2 adls adls://<container_name>@<storage_account_name>.dfs.core.windows.net/
or
adls://<storage_account_name>.dfs.core.windows.net/<container_name>
Dimulai dengan SQL Server 2022 (16.x) Tanda Tangan Akses Bersama (SAS)
Server SQL sqlserver <server_name>[\<instance_name>][:port] Dimulai dengan SQL Server 2019 (15.x) Autentikasi SQL saja
Oracle oracle <server_name>[:port] Dimulai dengan SQL Server 2019 (15.x) Autentikasi dasar saja
Teradata teradata <server_name>[:port] Dimulai dengan SQL Server 2019 (15.x) Autentikasi dasar saja
MongoDB atau Cosmos DB API untuk MongoDB mongodb <server_name>[:port] Dimulai dengan SQL Server 2019 (15.x) Autentikasi dasar saja
Konektivitas Database Terbuka Generik odbc <server_name>[:port] Dimulai dengan SQL Server 2019 (15.x) - Hanya Windows Autentikasi dasar saja
Operasi Massal https <storage_account>.blob.core.windows.net/<container> Dimulai dengan SQL Server 2017 (14.x) Tanda Tangan Akses Bersama (SAS)
Penyimpanan objek yang kompatibel dengan S3 s3 - Kompatibel dengan S3: s3://<server_name>:<port>/
- AWS S3: s3://<bucket_name>.S3.amazonaws.com[:port]/<folder>
atau s3://s3.amazonaws.com[:port]/<bucket_name>/<folder>
Dimulai dengan SQL Server 2022 (16.x) Dasar atau pass-through (STS) *

* Harus berupa kredensial tercakup database, di mana IDENTITY dikodekan secara IDENTITY = 'S3 Access Key' permanen dan argumen SECRET dalam format = '<AccessKeyID>:<SecretKeyID>' atau gunakan otorisasi pass-through (STS). Untuk informasi selengkapnya, lihat Mengonfigurasi PolyBase untuk mengakses data eksternal di penyimpanan objek yang kompatibel dengan S3.

Jalur lokasi:

  • port = Port yang didengarkan sumber data eksternal. Opsional dalam banyak kasus, tergantung pada konfigurasi jaringan.
  • <container_name> = kontainer akun penyimpanan yang menyimpan data. Kontainer root bersifat baca-saja, data tidak dapat ditulis kembali ke kontainer.
  • <storage_account> = nama akun penyimpanan sumber daya Azure.
  • <server_name> = nama host.
  • <instance_name> = nama instans bernama SQL Server. Digunakan jika Anda memiliki SQL Server Browser Service yang berjalan pada instans target.
  • <ip_address>:<port> = Hanya untuk penyimpanan objek yang kompatibel dengan S3 (dimulai dengan SQL Server 2022 (16.x)), titik akhir dan port yang digunakan untuk menyambungkan ke penyimpanan yang kompatibel dengan S3.
  • <bucket_name> = Hanya untuk penyimpanan objek yang kompatibel dengan S3 (dimulai dengan SQL Server 2022 (16.x)), khusus untuk platform penyimpanan.
  • <region> = Hanya untuk penyimpanan objek yang kompatibel dengan S3 (dimulai dengan SQL Server 2022 (16.x)), khusus untuk platform penyimpanan.
  • <folder> = Bagian dari jalur penyimpanan dalam URL penyimpanan.

Catatan dan panduan tambahan saat mengatur lokasi:

  • Mesin Database SQL Server tidak memverifikasi keberadaan sumber data eksternal saat objek dibuat. Untuk memvalidasi, buat tabel eksternal menggunakan sumber data eksternal.
  • Anda dapat menggunakan sqlserver konektor untuk menyambungkan SQL Server 2019 (15.x) ke SQL Server lain atau ke Azure SQL Database.
  • Tentukan Driver={<Name of Driver>} saat menyambungkan melalui ODBC.
  • Opsi Namespace Hierarkis untuk Akun Penyimpanan Azure (V2) menggunakan awalan adls didukung melalui Azure Data Lake Storage Gen2 di SQL Server 2022 (16.x).
  • Dukungan SQL Server untuk sumber data eksternal HDFS Cloudera (CDP) dan Hortonworks (HDP) dihentikan dan tidak termasuk dalam SQL Server 2022 (16.x). Tidak perlu menggunakan argumen TYPE di SQL Server 2022 (16.x).
  • Untuk informasi selengkapnya tentang penyimpanan objek yang kompatibel dengan S3 dan PolyBase yang dimulai dengan SQL Server 2022 (16.x), lihat Mengonfigurasi PolyBase untuk mengakses data eksternal di penyimpanan objek yang kompatibel dengan S3. Untuk contoh kueri file parkek dalam penyimpanan objek yang kompatibel dengan S3, lihat Virtualisasi file parkek dalam penyimpanan objek yang kompatibel dengan S3 dengan PolyBase.
  • Berbeda dari versi sebelumnya, di SQL Server 2022 (16.x), awalan yang digunakan untuk Akun Azure Storage (v2) berubah dari wasb[s] ke abs.
  • Berbeda dari versi sebelumnya, di SQL Server 2022 (16.x), awalan yang digunakan untuk Azure Data Lake Storage Gen2 berubah dari abfs[s] ke adls.
  • Untuk contoh menggunakan PolyBase untuk memvirtualisasi file CSV di Azure Storage, lihat Virtualisasi file CSV dengan PolyBase.
  • Untuk contoh menggunakan PolyBase untuk memvirtualisasi tabel delta di ADLS Gen2, lihat Virtualisasi tabel delta dengan PolyBase.
  • SQL Server 2022 (16.x) sepenuhnya mendukung dua format URL untuk Akun Azure Storage v2 (abs) dan Azure Data Lake Gen2 (adls).
    • Jalur LOCATION dapat menggunakan format: <container>@<storage_account_name>.. (disarankan) atau <storage_account_name>../<container>. Misalnya:
      • Akun Azure Storage v2: abs://<container>@<storage_account_name>.blob.core.windows.net (disarankan) atau abs://<storage_account_name>.blob.core.windows.net/<container>.
      • Azure Data Lake Gen2 mendukung: adls://<container>@<storage_account_name>.blob.core.windows.net (disarankan) atau adls://<storage_account_name>.dfs.core.windows.net/<container>.

CONNECTION_OPTIONS = key_value_pair

Ditentukan untuk SQL Server 2019 (15.x) dan yang lebih baru. Menentukan opsi tambahan saat menyambungkan ODBC ke sumber data eksternal. Untuk menggunakan beberapa opsi koneksi, pisahkan dengan titik koma.

Berlaku untuk koneksi generik ODBC , serta konektor bawaan ODBC untuk SQL Server, Oracle, Teradata, MongoDB, dan Azure Cosmos DB API untuk MongoDB.

key_value_pair adalah kata kunci dan nilai untuk opsi koneksi tertentu. Kata kunci dan nilai yang tersedia bergantung pada jenis sumber data eksternal. Nama driver diperlukan sebagai minimum, tetapi ada opsi lain seperti APP='<your_application_name>' atau ApplicationIntent= ReadOnly|ReadWrite yang juga berguna untuk diatur dan dapat membantu pemecahan masalah.

Pasangan nilai kunci yang mungkin khusus untuk driver. Untuk informasi selengkapnya untuk setiap penyedia, lihat MEMBUAT SUMBER DATA EKSTERNAL (Transact-SQL) CONNECTION_OPTIONS.

Mulai berlaku untuk: Pembaruan kumulatif SQL Server 2022 (16.x) 2, kata kunci tambahan diperkenalkan untuk mendukung file Oracle TNS:

  • Kata kunci TNSNamesFile menentukan jalur file ke file yang tnsnames.ora terletak di server Oracle.
  • Kata kunci ServerName menentukan alias yang digunakan di dalam tnsnames.ora yang akan digunakan untuk mengganti nama host dan port.

PUSHDOWN = AKTIF | OFF

Berlaku untuk: SQL Server 2019 (15.x) dan yang lebih baru. Menyatakan apakah komputasi dapat didorong ke sumber data eksternal. Ini aktif secara default.

PUSHDOWN didukung saat menyambungkan ke SQL Server, Oracle, Teradata, MongoDB, API Azure Cosmos DB untuk MongoDB, atau ODBC di tingkat sumber data eksternal.

Mengaktifkan atau menonaktifkan push-down di tingkat kueri dicapai melalui petunjuk.

INFO MASUK = credential_name

Menentukan kredensial cakupan database untuk mengautentikasi ke sumber data eksternal.

Catatan dan panduan tambahan saat membuat kredensial:

Ada beberapa cara untuk membuat tanda tangan akses bersama:

  • Anda dapat membuat token SAS dengan menavigasi ke portal Azure -><Your_Storage_Account> -> Tanda tangan akses bersama -> Mengonfigurasi izin -> Hasilkan SAS dan string koneksi. Untuk informasi selengkapnya, lihat Membuat tanda tangan akses bersama.

  • Anda dapat membuat dan mengonfigurasi SAS dengan Azure Storage Explorer.

  • Anda dapat membuat SAS secara terprogram melalui PowerShell, Azure CLI, .NET, dan REST API. Untuk informasi selengkapnya, lihat Berikan akses terbatas ke sumber daya Azure Storage menggunakan tanda tangan akses bersama (SAS).

  • Token SAS harus dikonfigurasi sebagai berikut:

    • Ketika token SAS dihasilkan, token SAS menyertakan tanda tanya ('?') di awal token. Kecualikan yang terdepan ? saat dikonfigurasi sebagai SECRET.
    • Gunakan periode kedaluwarsa yang valid (semua tanggal dalam waktu UTC).
    • Berikan setidaknya izin baca pada file yang harus dimuat (misalnya srt=o&sp=r). Beberapa tanda tangan akses bersama dapat dibuat untuk kasus penggunaan yang berbeda. Izin harus diberikan sebagai berikut:
    Perbuatan Izin
    Membaca data dari file Baca
    Membaca data dari beberapa file dan subfolder Baca dan Daftar
    Gunakan Buat Tabel Eksternal sebagai Pilih (CETAS) Baca, Buat, Cantumkan, dan Tulis
  • Untuk Azure Blob Storage dan Azure Data Lake Gen 2:

    • Layanan yang diizinkan: Blob harus dipilih untuk menghasilkan token SAS
    • Jenis sumber daya yang diizinkan: Container dan Object harus dipilih untuk menghasilkan token SAS

Untuk contoh penggunaan CREDENTIAL dengan penyimpanan objek yang kompatibel dengan S3 dan PolyBase, lihat Mengonfigurasi PolyBase untuk mengakses data eksternal di penyimpanan objek yang kompatibel dengan S3.

Untuk membuat kredensial lingkup database, lihat MEMBUAT KREDENSIAL CAKUPAN DATABASE (Transact-SQL).

Izin

CONTROL Memerlukan izin pada database di SQL Server.

Penguncian

Mengambil kunci bersama pada EXTERNAL DATA SOURCE objek.

Keamanan

PolyBase mendukung autentikasi berbasis proksi untuk sebagian besar sumber data eksternal. Buat kredensial lingkup database untuk membuat akun proksi.

Tingkatkan ke SQL Server 2022

Mulai SQL Server 2022 (16.x), sumber data eksternal Hadoop tidak lagi didukung. Diperlukan untuk membuat ulang sumber data eksternal yang sebelumnya dibuat secara manual dengan TYPE = HADOOP, dan tabel eksternal apa pun yang menggunakan sumber data eksternal ini.

Pengguna juga perlu mengonfigurasi sumber data eksternal mereka untuk menggunakan konektor baru saat menyambungkan ke Azure Storage.

Sumber Data Eksternal Dari Untuk
Azure Blob Storage wasb[s] abs
ADLS Gen2 abfs[s] adls

Contoh

Penting

Untuk informasi tentang cara menginstal dan mengaktifkan PolyBase, lihat Menginstal PolyBase di Windows

J. Membuat sumber data eksternal di SQL Server untuk mereferensikan Oracle

Untuk membuat sumber data eksternal yang mereferensikan Oracle, pastikan Anda memiliki kredensial lingkup database. Anda juga dapat secara opsional mengaktifkan atau menonaktifkan push-down komputasi terhadap sumber data ini.

-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL OracleProxyAccount
    WITH IDENTITY = 'oracle_username',
    SECRET = 'oracle_password';

CREATE EXTERNAL DATA SOURCE MyOracleServer
WITH (
    LOCATION = 'oracle://145.145.145.145:1521',
    CREDENTIAL = OracleProxyAccount,
    PUSHDOWN = ON
);

Secara opsional, sumber data eksternal ke Oracle dapat menggunakan autentikasi proksi untuk memberikan kontrol akses butir halus. Pengguna proksi dapat dikonfigurasi untuk memiliki akses terbatas dibandingkan dengan pengguna yang ditiru.

CREATE DATABASE SCOPED CREDENTIAL [OracleProxyCredential]
    WITH IDENTITY = 'oracle_username',
    SECRET = 'oracle_password';

CREATE EXTERNAL DATA SOURCE [OracleSalesSrvr]
WITH (
    LOCATION = 'oracle://145.145.145.145:1521',
    CONNECTION_OPTIONS = 'ImpersonateUser=%CURRENT_USER',
    CREDENTIAL = [OracleProxyCredential]
);

Atau, Anda dapat mengautentikasi menggunakan TNS.

Mulai berlaku untuk: SQL Server 2022 (16.x) Pembaruan Kumulatif 2, CREATE EXTERNAL DATA SOURCE sekarang mendukung penggunaan file TNS saat menyambungkan ke Oracle. Parameter CONNECTION_OPTIONS diperluas dan sekarang menggunakan TNSNamesFile dan ServerName sebagai variabel untuk menelusuri tnsnames.ora file dan membangun koneksi dengan server.

Dalam contoh di bawah ini, selama runtime SQL Server akan mencari tnsnames.ora lokasi file yang ditentukan oleh TNSNamesFile dan mencari host dan port jaringan yang ditentukan oleh ServerName.

CREATE EXTERNAL DATA SOURCE [external_data_source_name]
WITH (
    LOCATION = N'oracle://XE',
    CREDENTIAL = [OracleCredentialTest],
    CONNECTION_OPTIONS = N'TNSNamesFile=C:\Temp\tnsnames.ora;ServerName=XE'
);

B. Membuat sumber data eksternal untuk mereferensikan instans bernama SQL Server melalui konektivitas PolyBase

Berlaku untuk: SQL Server 2019 (15.x) dan yang lebih baru

Untuk membuat sumber data eksternal yang mereferensikan instans bernama SQL Server, gunakan CONNECTION_OPTIONS untuk menentukan nama instans.

Pertama, buat kredensial lingkup database, menyimpan kredensial untuk login terautentikasi SQL. SQL ODBC Koneksi or untuk PolyBase hanya mendukung autentikasi dasar. Sebelum Anda membuat kredensial lingkup database, database harus memiliki kunci master untuk melindungi kredensial. Untuk informasi selengkapnya, lihat MEMBUAT KUNCI MASTER. Contoh berikut membuat kredensial cakupan database, menyediakan login dan kata sandi Anda sendiri.

CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
    WITH IDENTITY = 'username',
    SECRET = 'password';

Dalam contoh berikut, WINSQL2019 adalah nama host dan SQL2019 merupakan nama instans. 'Server=%s\SQL2019' adalah pasangan nilai kunci.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2019',
    CONNECTION_OPTIONS = 'Server=%s\SQL2019',
    CREDENTIAL = SQLServerCredentials
);

Atau, Anda dapat menggunakan port untuk menyambungkan ke instans default SQL Server.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2019:58137',
    CREDENTIAL = SQLServerCredentials
);

C. Membuat sumber data eksternal untuk mereferensikan replika sekunder grup ketersediaan AlwaysOn yang dapat dibaca

Berlaku untuk: SQL Server 2019 (15.x) dan yang lebih baru

Untuk membuat sumber data eksternal yang mereferensikan replika sekunder SQL Server yang dapat dibaca, gunakan CONNECTION_OPTIONS untuk menentukan ApplicationIntent=ReadOnly.

Pertama, buat kredensial lingkup database, menyimpan kredensial untuk login terautentikasi SQL. SQL ODBC Koneksi or untuk PolyBase hanya mendukung autentikasi dasar. Sebelum Anda membuat kredensial lingkup database, database harus memiliki kunci master untuk melindungi kredensial. Untuk informasi selengkapnya, lihat MEMBUAT KUNCI MASTER. Contoh berikut membuat kredensial cakupan database, menyediakan login dan kata sandi Anda sendiri.

CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
    WITH IDENTITY = 'username',
    SECRET = 'password';

Selanjutnya, buat sumber data eksternal baru.

Parameter ODBC Database tidak diperlukan, berikan nama database sebagai gantinya melalui nama tiga bagian dalam pernyataan CREATE EXTERNAL TABLE, dalam parameter LOCATION. Misalnya, lihat MEMBUAT TABEL EKSTERNAL.

Dalam contoh berikut, WINSQL2019AGL adalah nama pendengar grup ketersediaan dan dbname merupakan nama database yang akan menjadi target pernyataan CREATE EXTERNAL TABLE.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly',
    CREDENTIAL = SQLServerCredentials
);

Anda dapat menunjukkan perilaku pengalihan grup ketersediaan dengan menentukan ApplicationIntent dan membuat tabel eksternal pada tampilan sys.serverssistem . Dalam contoh skrip berikut, dua sumber data eksternal dibuat, dan satu tabel eksternal dibuat untuk masing-masing. Gunakan tampilan untuk menguji server mana yang merespons koneksi. Hasil serupa juga dapat dicapai melalui fitur perutean baca-saja. Untuk informasi selengkapnya, lihat Mengonfigurasi perutean baca-saja untuk grup ketersediaan AlwaysOn.

CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadOnlyIntent]
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly',
    CREDENTIAL = [SQLServerCredentials]
);
GO

CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadWriteIntent]
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadWrite',
    CREDENTIAL = [SQLServerCredentials]
);
GO

Di dalam database dalam grup ketersediaan, buat tampilan untuk dikembalikan sys.servers dan nama instans lokal, yang membantu Anda mengidentifikasi replika mana yang merespons kueri. Untuk informasi selengkapnya, lihat sys.servers.

CREATE VIEW vw_sys_servers AS
SELECT [name] FROM sys.servers
WHERE server_id = 0;
GO

Kemudian, buat tabel eksternal pada instans sumber:

CREATE EXTERNAL TABLE vw_sys_servers_ro (name SYSNAME NOT NULL)
WITH (
    DATA_SOURCE = [DataSource_SQLInstanceListener_ReadOnlyIntent],
    LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO

CREATE EXTERNAL TABLE vw_sys_servers_rw (name SYSNAME NOT NULL)
WITH (
    DATA_SOURCE = [DataSource_SQLInstanceListener_ReadWriteIntent],
    LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO

SELECT [name]
FROM dbo.vw_sys_servers_ro;--should return secondary replica instance

SELECT [name]
FROM dbo.vw_sys_servers_rw;--should return primary replica instance
GO

D. Membuat sumber data eksternal untuk mengkueri file parkek di penyimpanan objek yang kompatibel dengan S3 melalui PolyBase

Berlaku untuk: SQL Server 2022 (16.x) dan yang lebih baru

Contoh skrip berikut membuat sumber s3_ds data eksternal di database pengguna sumber di SQL Server. Sumber data eksternal mereferensikan s3_dc kredensial cakupan database.

CREATE DATABASE SCOPED CREDENTIAL s3_dc
    WITH IDENTITY = 'S3 Access Key', -- for S3-compatible object storage the identity must always be S3 Access Key
    SECRET = '<access_key_id>:<secret_key_id>' -- provided by the S3-compatible object storage
GO

CREATE EXTERNAL DATA SOURCE s3_ds
WITH (
    LOCATION = 's3://<ip_address>:<port>/',
    CREDENTIAL = s3_dc
);
GO

Verifikasi sumber data eksternal baru dengan sys.external_data_sources.

SELECT * FROM sys.external_data_sources;

Kemudian, contoh berikut menunjukkan penggunaan T-SQL untuk mengkueri file parket yang disimpan dalam penyimpanan objek yang kompatibel dengan S3 melalui kueri OPENROWSET. Untuk informasi selengkapnya, lihat Virtualisasi file parkek di penyimpanan objek yang kompatibel dengan S3 dengan PolyBase.

SELECT *
FROM OPENROWSET (
    BULK '/<bucket>/<parquet_folder>',
    FORMAT = 'PARQUET',
    DATA_SOURCE = 's3_ds'
) AS [cc];

E. Membuat sumber data eksternal menggunakan ODBC generik ke PostgreSQL

Seperti dalam contoh sebelumnya, pertama-tama buat kunci master database dan kredensial cakupan database. Kredensial cakupan database akan digunakan untuk sumber data eksternal. Contoh ini juga mengasumsikan bahwa penyedia data ODBC generik untuk PostgreSQL diinstal di server.

Dalam contoh ini, penyedia data ODBC generik digunakan untuk menyambungkan ke server database PostgreSQL di jaringan yang sama, di mana nama domain server PostgreSQL yang sepenuhnya memenuhi syarat adalah POSTGRES1, menggunakan port default TCP 5432.

CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH (
    LOCATION = 'odbc://POSTGRES1.domain:5432',
    CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};',
    CREDENTIAL = postgres_credential
);

Azure Storage

Buat tanda tangan akses bersama

Untuk Azure Blob Storage dan Azure Data Lake Gen2, metode autentikasi yang didukung adalah tanda tangan akses bersama (SAS). Salah satu cara sederhana untuk menghasilkan token tanda tangan akses bersama mengikuti langkah-langkah berikut. Untuk informasi selengkapnya, lihat INFO MASUK.

  1. Navigasikan ke portal Azure, dan Akun Penyimpanan yang diinginkan.
  2. Navigasi ke Kontainer yang Anda inginkan di bawah menu Penyimpanan Data.
  3. Pilih Token akses bersama.
  4. Pilih izin yang sesuai berdasarkan tindakan yang diinginkan, untuk referensi gunakan tabel bellow:
Perbuatan Izin
Membaca data dari file Baca
Membaca data dari beberapa file dan subfolder Baca dan Daftar
Gunakan Buat Tabel Eksternal sebagai Pilih (CETAS) Baca, Buat, dan Tulis
  1. Pilih tanggal kedaluwarsa token.
  2. Hasilkan token dan URL SAS.
  3. Salin token SAS.

F. Membuat sumber data eksternal untuk mengakses data di Azure Blob Storage menggunakan antarmuka abs://

Berlaku untuk: SQL Server 2022 (16.x) dan yang lebih baru

Mulai SQL Server 2022 (16.x), gunakan awalan abs baru untuk Akun Azure Storage v2. abs Awalan mendukung autentikasi menggunakan SHARED ACCESS SIGNATURE. abs Awalan wasbmenggantikan , digunakan dalam versi sebelumnya. HADOOP tidak lagi didukung, tidak perlu lagi menggunakan TYPE = BLOB_STORAGE.

Kunci akun penyimpanan Azure tidak lagi diperlukan, sebagai gantinya menggunakan Token SAS seperti yang dapat kita lihat dalam contoh berikut:

-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO

CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredentialv2
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE', -- to use SAS the identity must be fixed as-is
    SECRET = '<Blob_SAS_Token>';
GO

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
    LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
    CREDENTIAL = AzureStorageCredentialv2,
);

Untuk contoh yang lebih rinci tentang cara mengakses file CSV yang disimpan di Azure Blob Storage, lihat Virtualisasi file CSV dengan PolyBase.

G. Membuat sumber data eksternal untuk mengakses data di Azure Data Lake Gen2

Berlaku untuk: SQL Server 2022 (16.x) dan versi yang lebih baru

Mulai SQL Server 2022 (16.x), gunakan awalan adls baru untuk Azure Data Lake Gen2, menggantikan abfs yang digunakan dalam versi sebelumnya. adls Awalan juga mendukung token SAS sebagai metode autentikasi seperti yang ditunjukkan dalam contoh ini:

--Create a database scoped credential using SAS Token
CREATE DATABASE SCOPED CREDENTIAL datalakegen2
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    SECRET = '<DataLakeGen2_SAS_Token>';
GO

CREATE EXTERNAL DATA SOURCE data_lake_gen2_dfs
WITH (
    LOCATION = 'adls://<container>@<storage_account>.dfs.core.windows.net',
    CREDENTIAL = datalakegen2
);

Untuk contoh yang lebih rinci tentang cara mengakses file delta yang disimpan di Azure Data Lake Gen2, lihat Virtualisasi tabel delta dengan PolyBase.

Contoh: Operasi Massal

Penting

Jangan tambahkan /parameter tanda tangan akses berikutnya, nama file, atau tanda tangan akses bersama di akhir LOCATION URL saat mengonfigurasi sumber data eksternal untuk operasi massal.

H. Membuat sumber data eksternal untuk operasi massal yang mengambil data dari Azure Storage

Berlaku untuk: SQL Server 2022 (16.x) dan yang lebih baru.

Gunakan sumber data berikut untuk operasi massal menggunakan BULK INSERT atau OPENROWSET. Kredensial harus ditetapkan SHARED ACCESS SIGNATURE sebagai identitas, tidak boleh memiliki yang terdepan ? dalam token SAS, harus memiliki setidaknya izin baca pada file yang harus dimuat (misalnya srt=o&sp=r), dan periode kedaluwarsa harus valid (semua tanggal dalam waktu UTC). Untuk informasi selengkapnya tentang tanda tangan akses bersama, lihat Menggunakan Tanda Tangan Akses Bersama (SAS).

CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    -- Remove ? from the beginning of the SAS token
    SECRET = '<azure_shared_access_signature>';

CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
    LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
    CREDENTIAL = AccessAzureInvoices,
);

Langkah berikutnya

* SQL Database *  

 

Gambaran Umum: Azure SQL Database

Berlaku untuk:Azure SQL Database

Membuat sumber data eksternal untuk kueri elastis. Sumber data eksternal digunakan untuk membangun konektivitas dan mendukung kasus penggunaan utama ini:

  • Operasi pemuatan massal menggunakan BULK INSERT atau OPENROWSET
  • Mengkueri instans SQL Database jarak jauh atau Azure Synapse menggunakan SQL Database dengan kueri elastis
  • Mengkueri SQL Database yang dipecah menggunakan kueri elastis

Sintaks

Untuk informasi selengkapnya tentang konvensi sintaks, lihat Konvensi sintaks transact-SQL.

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] TYPE = { BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER } ]
    [ [ , ] DATABASE_NAME = '<database_name>' ]
    [ [ , ] SHARD_MAP_NAME = '<shard_map_manager>' ] )
[ ; ]

Argumen

data_source_name

Menentukan nama yang ditentukan pengguna untuk sumber data. Nama harus unik dalam database di SQL Database.

LOCATION = '<prefix>://<path[:port]>'

Menyediakan protokol dan jalur konektivitas ke sumber data eksternal.

Sumber Data Eksternal awalan lokasi Koneksi or Jalur lokasi Ketersediaan
Operasi Massal https <storage_account>.blob.core.windows.net/<container>
Kueri Elastis (pecahan) Tidak diperlukan <shard_map_server_name>.database.windows.net
Kueri Elastis (jarak jauh) Tidak diperlukan <remote_server_name>.database.windows.net
EdgeHub edgehub edgehub:// Hanya tersedia di Azure SQL Edge. EdgeHub selalu lokal untuk instans Azure SQL Edge. Dengan demikian, tidak perlu menentukan jalur atau nilai port.
Kafka kafka kafka://<kafka_bootstrap_server_name_ip>:<port_number> Hanya tersedia di Azure SQL Edge.

Jalur lokasi:

  • <shard_map_server_name> = Nama server logis di Azure yang menghosting manajer peta shard. Argumen DATABASE_NAME menyediakan database yang digunakan untuk menghosting peta shard dan SHARD_MAP_NAME digunakan untuk peta shard itu sendiri.
  • <remote_server_name> = Nama server logis target untuk kueri elastis. Nama database ditentukan menggunakan DATABASE_NAME argumen .

Catatan dan panduan tambahan saat mengatur lokasi:

  • Mesin Database tidak memverifikasi keberadaan sumber data eksternal saat objek dibuat. Untuk memvalidasi, buat tabel eksternal menggunakan sumber data eksternal.

INFO MASUK = credential_name

Menentukan kredensial cakupan database untuk mengautentikasi ke sumber data eksternal.

Catatan dan panduan tambahan saat membuat kredensial:

  • Untuk memuat data dari Azure Storage ke Azure SQL Database, gunakan Tanda Tangan Akses Bersama (token SAS).
  • CREDENTIAL hanya diperlukan jika data telah diamankan. CREDENTIAL tidak diperlukan untuk himpunan data yang memungkinkan akses anonim.
  • TYPE = BLOB_STORAGEKetika , kredensial harus dibuat menggunakan SHARED ACCESS SIGNATURE sebagai identitas.
  • Saat menyambungkan ke Azure Storage melalui konektor WASB,autentikasi harus dilakukan dengan kunci akun penyimpanan, bukan dengan tanda tangan akses bersama (SAS).
  • Ketika TYPE = HADOOP kredensial harus dibuat menggunakan kunci akun penyimpanan sebagai SECRET.
  • TYPE = BLOB_STORAGE hanya diizinkan untuk operasi massal; Anda tidak dapat membuat tabel eksternal untuk sumber data eksternal dengan TYPE = BLOB_STORAGE.

Ada beberapa cara untuk membuat tanda tangan akses bersama:

  • Anda dapat membuat token SAS dengan menavigasi ke portal Azure -><Your_Storage_Account> -> Tanda tangan akses bersama -> Mengonfigurasi izin -> Hasilkan SAS dan string koneksi. Untuk informasi selengkapnya, lihat Membuat tanda tangan akses bersama.

  • Anda dapat membuat dan mengonfigurasi SAS dengan Azure Storage Explorer.

  • Anda dapat membuat SAS secara terprogram melalui PowerShell, Azure CLI, .NET, dan REST API. Untuk informasi selengkapnya, lihat Berikan akses terbatas ke sumber daya Azure Storage menggunakan tanda tangan akses bersama (SAS).

  • Token SAS harus dikonfigurasi sebagai berikut:

    • Ketika token SAS dihasilkan, token SAS menyertakan tanda tanya ('?') di awal token. Kecualikan yang terdepan ? saat dikonfigurasi sebagai SECRET.
    • Gunakan periode kedaluwarsa yang valid (semua tanggal dalam waktu UTC).
    • Berikan setidaknya izin baca pada file yang harus dimuat (misalnya srt=o&sp=r). Beberapa tanda tangan akses bersama dapat dibuat untuk kasus penggunaan yang berbeda. Izin harus diberikan sebagai berikut:
    Perbuatan Izin
    Membaca data dari file Baca
    Membaca data dari beberapa file dan subfolder Baca dan Daftar
    Gunakan Buat Tabel Eksternal sebagai Pilih (CETAS) Baca, Buat, dan Tulis

Untuk contoh penggunaan CREDENTIAL dengan SHARED ACCESS SIGNATURE danBLOB_STORAGETYPE = , lihat Membuat sumber data eksternal untuk menjalankan operasi massal dan mengambil data dari Azure Storage ke SQL Database

Untuk membuat kredensial lingkup database, lihat MEMBUAT KREDENSIAL CAKUPAN DATABASE (Transact-SQL).

TYPE = [ BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER]

Menentukan jenis sumber data eksternal yang sedang dikonfigurasi. Parameter ini tidak selalu diperlukan.

  • Gunakan RDBMS untuk kueri lintas database menggunakan kueri elastis dari SQL Database.
  • Gunakan SHARD_MAP_MANAGER saat membuat sumber data eksternal saat menyambungkan ke SQL Database yang dipecah.
  • Gunakan BLOB_STORAGE saat menjalankan operasi massal dengan INSERT MASSAL, atau OPENROWSET.

Penting

Jangan atur TYPE jika menggunakan sumber data eksternal lainnya.

DATABASE_NAME = database_name

Konfigurasikan argumen ini saat TYPE diatur ke RDBMS atau SHARD_MAP_MANAGER.

TYPE Nilai DATABASE_NAME
RDBMS Nama database jarak jauh di server yang disediakan menggunakan LOCATION
SHARD_MAP_MANAGER Nama database yang beroperasi sebagai pengelola peta shard

Misalnya memperlihatkan cara membuat sumber data eksternal di mana TYPE = RDBMS merujuk ke Membuat sumber data eksternal RDBMS

SHARD_MAP_NAME = shard_map_name

Digunakan saat TYPE argumen diatur ke SHARD_MAP_MANAGER hanya untuk mengatur nama peta shard.

Untuk contoh yang menunjukkan cara membuat sumber data eksternal tempat TYPE = SHARD_MAP_MANAGER merujuk ke Membuat sumber data eksternal manajer peta shard

Izin

CONTROL Memerlukan izin pada database di Azure SQL Database.

Penguncian

Mengambil kunci bersama pada EXTERNAL DATA SOURCE objek.

Contoh

J. Membuat sumber data eksternal manajer peta shard

Untuk membuat sumber data eksternal untuk mereferensikan SHARD_MAP_MANAGER, tentukan nama server SQL Database yang menghosting pengelola peta shard di SQL Database atau database SQL Server pada komputer virtual.

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

CREATE DATABASE SCOPED CREDENTIAL ElasticDBQueryCred
    WITH IDENTITY = '<username>',
    SECRET = '<password>';

CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc
WITH (
    TYPE = SHARD_MAP_MANAGER,
    LOCATION = '<server_name>.database.windows.net',
    DATABASE_NAME = 'ElasticScaleStarterKit_ShardMapManagerDb',
    CREDENTIAL = ElasticDBQueryCred,
    SHARD_MAP_NAME = 'CustomerIDShardMap'
);

Untuk tutorial langkah demi langkah, lihat Mulai menggunakan kueri elastis untuk sharding (pemartisian horizontal).

B. Membuat sumber data eksternal RDBMS

Untuk membuat sumber data eksternal untuk mereferensikan RDBMS, tentukan nama server SQL Database dari database jarak jauh di SQL Database.

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

CREATE DATABASE SCOPED CREDENTIAL SQL_Credential
    WITH IDENTITY = '<username>',
    SECRET = '<password>';

CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc
WITH (
    TYPE = RDBMS,
    LOCATION = '<server_name>.database.windows.net',
    DATABASE_NAME = 'Customers',
    CREDENTIAL = SQL_Credential
);

Untuk tutorial langkah demi langkah tentang RDBMS, lihat Mulai menggunakan kueri lintas database (pemartisian vertikal).

Contoh: Operasi massal

Penting

Jangan tambahkan /parameter tanda tangan akses berikutnya, nama file, atau tanda tangan akses bersama di akhir LOCATION URL saat mengonfigurasi sumber data eksternal untuk operasi massal.

C. Membuat sumber data eksternal untuk operasi massal yang mengambil data dari Azure Storage

Gunakan sumber data berikut untuk operasi massal menggunakan BULK INSERT atau OPENROWSET. Kredensial harus ditetapkan SHARED ACCESS SIGNATURE sebagai identitas, tidak boleh memiliki yang terdepan ? dalam token SAS, harus memiliki setidaknya izin baca pada file yang harus dimuat (misalnya srt=o&sp=r), dan periode kedaluwarsa harus valid (semua tanggal dalam waktu UTC). Untuk informasi selengkapnya tentang tanda tangan akses bersama, lihat Menggunakan Tanda Tangan Akses Bersama (SAS).

CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    -- Remove ? from the beginning of the SAS token
    SECRET = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=2016-12-29T16:55:34Z***************';

CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
    LOCATION = 'https://newinvoices.blob.core.windows.net/week3',
    CREDENTIAL = AccessAzureInvoices,
    TYPE = BLOB_STORAGE
);

Untuk melihat contoh ini sedang digunakan, lihat SISIPAN MASSAL.

Contoh: Azure SQL Edge

Penting

Untuk informasi tentang mengonfigurasi data eksternal untuk Azure SQL Edge, lihat Streaming data di Azure SQL Edge.

J. Membuat sumber data eksternal untuk mereferensikan Kafka

Berlaku untuk:Azure SQL Edgesaja

Dalam contoh ini, sumber data eksternal adalah server Kafka dengan alamat IP xxx.xxx.xxx.xxx dan mendengarkan di port 1900. Sumber data eksternal Kafka hanya untuk streaming data dan tidak mendukung dorongan predikat.

-- Create an External Data Source for Kafka
CREATE EXTERNAL DATA SOURCE MyKafkaServer
    WITH (LOCATION = 'kafka://xxx.xxx.xxx.xxx:1900');

B. Membuat sumber data eksternal untuk mereferensikan EdgeHub

Berlaku untuk:Azure SQL Edgesaja

Dalam contoh ini, sumber data eksternal adalah EdgeHub yang berjalan pada perangkat edge yang sama dengan Azure SQL Edge. Sumber data eksternal edgeHub hanya untuk streaming data dan tidak mendukung dorongan predikat.

-- Create an External Data Source for Kafka
CREATE EXTERNAL DATA SOURCE MyEdgeHub
    WITH (LOCATION = 'edgehub://');

Langkah berikutnya

* Azure Synapse
Analytics*
 

 

Ringkasan: Azure Synapse Analytics

Berlaku untuk:Azure Synapse Analytics

Membuat sumber data eksternal untuk virtualisasi data. Sumber data eksternal digunakan untuk membangun konektivitas dan mendukung kasus penggunaan utama virtualisasi data dan pemuatan data dari sumber data eksternal. Untuk informasi selengkapnya, lihat Menggunakan tabel eksternal dengan Synapse SQL.

Penting

Untuk membuat sumber data eksternal untuk mengkueri sumber daya Azure Synapse Analytics menggunakan Azure SQL Database dengan kueri elastis, lihat SQL Database.

Sintaks

Untuk informasi selengkapnya tentang konvensi sintaks, lihat Konvensi sintaks transact-SQL.

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
  [ [ , ] CREDENTIAL = <credential_name> ]
  [ [ , ] TYPE = HADOOP ]
)
[ ; ]

Argumen

data_source_name

Menentukan nama yang ditentukan pengguna untuk sumber data. Nama harus unik dalam Azure SQL Database di Azure Synapse Analytics.

LOCATION = '<prefix>://<path>'

Menyediakan protokol dan jalur konektivitas ke sumber data eksternal.

Sumber Data Eksternal awalan lokasi Koneksi or Jalur lokasi
Data Lake Storage* Gen1 adl <storage_account>.azuredatalake.net
Data Lake Storage Gen2 abfs[s] <container>@<storage_account>.dfs.core.windows.net
Azure Blob Storage wasbs <container>@<storage_account>.blob.core.windows.net
Azure Blob Storage https <storage_account>.blob.core.windows.net/<container>/subfolders
Data Lake Storage Gen1 http[s] <storage_account>.azuredatalakestore.net/webhdfs/v1
Data Lake Storage Gen2 http[s] <storage_account>.dfs.core.windows.net/<container>/subfolders
Data Lake Storage Gen2 wasb[s] <container>@<storage_account>.blob.core.windows.net

* Microsoft Azure Data Lake Storage Gen1 memiliki dukungan terbatas, Gen2 direkomendasikan untuk semua pengembangan baru.

Sumber Data Eksternal awalan lokasi Koneksi or Kumpulan SQL khusus: PolyBase Kumpulan SQL khusus: asli* Kumpulan SQL tanpa server
Data Lake Storage** Gen1 adl Tidak No Ya
Data Lake Storage Gen2 abfs[s] Ya Ya Ya
Azure Blob Storage wasbs Ya Ya*** Ya
Azure Blob Storage https Tidak Ya Ya
Data Lake Storage Gen1 http[s] Tidak No Ya
Data Lake Storage Gen2 http[s] Ya Ya Ya
Data Lake Storage Gen2 wasb[s] Ya Ya Ya

* Kumpulan SQL tanpa server dan khusus di Azure Synapse Analytics menggunakan basis kode yang berbeda untuk virtualisasi data. Kumpulan SQL tanpa server mendukung teknologi virtualisasi data asli. Kumpulan SQL khusus mendukung virtualisasi data asli dan PolyBase. Virtualisasi data PolyBase digunakan saat SUMBER DATA EKSTERNAL dibuat dengan TYPE=HADOOP.

** Microsoft Azure Data Lake Storage Gen1 memiliki dukungan terbatas, Gen2 direkomendasikan untuk semua pengembangan baru.

Konektor yang lebih aman wasbs direkomendasikan melalui wasb. Hanya virtualisasi data asli di kumpulan SQL khusus (di mana TYPE tidak sama dengan HADOOP) dukungan wasb.

Jalur lokasi:

  • <container> = kontainer akun penyimpanan yang menyimpan data. Kontainer root bersifat baca-saja, data tidak dapat ditulis kembali ke kontainer.
  • <storage_account> = nama akun penyimpanan sumber daya Azure.

Catatan dan panduan tambahan saat mengatur lokasi:

  • Opsi defaultnya adalah menggunakan enable secure SSL connections saat memprovisikan Azure Data Lake Storage Gen2. Ketika ini diaktifkan, Anda harus menggunakan abfss ketika koneksi TLS/SSL aman dipilih. Perhatikan bahwa abfss juga berfungsi untuk koneksi TLS yang tidak aman. Untuk informasi selengkapnya, lihat driver Azure Blob Filesystem (ABFS).
  • Azure Synapse tidak memverifikasi keberadaan sumber data eksternal saat objek dibuat. Untuk memvalidasi, buat tabel eksternal menggunakan sumber data eksternal.
  • Gunakan sumber data eksternal yang sama untuk semua tabel saat mengkueri Hadoop untuk memastikan semantik kueri yang konsisten.
  • Awalan https: memungkinkan Anda menggunakan subfolder di jalur tersebut. https tidak tersedia untuk semua metode akses data.
  • wasbs disarankan karena data akan dikirim menggunakan koneksi TLS yang aman.
  • Namespace Hierarkis tidak didukung dengan Akun Penyimpanan Azure V2 saat mengakses data menggunakan antarmuka warisan wasb:// , tetapi menggunakan wasbs:// mendukung Namespace Hierarkis.

INFO MASUK = credential_name

Opsional. Menentukan kredensial lingkup database untuk mengautentikasi ke sumber data eksternal. Sumber data eksternal tanpa kredensial dapat mengakses akun penyimpanan publik atau menggunakan identitas Microsoft Entra pemanggil untuk mengakses file di penyimpanan Azure.

Catatan dan panduan tambahan saat membuat kredensial:

  • Untuk memuat data dari Azure Storage atau Azure Data Lake Store (ADLS) Gen2 ke Azure Synapse Analytics, gunakan Kunci Azure Storage.
  • CREDENTIAL hanya diperlukan jika data telah diamankan. CREDENTIAL tidak diperlukan untuk himpunan data yang memungkinkan akses anonim.

Untuk membuat kredensial lingkup database, lihat MEMBUAT KREDENSIAL CAKUPAN DATABASE (Transact-SQL).

  • Di kumpulan SQL tanpa server, kredensial cakupan database dapat menentukan identitas terkelola ruang kerja, nama perwakilan layanan, atau token tanda tangan akses bersama (SAS). Akses melalui identitas pengguna, juga dikenal sebagai Passthrough Microsoft Entra, juga dimungkinkan dalam kredensial cakupan database, seperti halnya akses anonim ke penyimpanan yang tersedia untuk umum. Untuk informasi selengkapnya, lihat Jenis otorisasi penyimpanan yang didukung.

  • Dalam kumpulan SQL khusus, kredensial cakupan database dapat menentukan token tanda tangan akses bersama (SAS), identitas aplikasi kustom, identitas terkelola ruang kerja, atau kunci akses penyimpanan.

TYPE = HADOOP

Opsional, tidak disarankan.

Anda hanya dapat menentukan TYPE dengan kumpulan SQL khusus. HADOOP adalah satu-satunya nilai yang diizinkan ketika ditentukan. Sumber data eksternal dengan TYPE=HADOOP hanya tersedia di kumpulan SQL khusus.

Gunakan HADOOP untuk implementasi warisan, jika tidak, disarankan untuk menggunakan akses data asli yang lebih baru. Jangan tentukan argumen TYPE untuk menggunakan akses data asli yang lebih baru.

Untuk contoh penggunaan TYPE = HADOOP untuk memuat data dari Azure Storage, lihat Membuat sumber data eksternal untuk mereferensikan Azure Data Lake Store Gen 1 atau 2 menggunakan perwakilan layanan.

Kumpulan SQL tanpa server dan khusus di Azure Synapse Analytics menggunakan basis kode yang berbeda untuk virtualisasi data. Kumpulan SQL tanpa server mendukung teknologi virtualisasi data asli. Kumpulan SQL khusus mendukung virtualisasi data asli dan PolyBase. Virtualisasi data PolyBase digunakan saat SUMBER DATA EKSTERNAL dibuat dengan TYPE=HADOOP.

Izin

CONTROL Memerlukan izin pada database.

Penguncian

Mengambil kunci bersama pada EXTERNAL DATA SOURCE objek.

Keamanan

Sebagian besar sumber data eksternal mendukung autentikasi berbasis proksi, menggunakan kredensial cakupan database untuk membuat akun proksi.

Kunci Tanda Tangan Akses Bersama (SAS) didukung untuk mengautentikasi ke Akun Penyimpanan Azure Data Lake Store Gen 2. Pelanggan yang ingin mengautentikasi dengan menggunakan Tanda Tangan Akses Bersama harus membuat kredensial cakupan database di mana IDENTITY = "Shared Access Signature" dan memasukkan token SAS sebagai rahasia.

Jika Anda membuat kredensial cakupan database di mana IDENTITY = "Shared Access Signature" dan menggunakan nilai kunci penyimpanan sebagai rahasia, Anda akan mendapatkan pesan kesalahan berikut:

'HdfsBridge::isDirExist - Unexpected error encountered checking whether directory exists or not: AbfsRestOperationException: Operation failed: "Server failed to authenticate the request. Please refer to the information in the www-authenticate header.", 401, HEAD, [Storage path URL]'

Contoh

J. Membuat sumber data eksternal untuk mengakses data di Azure Storage menggunakan antarmuka wasb://

Dalam contoh ini, sumber data eksternal adalah akun Azure Storage V2 bernama logs. Kontainer penyimpanan disebut daily. Sumber data eksternal Azure Storage hanya untuk transfer data. Ini tidak mendukung pendorongan predikat. Namespace hierarkis tidak didukung saat mengakses data melalui wasb:// antarmuka. Perhatikan bahwa saat menyambungkan ke Azure Storage melalui konektor WASB,autentikasi harus dilakukan dengan kunci akun penyimpanan, bukan dengan tanda tangan akses bersama (SAS).

Contoh ini menggunakan metode akses berbasis Java HADOOP warisan. Contoh berikut menunjukkan cara membuat kredensial cakupan database untuk autentikasi ke Azure Storage. Tentukan kunci akun Azure Storage dalam rahasia kredensial database. Anda dapat menentukan string apa pun dalam identitas kredensial lingkup database karena tidak digunakan selama autentikasi ke penyimpanan Azure.

-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
    WITH IDENTITY = '<my_account>',
    SECRET = '<azure_storage_account_key>';

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
    LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
    CREDENTIAL = AzureStorageCredential,
    TYPE = HADOOP
);

B. Membuat sumber data eksternal untuk mereferensikan Azure Data Lake Store Gen 1 atau 2 menggunakan perwakilan layanan

Konektivitas Azure Data Lake Store dapat didasarkan pada URI ADLS dan perwakilan layanan aplikasi Microsoft Entra Anda. Dokumentasi untuk membuat aplikasi ini dapat ditemukan di autentikasi penyimpanan Data lake menggunakan ID Microsoft Entra.

-- If you do not have a Master Key on your DW you will need to create one.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

-- These values come from your Microsoft Entra application used to authenticate to ADLS
CREATE DATABASE SCOPED CREDENTIAL ADLS_credential
WITH
    -- IDENTITY = '<clientID>@<OAuth2.0TokenEndPoint>' ,
    IDENTITY = '536540b4-4239-45fe-b9a3-629f97591c0c@https://login.microsoftonline.com/42f988bf-85f1-41af-91ab-2d2cd011da47/oauth2/token',
    -- SECRET = '<KEY>'
    SECRET = 'BjdIlmtKp4Fpyh9hIvr8HJlUida/seM5kQ3EpLAmeDI=';

-- For Gen 1 - Create an external data source
-- TYPE: HADOOP - PolyBase uses Hadoop APIs to access data in Azure Data Lake Storage.
-- LOCATION: Provide Data Lake Storage Gen 1 account name and URI
-- CREDENTIAL: Provide the credential created in the previous step
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH (
    LOCATION = 'adl://newyorktaxidataset.azuredatalakestore.net',
    CREDENTIAL = ADLS_credential,
    TYPE = HADOOP
);

-- For Gen2 - Create an external data source
-- TYPE: HADOOP - PolyBase uses Hadoop APIs to access data in Azure Data Lake Storage.
-- LOCATION: Provide Data Lake Storage Gen2 account name and URI
-- CREDENTIAL: Provide the credential created in the previous step
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH (
    -- Note the abfss endpoint when your account has secure transfer enabled
    LOCATION = 'abfss://data@newyorktaxidataset.dfs.core.windows.net',
    CREDENTIAL = ADLS_credential,
    TYPE = HADOOP
);

C. Membuat sumber data eksternal untuk mereferensikan Azure Data Lake Store Gen2 menggunakan kunci akun penyimpanan

-- If you do not have a Master Key on your DW you will need to create one.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

CREATE DATABASE SCOPED CREDENTIAL ADLS_credential
WITH
    -- IDENTITY = '<storage_account_name>' ,
    IDENTITY = 'newyorktaxidata',
    -- SECRET = '<storage_account_key>'
    SECRET = 'yz5N4+bxSb89McdiysJAzo+9hgEHcJRJuXbF/uC3mhbezES/oe00vXnZEl14U0lN3vxrFKsphKov16C0w6aiTQ==';

-- Note this example uses a Gen2 secured endpoint (abfss)
CREATE EXTERNAL DATA SOURCE < data_source_name >
WITH (
    LOCATION = 'abfss://2013@newyorktaxidataset.dfs.core.windows.net',
    CREDENTIAL = ADLS_credential,
    TYPE = HADOOP
);

D. Membuat sumber data eksternal ke Azure Data Lake Store Gen2 menggunakan abfs://

Tidak perlu menentukan SECRET saat menyambungkan ke akun Azure Data Lake Store Gen2 dengan mekanisme Identitas Terkelola.

-- If you do not have a Master Key on your DW you will need to create one
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

--Create database scoped credential with **IDENTITY = 'Managed Service Identity'**
CREATE DATABASE SCOPED CREDENTIAL msi_cred
WITH IDENTITY = 'Managed Service Identity';

--Create external data source with abfss:// scheme for connecting to your Azure Data Lake Store Gen2 account
CREATE EXTERNAL DATA SOURCE ext_datasource_with_abfss
WITH (
    TYPE = HADOOP,
    LOCATION = 'abfss://myfile@mystorageaccount.dfs.core.windows.net',
    CREDENTIAL = msi_cred
);

Langkah berikutnya

*Analytics
Sistem Platform (PDW) *
 

 

Gambaran Umum: Sistem Platform Analitik

Berlaku untuk:Analytics Platform System (PDW)

Membuat sumber data eksternal untuk kueri PolyBase. Sumber data eksternal digunakan untuk membangun konektivitas dan mendukung kasus penggunaan berikut: Virtualisasi data dan beban data menggunakan PolyBase.

Sintaks

Untuk informasi selengkapnya tentang konvensi sintaks, lihat Konvensi sintaks transact-SQL.

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] TYPE = HADOOP ]
    [ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]

Argumen

data_source_name

Menentukan nama yang ditentukan pengguna untuk sumber data. Nama harus unik dalam server di Analytics Platform System (PDW).

LOCATION = '<prefix>://<path[:port]>'

Menyediakan protokol dan jalur konektivitas ke sumber data eksternal.

Sumber Data Eksternal awalan lokasi Koneksi or Jalur lokasi
Cloudera CDH atau Hortonworks HDP hdfs <Namenode>[:port]
Akun Azure Storage wasb[s] <container>@<storage_account>.blob.core.windows.net

Jalur lokasi:

  • <Namenode> = nama mesin, URI layanan nama, atau alamat Namenode IP di kluster Hadoop. PolyBase harus menyelesaikan nama DNS apa pun yang digunakan oleh kluster Hadoop.
  • port = Port yang didengarkan sumber data eksternal. Di Hadoop, port dapat ditemukan menggunakan fs.defaultFS parameter konfigurasi. Defaultnya adalah 8020.
  • <container> = kontainer akun penyimpanan yang menyimpan data. Kontainer root bersifat baca-saja, data tidak dapat ditulis kembali ke kontainer.
  • <storage_account> = nama akun penyimpanan sumber daya Azure.

Catatan dan panduan tambahan saat mengatur lokasi:

  • Mesin PDW tidak memverifikasi keberadaan sumber data eksternal saat objek dibuat. Untuk memvalidasi, buat tabel eksternal menggunakan sumber data eksternal.
  • Gunakan sumber data eksternal yang sama untuk semua tabel saat mengkueri Hadoop untuk memastikan semantik kueri yang konsisten.
  • wasbs disarankan karena data akan dikirim menggunakan koneksi TLS yang aman.
  • Namespace Hierarkis tidak didukung saat digunakan dengan akun Azure Storage melalui wasb://.
  • Untuk memastikan kueri PolyBase yang berhasil selama fail-over Hadoop Namenode , pertimbangkan untuk menggunakan alamat IP virtual untuk Namenode kluster Hadoop. Jika tidak, jalankan perintah UBAH SUMBER DATA EKSTERNAL untuk menunjuk ke lokasi baru.

INFO MASUK = credential_name

Menentukan kredensial cakupan database untuk mengautentikasi ke sumber data eksternal.

Catatan dan panduan tambahan saat membuat kredensial:

  • Untuk memuat data dari Azure Storage ke Azure Synapse atau PDW, gunakan Kunci Azure Storage.
  • CREDENTIAL hanya diperlukan jika data telah diamankan. CREDENTIAL tidak diperlukan untuk himpunan data yang memungkinkan akses anonim.

TYPE = [ HADOOP ]

Menentukan jenis sumber data eksternal yang sedang dikonfigurasi. Parameter ini tidak selalu diperlukan.

  • Gunakan HADOOP saat sumber data eksternal adalah Cloudera CDH, Hortonworks HDP, atau Azure Storage.

Untuk contoh penggunaan TYPE = HADOOP untuk memuat data dari Azure Storage, lihat Membuat sumber data eksternal untuk mereferensikan Hadoop.

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]'

Di SQL Server 2019 (15.x), jangan tentukan RESOURCE_MANAGER_LOCATION kecuali menyambungkan ke Cloudera CDH, Hortonworks HDP, akun Azure Storage.

Konfigurasikan nilai opsional ini saat menyambungkan ke Cloudera CDH, Hortonworks HDP, atau akun Azure Storage saja. Untuk daftar lengkap versi Hadoop yang didukung, lihat Konfigurasi Koneksi ivitas PolyBase (Transact-SQL).

RESOURCE_MANAGER_LOCATION Ketika ditentukan, pengoptimal kueri membuat keputusan berbasis biaya untuk meningkatkan performa. Pekerjaan MapReduce dapat digunakan untuk menurunkan komputasi ke Hadoop. Menentukan RESOURCE_MANAGER_LOCATION dapat secara signifikan mengurangi volume data yang ditransfer antara Hadoop dan SQL, yang dapat menyebabkan peningkatan performa kueri.

Jika Resource Manager tidak ditentukan, mendorong komputasi ke Hadoop dinonaktifkan untuk kueri PolyBase. Buat sumber data eksternal untuk mereferensikan Hadoop dengan push-down diaktifkan memberikan contoh konkret dan panduan lebih lanjut.

Nilai RESOURCE_MANAGER_LOCATION tidak divalidasi saat Anda membuat sumber data eksternal. Memasukkan nilai yang salah dapat menyebabkan kegagalan kueri pada waktu eksekusi setiap kali push-down dicoba karena nilai yang disediakan tidak akan dapat diselesaikan.

Agar PolyBase berfungsi dengan benar dengan sumber data eksternal Hadoop, port untuk komponen kluster Hadoop berikut harus terbuka:

  • Port HDFS
    • Namenode
    • Datanode
  • Resource Manager
    • Pengajuan Pekerjaan
    • Job history

Jika port tidak ditentukan, nilai default dipilih menggunakan pengaturan saat ini untuk konfigurasi 'konektivitas hadoop'.

Hadoop Koneksi ivity Default Resource Manager Port
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050

Tabel berikut ini memperlihatkan port default untuk komponen-komponen ini. Perhatikan bahwa ada dependensi versi Hadoop serta kemungkinan konfigurasi kustom yang tidak menggunakan penetapan port default.

Komponen kluster Hadoop Default Port
NameNode 8020
DataNode (Transfer data, port IPC non-hak istimewa) 50010
DataNode (Transfer data, port IPC hak istimewa) 1019
Pengiriman Pekerjaan Resource Manager (Hortonworks 1.3) 50300
Pengiriman Pekerjaan Resource Manager (Cloudera 4.3) 8021
Pengiriman Pekerjaan Resource Manager (Hortonworks 2.0 di Windows, Cloudera 5.x di Linux) 8032
Pengiriman Pekerjaan Resource Manager (Hortonworks 2.x, 3.0 di Linux, Hortonworks 2.1-3 di Windows) 8050
Riwayat Pekerjaan Resource Manager 10020

Izin

CONTROL Memerlukan izin pada database di Analytics Platform System (PDW).

Catatan

Dalam rilis PDW sebelumnya, buat sumber data eksternal yang diperlukan ALTER ANY EXTERNAL DATA SOURCE izin.

Penguncian

Mengambil kunci bersama pada EXTERNAL DATA SOURCE objek.

Keamanan

PolyBase mendukung autentikasi berbasis proksi untuk sebagian besar sumber data eksternal. Buat kredensial lingkup database untuk membuat akun proksi.

Token SAS dengan jenis HADOOP tidak didukung. Ini hanya didukung dengan jenis = BLOB_STORAGE ketika kunci akses akun penyimpanan digunakan sebagai gantinya. Mencoba membuat sumber data eksternal dengan jenis HADOOP dan kredensial SAS gagal dengan kesalahan berikut:

Msg 105019, Level 16, State 1 - EXTERNAL TABLE access failed due to internal error: 'Java exception raised on call to HdfsBridge_Connect. Java exception message: Parameters provided to connect to the Azure storage account are not valid.: Error [Parameters provided to connect to the Azure storage account are not valid.] occurred while accessing external file.'

Contoh

J. Membuat sumber data eksternal untuk mereferensikan Hadoop

Untuk membuat sumber data eksternal untuk mereferensikan Hortonworks HDP atau Cloudera CDH Anda, tentukan nama mesin, atau alamat IP Hadoop Namenode dan port.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
    LOCATION = 'hdfs://10.10.10.10:8050',
    TYPE = HADOOP
);

B. Membuat sumber data eksternal untuk mereferensikan Hadoop dengan push-down diaktifkan

RESOURCE_MANAGER_LOCATION Tentukan opsi untuk mengaktifkan komputasi push-down ke Hadoop untuk kueri PolyBase. Setelah diaktifkan, PolyBase membuat keputusan berbasis biaya untuk menentukan apakah komputasi kueri harus didorong ke Hadoop.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
    LOCATION = 'hdfs://10.10.10.10:8020',
    TYPE = HADOOP,
    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);

C. Membuat sumber data eksternal untuk mereferensikan Hadoop yang diamankan Kerberos

Untuk memverifikasi apakah kluster Hadoop diamankan Kerberos, periksa nilai hadoop.security.authentication properti di Hadoop core-site.xml. Untuk mereferensikan kluster Hadoop yang diamankan Kerberos, Anda harus menentukan kredensial cakupan database yang berisi nama pengguna dan kata sandi Kerberos Anda. Kunci master database digunakan untuk mengenkripsi rahasia kredensial lingkup database.

-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
    WITH IDENTITY = '<hadoop_user_name>',
    SECRET = '<hadoop_password>';

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
    LOCATION = 'hdfs://10.10.10.10:8050',
    CREDENTIAL = HadoopUser1,
    TYPE = HADOOP,
    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);

D. Membuat sumber data eksternal untuk mengakses data di Azure Storage menggunakan antarmuka wasb://

Dalam contoh ini, sumber data eksternal adalah akun Azure V2 Storage bernama logs. Kontainer penyimpanan disebut daily. Sumber data eksternal Azure Storage hanya untuk transfer data. Ini tidak mendukung pendorongan predikat. Namespace hierarkis tidak didukung saat mengakses data melalui wasb:// antarmuka. Perhatikan bahwa saat menyambungkan ke Azure Storage melalui konektor WASB,autentikasi harus dilakukan dengan kunci akun penyimpanan, bukan dengan tanda tangan akses bersama (SAS).

Contoh ini memperlihatkan cara membuat kredensial lingkup database untuk autentikasi ke penyimpanan Azure. Tentukan kunci akun penyimpanan Azure dalam rahasia kredensial database. Anda dapat menentukan string apa pun dalam identitas kredensial lingkup database karena tidak digunakan selama autentikasi ke penyimpanan Azure.

-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
    WITH IDENTITY = '<my_account>',
        SECRET = '<azure_storage_account_key>';

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
    LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
    CREDENTIAL = AzureStorageCredential,
    TYPE = HADOOP
);

Langkah berikutnya

* SQL Managed Instance *  

Gambaran Umum: Azure SQL Managed Instance

Berlaku untuk:Azure SQL Managed Instance

Membuat sumber data eksternal di Azure SQL Managed Instance. Untuk informasi lengkap, lihat Virtualisasi data dengan Azure SQL Managed Instance.

Virtualisasi data di Azure SQL Managed Instance menyediakan akses ke data eksternal dalam berbagai format file melalui sintaks T-SQL OPENROWSET atau sintaksIS CREATE EXTERNAL TABLE T-SQL.

Sintaks

Untuk informasi selengkapnya tentang konvensi sintaks, lihat Konvensi sintaks transact-SQL.

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CREDENTIAL = <credential_name> ]
  )
[ ; ]

Argumen

data_source_name

Menentukan nama yang ditentukan pengguna untuk sumber data. Nama dalam database harus unik.

LOCATION = '<prefix>://<path[:port]>'

Menyediakan protokol dan jalur konektivitas ke sumber data eksternal.

Sumber Data Eksternal Awalan lokasi Jalur lokasi
Azure Blob Storage abs abs://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name>
Azure Data Lake Service Gen2 adls adls://<container>@<storage_account>.dfs.core.windows.net/<path>/<file_name>

Mesin Database tidak memverifikasi keberadaan sumber data eksternal saat objek dibuat. Untuk memvalidasi, buat tabel eksternal menggunakan sumber data eksternal.

Jangan tambahkan /parameter tanda tangan akses berikutnya, nama file, atau tanda tangan akses bersama di akhir LOCATION URL saat mengonfigurasi sumber data eksternal untuk operasi massal.

INFO MASUK = credential_name

Menentukan kredensial cakupan database untuk mengautentikasi ke sumber data eksternal.

Catatan dan panduan tambahan saat membuat kredensial:

  • Untuk memuat data dari Azure Storage ke Azure SQL Managed Instance, gunakan Tanda Tangan Akses Bersama (token SAS).
  • CREDENTIAL hanya diperlukan jika data telah diamankan. CREDENTIAL tidak diperlukan untuk himpunan data yang memungkinkan akses anonim.
  • Jika kredensial diperlukan, kredensial harus dibuat menggunakan Managed Identity atau SHARED ACCESS SIGNATURE sebagai IDENTITAS. Untuk membuat kredensial lingkup database, lihat MEMBUAT KREDENSIAL CAKUPAN DATABASE (Transact-SQL).

Untuk menggunakan identitas layanan terkelola untuk kredensial lingkup database:

  • Menentukan WITH IDENTITY = 'Managed Identity'

    • Gunakan identitas layanan terkelola yang ditetapkan sistem dari Azure SQL Managed Instance, yang harus diaktifkan jika akan digunakan untuk tujuan ini.
  • Berikan peran RBAC Azure Pembaca ke identitas layanan terkelola yang ditetapkan sistem dari Azure SQL Managed Instance ke kontainer Azure Blob Storage yang diperlukan. Misalnya, melalui portal Azure, lihat Menetapkan peran Azure menggunakan portal Azure.

Untuk membuat tanda tangan akses bersama (SAS) untuk kredensial cakupan database:

  • Menentukan WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = ...

  • Ada beberapa cara untuk membuat tanda tangan akses bersama:

  • Token SAS harus dikonfigurasi sebagai berikut:

    • Ketika token SAS dihasilkan, token SAS menyertakan tanda tanya ('?') di awal token. Kecualikan yang terdepan ? saat dikonfigurasi sebagai SECRET.
    • Gunakan periode kedaluwarsa yang valid (semua tanggal dalam waktu UTC).
    • Berikan setidaknya izin baca pada file yang harus dimuat (misalnya srt=o&sp=r). Beberapa tanda tangan akses bersama dapat dibuat untuk kasus penggunaan yang berbeda. Izin harus diberikan sebagai berikut:
    Perbuatan Izin
    Membaca data dari file Baca
    Membaca data dari beberapa file dan subfolder Baca dan Daftar
    Gunakan Buat Tabel Eksternal sebagai Pilih (CETAS) Baca, Buat, dan Tulis

Izin

CONTROL Memerlukan izin pada database di Azure SQL Managed Instance.

Penguncian

Mengambil kunci bersama pada EXTERNAL DATA SOURCE objek.

Contoh

Untuk contoh selengkapnya, lihat Virtualisasi data dengan Azure SQL Managed Instance.

J. Mengkueri data eksternal dari Azure SQL Managed Instance dengan OPENROWSET atau tabel eksternal

Untuk contoh selengkapnya, lihat Membuat sumber data eksternal atau lihat Virtualisasi data dengan Azure SQL Managed Instance.

  1. Buat kunci master database, jika tidak ada.

    -- Optional: Create MASTER KEY if it doesn't exist in the database:
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong Password>'
    GO
    
  2. Buat kredensial cakupan database menggunakan token SAS. Anda juga dapat menggunakan identitas terkelola.

    CREATE DATABASE SCOPED CREDENTIAL MyCredential
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    SECRET = '<KEY>' ; --Removing leading '?'
    GO
    
  3. Buat sumber data eksternal menggunakan kredensial.

    --Create external data source pointing to the file path, and referencing database-scoped credential:
    CREATE EXTERNAL DATA SOURCE MyPrivateExternalDataSource
    WITH (
        LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest',
        CREDENTIAL = [MyCredential]
    );
    
  4. Kueri file data parquet di sumber data eksternal menggunakan sintaks T-SQL OPENROWSET, mengandalkan inferensi skema untuk menjelajahi data dengan cepat tanpa mengetahui skema.

    --Query data with OPENROWSET, relying on schema inference.
    SELECT TOP 10 *
    FROM OPENROWSET (
        BULK 'bing_covid-19_data.parquet',
        DATA_SOURCE = 'MyExternalDataSource',
        FORMAT = 'parquet'
    ) AS filerows;
    
  5. Atau, kueri data menggunakan OPENROWSET klausul WITH, alih-alih mengandalkan inferensi skema, yang dapat mengkueri biaya eksekusi. Pada CSV, inferensi skema tidak didukung.

    --Or, query data using the WITH clause on a CSV, where schema inference is not supported
    SELECT TOP 10 id,
        updated,
        confirmed,
        confirmed_change
    FROM OPENROWSET (
        BULK 'bing_covid-19_data.csv', DATA_SOURCE = 'MyExternalDataSource',
        FORMAT = 'CSV',
        FIRSTROW = 2
    ) WITH (
        id INT,
        updated DATE,
        confirmed INT,
        confirmed_change INT
    ) AS filerows;
    
  6. Atau, buat FORMAT FILE EKSTERNAL dan TABEL EKSTERNAL, untuk mengkueri data sebagai tabel lokal.

    -- Or, create an EXTERNAL FILE FORMAT and an EXTERNAL TABLE
    --Create external file format
    CREATE EXTERNAL FILE FORMAT DemoFileFormat
        WITH (FORMAT_TYPE = PARQUET)
    GO
    
    --Create external table:
    CREATE EXTERNAL TABLE tbl_TaxiRides (
        vendorID VARCHAR(100) COLLATE Latin1_General_BIN2,
        tpepPickupDateTime DATETIME2,
        tpepDropoffDateTime DATETIME2,
        passengerCount INT,
        tripDistance FLOAT,
        puLocationId VARCHAR(8000),
        doLocationId VARCHAR(8000),
        startLon FLOAT,
        startLat FLOAT,
        endLon FLOAT,
        endLat FLOAT,
        rateCodeId SMALLINT,
        storeAndFwdFlag VARCHAR(8000),
        paymentType VARCHAR(8000),
        fareAmount FLOAT,
        extra FLOAT,
        mtaTax FLOAT,
        improvementSurcharge VARCHAR(8000),
        tipAmount FLOAT,
        tollsAmount FLOAT,
        totalAmount FLOAT
    )
    WITH (
        LOCATION = 'yellow/puYear=*/puMonth=*/*.parquet',
        DATA_SOURCE = NYCTaxiExternalDataSource,
        FILE_FORMAT = MyFileFormat\.\./\.\./\.\./azure-sql/
    );
    GO
    
    --Then, query the data via an external table with T-SQL:
    SELECT TOP 10 *
    FROM tbl_TaxiRides;
    GO
    

Langkah berikutnya