Aracılığıyla paylaş


CREATE EXTERNAL DATA SOURCE (Transact-SQL)

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve üzeri Azure SQL VeritabanıAzure Synapse AnalyticsAnalytics Platform Sistemi (PDW)

PolyBase ve veri sanallaştırma özellikleri için kullanılan dış verileri sorgulamak için bir dış veri kaynağı oluşturur.

Bu makalede, seçtiğiniz SQL ürünü için söz dizimi, bağımsız değişkenler, açıklamalar, izinler ve örnekler sağlanır.

Ürün seçin

Aşağıdaki satırda, ilgilendiğiniz ürün adını seçin ve yalnızca bu ürünün bilgileri görüntülenir.

* SQL Server *  

 

Genel Bakış: SQL Server 2016

Şunlar için geçerlidir: SQL Server 2016 (13.x)

PolyBase sorguları için bir dış veri kaynağı oluşturur. Dış veri kaynakları, bağlantı kurmak ve şu birincil kullanım örneklerini desteklemek için kullanılır:

  • PolyBase kullanarak veri sanallaştırma ve veri yükü
  • veya kullanarak BULK INSERT toplu yükleme işlemleri OPENROWSET

Uyarı

Bu söz dizimi SQL Server'ın farklı sürümlerinde farklılık gösterir. Uygun sürümü seçmek için sürüm seçici açılan listesini kullanın.
SQL Server 2019 (15.x) özelliklerini görüntülemek için CREATE EXTERNAL DATA SOURCE adresini ziyaret edin. SQL Server 2022 (16.x) özelliklerini görüntülemek için CREATE EXTERNAL DATA SOURCE adresini ziyaret edin.

Transact-SQL söz dizimi kuralları

SQL Server 2016 söz dizimi

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

Tartışmalar

data_source_name

Veri kaynağı için kullanıcı tanımlı adı belirtir. Ad, SQL Server'daki veritabanında benzersiz olmalıdır.

LOCATION = '<prefix>://<path[:p ort]>'

Bağlantı protokolunu ve dış veri kaynağının yolunu sağlar.

Dış Veri Kaynağı Bağlayıcı konumu ön eki Konum yolu Ürüne/hizmete göre desteklenen konumlar Kimlik doğrulama
Cloudera CDH veya Hortonworks HDP hdfs <Namenode>[:port] SQL Server 2016 (13.x) -SQL Server 2019 (15.x) Anonim veya temel kimlik doğrulaması
Azure Depolama hesabı (V2) wasb[s] <container>@<storage_account>.blob.core.windows.net SQL Server 2016'dan (13.x) başlayarak
Hiyerarşik Ad Alanı desteklenmiyor
Azure Depolama hesabı anahtarı

Konum yolu:

  • <Namenode> = Hadoop kümesindeki öğesinin makine adı, ad hizmeti URI'si Namenode veya IP adresi. PolyBase, Hadoop kümesi tarafından kullanılan DNS adlarını çözümlemelidir.
  • port = Dış veri kaynağının dinlediği bağlantı noktası. Hadoop'ta bağlantı noktası yapılandırma parametresi kullanılarak fs.defaultFS bulunabilir. Varsayılan değer 8020'dir.
  • <container> = verileri tutan depolama hesabının kapsayıcısı. Kök kapsayıcılar salt okunur durumdadır, veriler kapsayıcıya geri yazılamaz.
  • <storage_account> = Azure kaynağının depolama hesabı adı.
  • <server_name> = konak adı.
  • <instance_name> = SQL Server adlı örneğin adı. Hedef örnekte çalışan SQL Server Tarayıcı Hizmetiniz varsa kullanılır.

Konumu ayarlarken ek notlar ve yönergeler:

  • SQL Server Veritabanı Altyapısı, nesne oluşturulduğunda dış veri kaynağının varlığını doğrulamaz. Doğrulamak için dış veri kaynağını kullanarak bir dış tablo oluşturun.
  • Tutarlı sorgu semantiği sağlamak için Hadoop sorgularken tüm tablolar için aynı dış veri kaynağını kullanın.
  • wasbs isteğe bağlıdır, ancak veriler güvenli bir TLS/SSL bağlantısı kullanılarak gönderileceği için Azure Depolama Hesaplarına erişmek için SQL Server 2016'da (13.x) önerilir.
  • Hadoop yük devretmesi sırasında PolyBase sorgularının başarılı olmasını sağlamak için Hadoop Namenode kümesinin Namenode sanal IP adresini kullanmayı göz önünde bulundurun. Aksi takdirde ALTER EXTERNAL DATA SOURCE komutunu yürüterek yeni konumu işaret edin.

CREDENTIAL = credential_name

Dış veri kaynağında kimlik doğrulaması için veritabanı kapsamlı bir kimlik bilgisi belirtir.

CREDENTIAL yalnızca verilerin güvenliği sağlanmışsa gereklidir. CREDENTIAL anonim erişime izin veren veri kümeleri için gerekli değildir.

Veritabanı kapsamlı kimlik bilgileri oluşturmak için bkz. CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

TYPE = * [ HADOOP ] *

Yapılandırılan dış veri kaynağının türünü belirtir. SQL Server 2016'da bu parametre her zaman gereklidir ve yalnızca olarak HADOOPbelirtilmelidir. Cloudera CDH, Hortonworks HDP veya Azure Depolama hesabı bağlantılarını destekler. Bu parametrenin davranışı SQL Server'ın sonraki sürümlerinde farklıdır.

Azure Depolama hesabından veri yüklemek için kullanma TYPE = HADOOP örneği için bkz. wasb:// arabirimini kullanarak Azure Depolama'daki verilere erişmek için dış veri kaynağı oluşturma

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]'

Yalnızca Cloudera CDH, Hortonworks HDP veya bir Azure Depolama hesabına bağlanırken bu isteğe bağlı değeri yapılandırın. Desteklenen Hadoop sürümlerinin tam listesi için bkz. PolyBase bağlantı yapılandırması.

RESOURCE_MANAGER_LOCATION tanımlandığında, sorgu iyileştirici performansı geliştirmek için maliyet tabanlı bir karar verir. MapReduce işi, hesaplamayı Hadoop'a göndermek için kullanılabilir. değerinin RESOURCE_MANAGER_LOCATION belirtilmesi Hadoop ile SQL Server arasında aktarılan veri hacmini önemli ölçüde azaltabilir ve bu da sorgu performansının artmasına neden olabilir.

Resource Manager belirtilmezse, PolyBase sorguları için Hadoop'a işlem gönderme devre dışı bırakılır. Aşağı itme özelliğinin etkinleştirildiği Hadoop'a başvurmak için dış veri kaynağı oluşturma , somut bir örnek ve daha fazla rehberlik sağlar.

Dış veri kaynağını oluşturduğunuzda RESOURCE_MANAGER_LOCATION değeri doğrulanmaz. Yanlış bir değer girilmesi, sağlanan değer çözümlenemediğinden, aşağı gönderme denendiği her durumda yürütme sırasında sorgu hatasına neden olabilir.

PolyBase'in hadoop dış veri kaynağıyla düzgün çalışması için aşağıdaki Hadoop kümesi bileşenlerinin bağlantı noktalarının açık olması gerekir:

  • HDFS bağlantı noktaları
    • Ad Düğümü
    • Veri düğümü
  • Resource Manager
    • İş gönderimi
  • İş geçmişi

Bağlantı noktası belirtilmezse, 'hadoop bağlantısı' yapılandırması için geçerli ayar kullanılarak varsayılan değer seçilir.

Hadoop Bağlantısı Varsayılan Resource Manager Bağlantı Noktası
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050
8 8032

Aşağıdaki tabloda bu bileşenler için varsayılan bağlantı noktaları gösterilmektedir. Hadoop sürüm bağımlılığının yanı sıra varsayılan bağlantı noktası atamasını kullanmayan özel yapılandırma olasılığı da vardır.

Hadoop küme bileşeni Varsayılan Bağlantı Noktası
NameNode 8020
DataNode (Veri aktarımı, ayrıcalıksız IPC bağlantı noktası) 50010
DataNode (Veri aktarımı, ayrıcalık IPC bağlantı noktası) 1019
Resource Manager İş Gönderimi (Hortonworks 1.3) 50300
Resource Manager İş Gönderimi (Cloudera 4.3) 8021
Resource Manager İş Gönderimi (Windows'ta Hortonworks 2.0, Linux'ta Cloudera 5.x) 8032
Resource Manager İş Gönderimi (Linux üzerinde Hortonworks 2.x, 3.0, Windows üzerinde Hortonworks 2.1-3) 8050
Resource Manager İş Geçmişi 10020

İzinler

CONTROL SQL Server'daki veritabanında izin gerektirir.

Kilitleme

Nesne üzerinde EXTERNAL DATA SOURCE paylaşılan bir kilit alır.

Güvenlik

PolyBase, dış veri kaynaklarının çoğu için ara sunucu tabanlı kimlik doğrulamasını destekler. Proxy hesabını oluşturmak için veritabanı kapsamlı bir kimlik bilgisi oluşturun.

Örnekler

Önemli

PolyBase'i yükleme ve etkinleştirme hakkında bilgi için bkz. Windows'a PolyBase yükleme

A. Hadoop'a başvurmak için dış veri kaynağı oluşturma

Hortonworks HDP veya Cloudera CDH Hadoop kümenize başvurmak üzere bir dış veri kaynağı oluşturmak için, Hadoop Namenode ve bağlantı noktasının makine adını veya IP adresini belirtin.

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

B. Aşağı gönderme etkin hadoop'a başvurmak için dış veri kaynağı oluşturma

RESOURCE_MANAGER_LOCATION PolyBase sorguları için Hadoop'a aşağı itme hesaplamasını etkinleştirme seçeneğini belirtin. Etkinleştirildikten sonra PolyBase, sorgu hesaplamasının Hadoop'a gönderilip gönderilmeyeceğini belirlemek için maliyet tabanlı bir karar verir.

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

C. Kerberos güvenli Hadoop'a başvurmak için dış veri kaynağı oluşturma

Hadoop kümesinin Kerberos ile güvenli olup olmadığını doğrulamak için Hadoop core-site.xmliçindeki özelliğinin hadoop.security.authentication değerini denetleyin. Kerberos güvenli Hadoop kümesine başvurmak için, Kerberos kullanıcı adınızı ve parolanızı içeren veritabanı kapsamlı bir kimlik bilgisi belirtmeniz gerekir. Veritabanı ana anahtarı, veritabanı kapsamlı kimlik bilgisi gizli dizisini şifrelemek için kullanılır.

-- 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. wasb:// arabirimini kullanarak Azure Depolama'daki verilere erişmek için dış veri kaynağı oluşturma

Bu örnekte dış veri kaynağı adlı logsbir Azure V2 Depolama hesabıdır. Depolama kapsayıcısı olarak adlandırılır daily. Azure Depolama dış veri kaynağı yalnızca veri aktarımı içindir. Koşul aşağı göndermeyi desteklemez. Arabirim aracılığıyla wasb:// verilere erişirken hiyerarşik ad alanları desteklenmez.

Bu örnekte, Azure V2 Depolama hesabında kimlik doğrulaması için veritabanı kapsamlı kimlik bilgilerinin nasıl oluşturulacağı gösterilmektedir. Veritabanı kimlik bilgisi gizli dizisinde Azure Depolama hesabı anahtarını belirtin. Azure Depolama'da kimlik doğrulaması sırasında kullanılmadığından, veritabanı kapsamlı kimlik bilgileri kimliğindeki herhangi bir dizeyi belirtebilirsiniz. veya wasbaracılığıyla wasbs Azure Depolama'ya bağlanırken kimlik doğrulaması, paylaşılan erişim imzası (SAS) ile değil depolama hesabı anahtarıyla yapılmalıdır.

SQL Server 2016'da (13.x), TYPE Azure Depolama'ya HADOOP erişirken bile olarak ayarlanmalıdır.

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

Genel Bakış: SQL Server 2017

Şunlar için geçerlidir: SQL Server 2017 (14.x)

PolyBase sorguları için bir dış veri kaynağı oluşturur. Dış veri kaynakları, bağlantı kurmak ve şu birincil kullanım örneklerini desteklemek için kullanılır:

  • SQL Server'da PolyBase kullanarak veri sanallaştırma ve veri yükü
  • veya kullanarak BULK INSERT toplu yükleme işlemleri OPENROWSET

Uyarı

Bu söz dizimi, Linux üzerinde SQL Server'ın farklı sürümlerinde farklılık gösterir. Uygun sürümü seçmek için sürüm seçici açılan listesini kullanın.
SQL Server 2019 (15.x) özelliklerini görüntülemek için CREATE EXTERNAL DATA SOURCE adresini ziyaret edin. SQL Server 2022 (16.x) özelliklerini görüntülemek için CREATE EXTERNAL DATA SOURCE adresini ziyaret edin.

Uyarı

Bu söz dizimi SQL Server'ın farklı sürümlerinde farklılık gösterir. Uygun sürümü seçmek için sürüm seçici açılan listesini kullanın.
SQL Server 2019 (15.x) özelliklerini görüntülemek için CREATE EXTERNAL DATA SOURCE adresini ziyaret edin. SQL Server 2022 (16.x) özelliklerini görüntülemek için CREATE EXTERNAL DATA SOURCE adresini ziyaret edin.

Transact-SQL söz dizimi kuralları

SQL Server 2017 söz dizimi

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>]' )
[ ; ]

Tartışmalar

data_source_name

Veri kaynağı için kullanıcı tanımlı adı belirtir. Ad, SQL Server'daki veritabanında benzersiz olmalıdır.

LOCATION = '<prefix>://<path[:p ort]>'

Bağlantı protokolunu ve dış veri kaynağının yolunu sağlar.

Dış Veri Kaynağı Bağlayıcı konumu ön eki Konum yolu Ürüne/hizmete göre desteklenen konumlar Kimlik doğrulama
Cloudera CDH veya Hortonworks HDP hdfs <Namenode>[:port] Yalnızca SQL Server 2016 (13.x) ile SQL Server 2019 (15.x) Anonim veya temel kimlik doğrulaması
Azure Depolama hesabı (V2) wasb[s] <container>@<storage_account>.blob.core.windows.net SQL Server 2016'dan (13.x) başlayarak
Hiyerarşik Ad Alanı desteklenmiyor
Azure Depolama hesabı anahtarı
Toplu İşlemler https <storage_account>.blob.core.windows.net/<container> SQL Server 2017 'den (14.x) başlayarak Paylaşılan erişim imzası (SAS)

Konum yolu:

  • <Namenode> = Hadoop kümesindeki öğesinin makine adı, ad hizmeti URI'si Namenode veya IP adresi. PolyBase, Hadoop kümesi tarafından kullanılan DNS adlarını çözümlemelidir.
  • port = Dış veri kaynağının dinlediği bağlantı noktası. Hadoop'ta bağlantı noktası yapılandırma parametresi kullanılarak fs.defaultFS bulunabilir. Varsayılan değer 8020'dir.
  • <container> = verileri tutan depolama hesabının kapsayıcısı. Kök kapsayıcılar salt okunur durumdadır, veriler kapsayıcıya geri yazılamaz.
  • <storage_account> = Azure kaynağının depolama hesabı adı.
  • <server_name> = konak adı.
  • <instance_name> = SQL Server adlı örneğin adı. Hedef örnekte çalışan SQL Server Tarayıcı Hizmetiniz varsa kullanılır.

Konumu ayarlarken ek notlar ve yönergeler:

  • SQL Server Veritabanı Altyapısı, nesne oluşturulduğunda dış veri kaynağının varlığını doğrulamaz. Doğrulamak için dış veri kaynağını kullanarak bir dış tablo oluşturun.
  • Tutarlı sorgu semantiği sağlamak için Hadoop sorgularken tüm tablolar için aynı dış veri kaynağını kullanın.
  • aracılığıyla Driver={<Name of Driver>}bağlanırken değerini ODBC belirtin.
  • wasbs isteğe bağlıdır, ancak veriler güvenli bir TLS/SSL bağlantısı kullanılarak gönderileceği için Azure Depolama Hesaplarına erişmek için SQL Server 2017'de (14.x) önerilir.
  • Hadoop yük devretmesi sırasında PolyBase sorgularının başarılı olmasını sağlamak için Hadoop Namenode kümesinin Namenode sanal IP adresini kullanmayı göz önünde bulundurun. Aksi takdirde ALTER EXTERNAL DATA SOURCE komutunu yürüterek yeni konumu işaret edin.

CREDENTIAL = credential_name

Dış veri kaynağında kimlik doğrulaması için veritabanı kapsamlı bir kimlik bilgisi belirtir.

Kimlik bilgisi oluştururken ek notlar ve yönergeler:

  • CREDENTIAL yalnızca verilerin güvenliği sağlanmışsa gereklidir. CREDENTIAL anonim erişime izin veren veri kümeleri için gerekli değildir.
  • TYPE = BLOB_STORAGEolduğunda kimlik bilgisi kimlik olarak kullanılarak SHARED ACCESS SIGNATURE oluşturulmalıdır.
  • TYPE = BLOB_STORAGE yalnızca toplu işlemler için izin verilir; ile TYPE = BLOB_STORAGEbir dış veri kaynağı için dış tablolar oluşturamazsınız.
  • veya wasbaracılığıyla wasbs Azure Depolama'ya bağlanırken kimlik doğrulaması, paylaşılan erişim imzası (SAS) ile değil depolama hesabı anahtarıyla yapılmalıdır.
  • TYPE = HADOOPKimlik bilgilerinin depolama hesabı anahtarı olarak SECRETkullanılarak oluşturulması gerektiğinde.

Paylaşılan erişim imzası oluşturmanın birden çok yolu vardır:

  • Azure portalı -><Your_Storage_Account> - Paylaşılan erişim imzası -> İzinleri yapılandırma ->> SAS ve bağlantı dizesi oluşturma bölümüne giderek SAS belirteci oluşturabilirsiniz. Daha fazla bilgi için bkz . Paylaşılan erişim imzası oluşturma.

  • Azure Depolama Gezgini ile SAS oluşturabilir ve yapılandırabilirsiniz.

  • Sas belirtecini PowerShell, Azure CLI, .NET ve REST API aracılığıyla program aracılığıyla oluşturabilirsiniz. Daha fazla bilgi için bkz . Paylaşılan erişim imzalarını (SAS) kullanarak Azure Depolama kaynaklarına sınırlı erişim verme.

  • SAS belirteci aşağıdaki gibi yapılandırılmalıdır:

    • SAS belirteci oluşturulduğunda belirtecin başında bir soru işareti ('?') bulunur. GİzLİ olarak yapılandırıldığında baştakileri ? hariç tutun.
    • Geçerli bir süre sonu dönemi kullanın (tüm tarihler UTC saatindedir).
  • Yüklenmesi gereken dosya üzerinde en azından okuma izni verin (örneğin srt=o&sp=r). Farklı kullanım örnekleri için birden çok paylaşılan erişim imzası oluşturulabilir. İzinler aşağıdaki gibi verilmelidir:

    Eylem İzin
    Dosyadan veri okuma Okumak
    Birden çok dosyadan ve alt klasörden veri okuma Okuma ve Listeleme

ve CREDENTIALSHARED ACCESS SIGNATURETYPEile = kullanma BLOB_STORAGE örneği için bkz. Toplu işlemleri yürütmek ve Azure Depolama'dan SQL Veritabanı'na veri almak için dış veri kaynağı oluşturma

Veritabanı kapsamlı kimlik bilgileri oluşturmak için bkz. CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

TYPE = * [ HADOOP | BLOB_STORAGE ] *

Yapılandırılan dış veri kaynağının türünü belirtir. Bu parametre her zaman gerekli değildir ve yalnızca Cloudera CDH, Hortonworks HDP, azure depolama hesabı veya Azure Data Lake Storage 2. Nesil'e bağlanırken belirtilmelidir.

  • Dış veri kaynağı Cloudera CDH, Hortonworks HDP, Azure Depolama hesabı veya Azure Data Lake Storage 2. Nesil olduğunda kullanın HADOOP .
  • BLOB_STORAGE veya OPENROWSET kullanarak Azure Depolama hesabından toplu işlemleri yürütürken kullanın. SQL Server 2017 (14.x) ile kullanıma sunulmuştur. Azure Depolama'ya karşı kullanmayı HADOOP planlarken kullanınCREATE EXTERNAL TABLE.

Uyarı

TYPE Azure Depolama'ya HADOOP erişirken bile olarak ayarlanmalıdır.

Azure Depolama hesabından veri yüklemek için kullanma TYPE = HADOOP örneği için bkz. wasb:// arabirimini kullanarak Azure Depolama'daki verilere erişmek için dış veri kaynağı oluşturma

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]'

Yalnızca Cloudera CDH, Hortonworks HDP veya bir Azure Depolama hesabına bağlanırken bu isteğe bağlı değeri yapılandırın. Desteklenen Hadoop sürümlerinin tam listesi için bkz. PolyBase bağlantı yapılandırması (Transact-SQL).

RESOURCE_MANAGER_LOCATION tanımlandığında, sorgu iyileştirici performansı geliştirmek için maliyet tabanlı bir karar alır. MapReduce işi, hesaplamayı Hadoop'a göndermek için kullanılabilir. değerinin RESOURCE_MANAGER_LOCATION belirtilmesi Hadoop ile SQL Server arasında aktarılan veri hacmini önemli ölçüde azaltabilir ve bu da sorgu performansının artmasına neden olabilir.

Resource Manager belirtilmezse, PolyBase sorguları için Hadoop'a işlem gönderme devre dışı bırakılır. Aşağı itme özelliğinin etkinleştirildiği Hadoop'a başvurmak için dış veri kaynağı oluşturma , somut bir örnek ve daha fazla rehberlik sağlar.

Dış RESOURCE_MANAGER_LOCATION veri kaynağını oluşturduğunuzda değer doğrulanmaz. Yanlış bir değer girilmesi, sağlanan değer çözümlenemediğinden, aşağı gönderme denendiği her durumda yürütme sırasında sorgu hatasına neden olabilir.

PolyBase'in hadoop dış veri kaynağıyla düzgün çalışması için aşağıdaki Hadoop kümesi bileşenlerinin bağlantı noktalarının açık olması gerekir:

  • HDFS bağlantı noktaları
    • Ad Düğümü
    • Veri düğümü
  • Resource Manager
    • İş gönderimi
  • İş geçmişi

Bağlantı noktası belirtilmezse, 'hadoop bağlantısı' yapılandırması için geçerli ayar kullanılarak varsayılan değer seçilir.

Hadoop Bağlantısı Varsayılan Resource Manager Bağlantı Noktası
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050
8 8032

Aşağıdaki tabloda bu bileşenler için varsayılan bağlantı noktaları gösterilmektedir. Hadoop sürüm bağımlılığının yanı sıra varsayılan bağlantı noktası atamasını kullanmayan özel yapılandırma olasılığı da vardır.

Hadoop küme bileşeni Varsayılan Bağlantı Noktası
NameNode 8020
DataNode (Veri aktarımı, ayrıcalıksız IPC bağlantı noktası) 50010
DataNode (Veri aktarımı, ayrıcalık IPC bağlantı noktası) 1019
Resource Manager İş Gönderimi (Hortonworks 1.3) 50300
Resource Manager İş Gönderimi (Cloudera 4.3) 8021
Resource Manager İş Gönderimi (Windows'ta Hortonworks 2.0, Linux'ta Cloudera 5.x) 8032
Resource Manager İş Gönderimi (Linux üzerinde Hortonworks 2.x, 3.0, Windows üzerinde Hortonworks 2.1-3) 8050
Resource Manager İş Geçmişi 10020

İzinler

CONTROL SQL Server'daki veritabanında izin gerektirir.

Kilitleme

Nesne üzerinde EXTERNAL DATA SOURCE paylaşılan bir kilit alır.

Güvenlik

PolyBase, dış veri kaynaklarının çoğu için ara sunucu tabanlı kimlik doğrulamasını destekler. Proxy hesabını oluşturmak için veritabanı kapsamlı bir kimlik bilgisi oluşturun.

Türü HADOOP olan bir SAS belirteci desteklenmiyor. Bunun yerine yalnızca depolama hesabı erişim anahtarı kullanıldığında tür = BLOB_STORAGE ile desteklenir. Tür HADOOP ve SAS kimlik bilgilerine sahip bir dış veri kaynağı oluşturma girişimi aşağıdaki hatayla başarısız oluyor:

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.'

Örnekler

Önemli

PolyBase'i yükleme ve etkinleştirme hakkında bilgi için bkz. Windows'a PolyBase yükleme

A. Hadoop'a başvurmak için dış veri kaynağı oluşturma

Hortonworks HDP veya Cloudera CDH Hadoop kümenize başvurmak üzere bir dış veri kaynağı oluşturmak için, Hadoop Namenode ve bağlantı noktasının makine adını veya IP adresini belirtin.

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

B. Aşağı gönderme etkin hadoop'a başvurmak için dış veri kaynağı oluşturma

RESOURCE_MANAGER_LOCATION PolyBase sorguları için Hadoop'a aşağı itme hesaplamasını etkinleştirme seçeneğini belirtin. Etkinleştirildikten sonra PolyBase, sorgu hesaplamasının Hadoop'a gönderilip gönderilmeyeceğini belirlemek için maliyet tabanlı bir karar verir.

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

C. Kerberos güvenli Hadoop'a başvurmak için dış veri kaynağı oluşturma

Hadoop kümesinin Kerberos ile güvenli olup olmadığını doğrulamak için Hadoop core-site.xmliçindeki özelliğinin hadoop.security.authentication değerini denetleyin. Kerberos güvenli Hadoop kümesine başvurmak için, Kerberos kullanıcı adınızı ve parolanızı içeren veritabanı kapsamlı bir kimlik bilgisi belirtmeniz gerekir. Veritabanı ana anahtarı, veritabanı kapsamlı kimlik bilgisi gizli dizisini şifrelemek için kullanılır.

-- 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. wasb:// arabirimini kullanarak Azure Depolama'daki verilere erişmek için dış veri kaynağı oluşturma

Bu örnekte dış veri kaynağı adlı logsbir Azure V2 Depolama hesabıdır. Depolama kapsayıcısı olarak adlandırılır daily. Azure Depolama dış veri kaynağı yalnızca veri aktarımı içindir. Koşul aşağı göndermeyi desteklemez. Arabirim aracılığıyla wasb:// verilere erişirken hiyerarşik ad alanları desteklenmez. veya wasbaracılığıyla wasbs Azure Depolama'ya bağlanırken kimlik doğrulaması, paylaşılan erişim imzası (SAS) ile değil depolama hesabı anahtarıyla yapılmalıdır.

Bu örnekte, Azure V2 Depolama hesabında kimlik doğrulaması için veritabanı kapsamlı kimlik bilgilerinin nasıl oluşturulacağı gösterilmektedir. Veritabanı kimlik bilgisi gizli dizisinde Azure Depolama hesabı anahtarını belirtin. Azure Depolama'da kimlik doğrulaması sırasında kullanılmadığından, veritabanı kapsamlı kimlik bilgileri kimliğindeki herhangi bir dizeyi belirtebilirsiniz.

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

Örnekler: Toplu işlemler

Önemli

Bir dış veri kaynağını toplu işlemler için yapılandırırken URL'nin / sonuna sondaki LOCATION, dosya adı veya paylaşılan erişim imzası parametrelerini eklemeyin.

E. Azure Depolama'dan veri alma toplu işlemleri için dış veri kaynağı oluşturma

Şunlar için geçerlidir: SQL Server 2017 (14.x) ve sonraki sürümleri.

BULK INSERT veya OPENROWSET kullanarak toplu işlemler için aşağıdaki veri kaynağını kullanın. Kimlik bilgisi kimlik olarak ayarlanmalıdır SHARED ACCESS SIGNATURE , SAS belirtecinde başta ? yer almamalıdır, yüklenmesi gereken dosyada (örneğin srt=o&sp=r) en az okuma iznine sahip olmalıdır ve süre sonu süresi geçerli olmalıdır (tüm tarihler UTC saatindedir). Paylaşılan erişim imzaları hakkında daha fazla bilgi için bkz. Paylaşılan Erişim İmzalarını (SAS) Kullanma.

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

Bu örneği kullanımda görmek için bkz . BULK INSERT.

Genel Bakış: SQL Server 2019

için geçerlidir: SQL Server 2019 (15.x)

PolyBase sorguları için bir dış veri kaynağı oluşturur. Dış veri kaynakları, bağlantı kurmak ve şu birincil kullanım örneklerini desteklemek için kullanılır:

  • SQL Server'da PolyBase kullanarak veri sanallaştırma ve veri yükü
  • veya kullanarak BULK INSERT toplu yükleme işlemleri OPENROWSET

Uyarı

Bu söz dizimi SQL Server'ın farklı sürümlerinde farklılık gösterir. Uygun sürümü seçmek için sürüm seçici açılan listesini kullanın.
SQL Server 2022 (16.x) özelliklerini görüntülemek için CREATE EXTERNAL DATA SOURCE adresini ziyaret edin.

Uyarı

Bu söz dizimi SQL Server'ın farklı sürümlerinde farklılık gösterir. Uygun sürümü seçmek için sürüm seçici açılan listesini kullanın.
SQL Server 2022 (16.x) özelliklerini görüntülemek için CREATE EXTERNAL DATA SOURCE adresini ziyaret edin.

Transact-SQL söz dizimi kuralları

SQL Server 2019 söz dizimi

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>]' ] 
  ) 
[ ; ]

Tartışmalar

data_source_name

Veri kaynağı için kullanıcı tanımlı adı belirtir. Ad, SQL Server'daki veritabanında benzersiz olmalıdır.

LOCATION = '<prefix>://<path[:p ort]>'

Bağlantı protokolunu ve dış veri kaynağının yolunu sağlar.

Dış Veri Kaynağı Bağlayıcı konumu ön eki Konum yolu Ürüne/hizmete göre desteklenen konumlar Kimlik doğrulama
Cloudera CDH veya Hortonworks HDP hdfs <Namenode>[:port] SQL Server 2016 (13.x) -SQL Server 2019 (15.x) Anonim veya temel kimlik doğrulaması
Azure Depolama hesabı (V2) wasb[s] <container>@<storage_account>.blob.core.windows.net SQL Server 2016'dan (13.x) başlayarak
Hiyerarşik Ad Alanı desteklenmiyor
Azure Depolama hesabı anahtarı
SQL Server sqlserver <server_name>[\<instance_name>][:port] SQL Server 2019 (15.x) ile başlayarak Yalnızca SQL kimlik doğrulaması
Oracle oracle <server_name>[:port] SQL Server 2019 (15.x) ile başlayarak Yalnızca temel kimlik doğrulaması
Teradata teradata <server_name>[:port] SQL Server 2019 (15.x) ile başlayarak Yalnızca temel kimlik doğrulaması
MongoDB için MongoDB veya Cosmos DB API'si mongodb <server_name>[:port] SQL Server 2019 (15.x) ile başlayarak Yalnızca temel kimlik doğrulaması
Genel ODBC odbc <server_name>[:port] SQL Server 2019 (15.x) ile başlayarak - Yalnızca Windows Yalnızca temel kimlik doğrulaması
Toplu İşlemler https <storage_account>.blob.core.windows.net/<container> SQL Server 2017 'den (14.x) başlayarak Paylaşılan erişim imzası (SAS)
Azure Data Lake Storage (İkinci Nesil) abfs[s] abfss://<container>@<storage _account>.dfs.core.windows.net SQL Server 2019 (15.x) CU11+ ile başlayarak. Depolama Erişim Anahtarı
SQL Server Büyük Veri Kümeleri veri havuzu sqldatapool sqldatapool://controller-svc/default Yalnızca SQL Server 2019 Büyük Veri Kümelerinde desteklenir Yalnızca temel kimlik doğrulaması
SQL Server Büyük Veri Kümeleri depolama havuzu sqlhdfs sqlhdfs://controller-svc/default Yalnızca SQL Server 2019 Büyük Veri Kümelerinde desteklenir Yalnızca temel kimlik doğrulaması

Konum yolu:

  • <Namenode> = Hadoop kümesindeki öğesinin makine adı, ad hizmeti URI'si Namenode veya IP adresi. PolyBase, Hadoop kümesi tarafından kullanılan DNS adlarını çözümlemelidir.
  • port = Dış veri kaynağının dinlediği bağlantı noktası. Hadoop'ta bağlantı noktası yapılandırma parametresi kullanılarak fs.defaultFS bulunabilir. Varsayılan değer 8020'dir.
  • <container> = verileri tutan depolama hesabının kapsayıcısı. Kök kapsayıcılar salt okunur durumdadır, veriler kapsayıcıya geri yazılamaz.
  • <storage_account> = Azure kaynağının depolama hesabı adı.
  • <server_name> = konak adı.
  • <instance_name> = SQL Server adlı örneğin adı. Hedef örnekte çalışan SQL Server Tarayıcı Hizmetiniz varsa kullanılır.

Konumu ayarlarken ek notlar ve yönergeler:

  • SQL Server Veritabanı Altyapısı, nesne oluşturulduğunda dış veri kaynağının varlığını doğrulamaz. Doğrulamak için dış veri kaynağını kullanarak bir dış tablo oluşturun.
  • Tutarlı sorgu semantiği sağlamak için Hadoop sorgularken tüm tablolar için aynı dış veri kaynağını kullanın.
  • Bağlayıcıyı sqlserver kullanarak SQL Server 2019'u (15.x) başka bir SQL Server'a veya Azure SQL Veritabanı'na bağlayabilirsiniz.
  • aracılığıyla Driver={<Name of Driver>}bağlanırken değerini ODBC belirtin.
  • veya wasbs kullanmak abfss isteğe bağlıdır, ancak veriler güvenli bir TLS/SSL bağlantısı kullanılarak gönderileceği için Azure Depolama Hesaplarına erişmek için SQL Server 2019'da (15.x) önerilir.
  • VEYA abfs API'leriabfss, SQL Server 2019 (15.x) CU11'den başlayarak Azure Depolama Hesaplarına erişirken desteklenir. Daha fazla bilgi için bkz. Azure Blob Dosya Sistemi sürücüsü (ABFS).
  • Kullanan abfs[s] Azure Depolama Hesapları (V2) için Hiyerarşik Ad Alanı seçeneği, SQL Server 2019 (15.x) CU11+ ile başlayarak Azure Data Lake Storage 2. Nesil aracılığıyla desteklenir. Hiyerarşik Ad Alanı seçeneği aksi takdirde desteklenmez ve bu seçenek devre dışı bırakılmalıdır.
  • Hadoop yük devretmesi sırasında PolyBase sorgularının başarılı olmasını sağlamak için Hadoop Namenode kümesinin Namenode sanal IP adresini kullanmayı göz önünde bulundurun. Aksi takdirde ALTER EXTERNAL DATA SOURCE komutunu yürüterek yeni konumu işaret edin.
  • sqlhdfs ve sqldatapool türleri, büyük bir veri kümesinin ana örneğiyle depolama havuzu arasında bağlantı kurmak için desteklenir. Cloudera CDH veya Hortonworks HDP için kullanın hdfs. SQL Server Büyük Veri Kümeleri depolama havuzlarını sorgulamak için kullanma sqlhdfs hakkında daha fazla bilgi için bkz. SQL Server 2019 Büyük Veri Kümesinde HDFS Sorgulama.
  • HDFS Cloudera (CDP) ve Hortonworks (HDP) dış veri kaynakları için SQL Server desteği kullanımdan kaldırılmıştır ve SQL Server 2022 (16.x) ve sonraki sürümlerde yer almamıştır. Daha fazla bilgi için bkz. Microsoft SQL Server platformunda Büyük veri seçenekleri.

CONNECTION_OPTIONS = key_value_pair

SQL Server 2019 (15.x) ve sonraki sürümler için belirtildi. Dış veri kaynağına bağlanırken ODBC ek seçenekleri belirtir. Birden çok bağlantı seçeneği kullanmak için bunları noktalı virgülle ayırın.

Genel ODBC bağlantıların yanı sıra SQL Server, Oracle, Teradata, MongoDB ve MongoDB için Azure Cosmos DB API'sine ODBC yönelik yerleşik bağlayıcılar için geçerlidir.

key_value_pair, belirli bir bağlantı seçeneğinin anahtar sözcüğü ve değeridir. Kullanılabilir anahtar sözcükler ve değerler dış veri kaynağı türüne bağlıdır. Sürücünün adı en düşük değer olarak gereklidir, ancak veya gibi APP='<your_application_name>'ApplicationIntent= ReadOnly|ReadWrite ayarlamak için de yararlı olan ve sorun gidermeye yardımcı olabilecek başka seçenekler de vardır.

Olası anahtar değer çiftleri, dış veri kaynağı satıcısı için sağlayıcıya özgüdür. Her sağlayıcı hakkında daha fazla bilgi için bkz. CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.

SQL Server 2019 (15.x) Toplu Güncelleştirme 19'dan başlayarak, Oracle TNS dosyalarını desteklemek için ek anahtar sözcükler kullanıma sunulmuştur:

  • anahtar sözcüğü TNSNamesFile , Oracle sunucusunda bulunan dosyanın dosya yolu tnsnames.ora belirtir.
  • anahtar sözcüğü ServerName , içinde konak tnsnames.ora adını ve bağlantı noktasını değiştirmek için kullanılacak diğer adı belirtir.

Pushdown = ON | KAPALI

Yalnızca SQL Server 2019 (15.x) için belirtilir. Hesaplamanın dış veri kaynağına gönderilip gönderilemeyeceğini belirtir. Varsayılan olarak ON'dır .

PUSHDOWN SQL Server, Oracle, Teradata, MongoDB, MongoDB için Azure Cosmos DB API'sine veya dış veri kaynağı düzeyinde ODBC'ye bağlanırken desteklenir.

Sorgu düzeyinde aşağı göndermeyi etkinleştirme veya devre dışı bırakma işlemi , EXTERNALPUSHDOWN ipucu aracılığıyla sağlanır.

CREDENTIAL = credential_name

Dış veri kaynağında kimlik doğrulaması için veritabanı kapsamlı bir kimlik bilgisi belirtir.

Kimlik bilgisi oluştururken ek notlar ve yönergeler:

  • CREDENTIAL yalnızca verilerin güvenliği sağlanmışsa gereklidir. CREDENTIAL anonim erişime izin veren veri kümeleri için gerekli değildir.
  • TYPE = BLOB_STORAGEolduğunda kimlik bilgisi kimlik olarak kullanılarak SHARED ACCESS SIGNATURE oluşturulmalıdır.
  • TYPE = BLOB_STORAGE yalnızca toplu işlemler için izin verilir; ile TYPE = BLOB_STORAGEbir dış veri kaynağı için dış tablolar oluşturamazsınız.

Paylaşılan erişim imzası oluşturmanın birden çok yolu vardır:

  • Azure portalı -><Your_Storage_Account> - Paylaşılan erişim imzası -> İzinleri yapılandırma ->> SAS ve bağlantı dizesi oluşturma bölümüne giderek SAS belirteci oluşturabilirsiniz. Daha fazla bilgi için bkz . Paylaşılan erişim imzası oluşturma.

  • Azure Depolama Gezgini ile SAS oluşturabilir ve yapılandırabilirsiniz.

  • Sas belirtecini PowerShell, Azure CLI, .NET ve REST API aracılığıyla program aracılığıyla oluşturabilirsiniz. Daha fazla bilgi için bkz . Paylaşılan erişim imzalarını (SAS) kullanarak Azure Depolama kaynaklarına sınırlı erişim verme.

  • SAS belirteci aşağıdaki gibi yapılandırılmalıdır:

    • SAS belirteci oluşturulduğunda belirtecin başında bir soru işareti ('?') bulunur. GİzLİ olarak yapılandırıldığında baştakileri ? hariç tutun.
    • Geçerli bir süre sonu dönemi kullanın (tüm tarihler UTC saatindedir).
  • Yüklenmesi gereken dosya üzerinde en azından okuma izni verin (örneğin srt=o&sp=r). Farklı kullanım örnekleri için birden çok paylaşılan erişim imzası oluşturulabilir. İzinler aşağıdaki gibi verilmelidir:

    Eylem İzin
    Dosyadan veri okuma Okumak
    Birden çok dosyadan ve alt klasörden veri okuma Okuma ve Listeleme

ve CREDENTIALSHARED ACCESS SIGNATURETYPEile = kullanma BLOB_STORAGE örneği için bkz. Toplu işlemleri yürütmek ve Azure Depolama'dan SQL Veritabanı'na veri almak için dış veri kaynağı oluşturma

Veritabanı kapsamlı kimlik bilgileri oluşturmak için bkz. CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

TYPE = * [ HADOOP | BLOB_STORAGE ] *

Yapılandırılan dış veri kaynağının türünü belirtir. Bu parametre her zaman gerekli değildir ve yalnızca Cloudera CDH, Hortonworks HDP, azure depolama hesabı veya Azure Data Lake Storage 2. Nesil'e bağlanırken belirtilmelidir.

  • SQL Server 2019'da (15.x), Bir Azure Depolama hesabı olan Cloudera CDH, Hortonworks HDP'ye bağlanmadığınız sürece TYPE belirtmeyin.
  • Dış veri kaynağı Cloudera CDH, Hortonworks HDP, Azure Depolama hesabı veya Azure Data Lake Storage 2. Nesil olduğunda kullanın HADOOP .
  • BLOB_STORAGE veya SQL Server 2017 (14.x) ile OPENROWSET kullanarak Azure Depolama hesabından toplu işlemleri yürütürken kullanın. Azure Depolama'da EXTERNAL TABLE oluşturmak istediğinizde kullanın HADOOP .
  • HDFS Cloudera (CDP) ve Hortonworks (HDP) dış veri kaynakları için SQL Server desteği kullanımdan kaldırılmıştır ve SQL Server 2022 (16.x) ve sonraki sürümlerde yer almamıştır. Daha fazla bilgi için bkz. Microsoft SQL Server platformunda Büyük veri seçenekleri.

Azure Depolama hesabından veri yüklemek için kullanma TYPE = HADOOP örneği için bkz. wasb:// arabirimini kullanarak Azure Depolama'daki verilere erişmek için dış veri kaynağı oluşturma.

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]'

SQL Server 2019'da (15.x), Bir Azure Depolama hesabı olan Cloudera CDH, Hortonworks HDP'ye bağlanmadığınız sürece RESOURCE_MANAGER_LOCATION belirtmeyin.

Yalnızca Cloudera CDH, Hortonworks HDP veya bir Azure Depolama hesabına bağlanırken bu isteğe bağlı değeri yapılandırın. Desteklenen Hadoop sürümlerinin tam listesi için bkz. PolyBase bağlantı yapılandırması.

RESOURCE_MANAGER_LOCATION tanımlandığında, sorgu iyileştirici performansı geliştirmek için maliyet tabanlı bir karar verir. MapReduce işi, hesaplamayı Hadoop'a göndermek için kullanılabilir. değerinin RESOURCE_MANAGER_LOCATION belirtilmesi Hadoop ile SQL Server arasında aktarılan veri hacmini önemli ölçüde azaltabilir ve bu da sorgu performansının artmasına neden olabilir.

Resource Manager belirtilmezse, PolyBase sorguları için Hadoop'a işlem gönderme devre dışı bırakılır. Aşağı itme özelliğinin etkinleştirildiği Hadoop'a başvurmak için dış veri kaynağı oluşturma , somut bir örnek ve daha fazla rehberlik sağlar.

Dış veri kaynağını oluşturduğunuzda RESOURCE_MANAGER_LOCATION değeri doğrulanmaz. Yanlış bir değer girilmesi, sağlanan değer çözümlenemediğinden, aşağı gönderme denendiği her durumda yürütme sırasında sorgu hatasına neden olabilir.

PolyBase'in hadoop dış veri kaynağıyla düzgün çalışması için aşağıdaki Hadoop kümesi bileşenlerinin bağlantı noktalarının açık olması gerekir:

  • HDFS bağlantı noktaları
    • Ad Düğümü
    • Veri düğümü
  • Resource Manager
    • İş gönderimi
  • İş geçmişi

Bağlantı noktası belirtilmezse, 'hadoop bağlantısı' yapılandırması için geçerli ayar kullanılarak varsayılan değer seçilir.

Hadoop Bağlantısı Varsayılan Resource Manager Bağlantı Noktası
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050
8 8032

Aşağıdaki tabloda bu bileşenler için varsayılan bağlantı noktaları gösterilmektedir. Hadoop sürüm bağımlılığının yanı sıra varsayılan bağlantı noktası atamasını kullanmayan özel yapılandırma olasılığı da vardır.

Hadoop küme bileşeni Varsayılan Bağlantı Noktası
NameNode 8020
DataNode (Veri aktarımı, ayrıcalıksız IPC bağlantı noktası) 50010
DataNode (Veri aktarımı, ayrıcalık IPC bağlantı noktası) 1019
Resource Manager İş Gönderimi (Hortonworks 1.3) 50300
Resource Manager İş Gönderimi (Cloudera 4.3) 8021
Resource Manager İş Gönderimi (Windows'ta Hortonworks 2.0, Linux'ta Cloudera 5.x) 8032
Resource Manager İş Gönderimi (Linux üzerinde Hortonworks 2.x, 3.0, Windows üzerinde Hortonworks 2.1-3) 8050
Resource Manager İş Geçmişi 10020

İzinler

CONTROL SQL Server'daki veritabanında izin gerektirir.

Kilitleme

Nesne üzerinde EXTERNAL DATA SOURCE paylaşılan bir kilit alır.

Güvenlik

PolyBase, dış veri kaynaklarının çoğu için ara sunucu tabanlı kimlik doğrulamasını destekler. Proxy hesabını oluşturmak için veritabanı kapsamlı bir kimlik bilgisi oluşturun.

SQL Server 2019 Büyük Veri Kümesi'ndeki depolama veya veri havuzuna bağlandığınızda, kullanıcının kimlik bilgileri arka uç sistemine geçirilir. Geçiş kimlik doğrulamasını etkinleştirmek için veri havuzunun kendisinde oturum açma bilgileri oluşturun.

Türü HADOOP olan bir SAS belirteci desteklenmiyor. Bunun yerine yalnızca depolama hesabı erişim anahtarı kullanıldığında tür = BLOB_STORAGE ile desteklenir. Tür HADOOP ve SAS kimlik bilgilerine sahip bir dış veri kaynağı oluşturma girişimi aşağıdaki hatayla başarısız oluyor:

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.'

Örnekler

Önemli

PolyBase'i yükleme ve etkinleştirme hakkında bilgi için bkz. Windows'a PolyBase yükleme

A. Oracle'a başvurmak için SQL Server 2019'da dış veri kaynağı oluşturma

Oracle'a başvuran bir dış veri kaynağı oluşturmak için veritabanı kapsamlı bir kimlik bilgileriniz olduğundan emin olun. Ayrıca, isteğe bağlı olarak bu veri kaynağında hesaplamanın aşağı itilmesi özelliğini etkinleştirebilir veya devre dışı bırakabilirsiniz.

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

İsteğe bağlı olarak, Oracle'a yönelik dış veri kaynağı, ayrıntılı erişim denetimi sağlamak için ara sunucu kimlik doğrulamasını kullanabilir. Ara sunucu kullanıcısı, kimliğine bürünülen kullanıcıyla karşılaştırıldığında sınırlı erişime sahip olacak şekilde yapılandırılabilir.

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

Alternatif olarak, TNS kimlik doğrulamayı kullanabilirsiniz.

SQL Server 2019 (15.x) Toplu Güncelleştirme 19'dan başlayarak, CREATE EXTERNAL DATA SOURCE artık Oracle'a bağlanırken TNS dosyalarının kullanımını destekliyor.

CONNECTION_OPTIONS parametresi genişletildi ve şimdi dosyaya TNSNamesFile göz atmak ServerName ve sunucuyla bağlantı kurmak için ve değişken olarak ve kullanıyortnsnames.ora.

Aşağıdaki örnekte, çalışma zamanı sırasında SQL Server tnsnames.ora tarafından TNSNamesFile belirtilen dosya konumunu ve tarafından ServerNamebelirtilen konak ve ağ bağlantı noktasını arar.

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

MongoDB gibi diğer veri kaynaklarına yönelik ek örnekler için bkz. PolyBase'i MongoDB'deki dış verilere erişmek için yapılandırma.

B. Hadoop'a başvurmak için dış veri kaynağı oluşturma

Hortonworks HDP veya Cloudera CDH Hadoop kümenize başvurmak üzere bir dış veri kaynağı oluşturmak için, Hadoop Namenode ve bağlantı noktasının makine adını veya IP adresini belirtin.

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

C. Aşağı gönderme etkin hadoop'a başvurmak için dış veri kaynağı oluşturma

RESOURCE_MANAGER_LOCATION PolyBase sorguları için Hadoop'a aşağı itme hesaplamasını etkinleştirme seçeneğini belirtin. Etkinleştirildikten sonra PolyBase, sorgu hesaplamasının Hadoop'a gönderilip gönderilmeyeceğini belirlemek için maliyet tabanlı bir karar verir.

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

D. Kerberos güvenli Hadoop'a başvurmak için dış veri kaynağı oluşturma

Hadoop kümesinin Kerberos ile güvenli olup olmadığını doğrulamak için Hadoop core-site.xmliçindeki özelliğinin hadoop.security.authentication değerini denetleyin. Kerberos güvenli Hadoop kümesine başvurmak için, Kerberos kullanıcı adınızı ve parolanızı içeren veritabanı kapsamlı bir kimlik bilgisi belirtmeniz gerekir. Veritabanı ana anahtarı, veritabanı kapsamlı kimlik bilgisi gizli dizisini şifrelemek için kullanılır.

-- 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. wasb:// arabirimini kullanarak Azure Depolama'daki verilere erişmek için dış veri kaynağı oluşturma

Bu örnekte dış veri kaynağı adlı logsbir Azure V2 Depolama hesabıdır. Depolama kapsayıcısı olarak adlandırılır daily. Azure Depolama dış veri kaynağı yalnızca veri aktarımı içindir. Koşul aşağı göndermeyi desteklemez. Arabirim aracılığıyla wasb:// verilere erişirken hiyerarşik ad alanları desteklenmez. veya wasbaracılığıyla wasbs Azure Depolama'ya bağlanırken kimlik doğrulaması, paylaşılan erişim imzası (SAS) ile değil depolama hesabı anahtarıyla yapılmalıdır.

Bu örnekte, Azure V2 Depolama hesabında kimlik doğrulaması için veritabanı kapsamlı kimlik bilgilerinin nasıl oluşturulacağı gösterilmektedir. Veritabanı kimlik bilgisi gizli dizisinde Azure Depolama hesabı anahtarını belirtin. Azure Depolama'da kimlik doğrulaması sırasında kullanılmadığından, veritabanı kapsamlı kimlik bilgileri kimliğindeki herhangi bir dizeyi belirtebilirsiniz.

-- 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. PolyBase bağlantısı aracılığıyla örnek adlı bir SQL Server'a başvurmak için dış veri kaynağı oluşturma

Şunlar için geçerlidir: SQL Server 2019 (15.x) ve üzeri

SQL Server'ın adlandırılmış bir örneğine başvuran bir dış veri kaynağı oluşturmak için örnek adını belirtmek için kullanın CONNECTION_OPTIONS .

Aşağıdaki örnekte konak WINSQL2019 adı ve SQL2019 örnek adıdır. 'Server=%s\SQL2019' anahtar değer çiftidir.

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

Alternatif olarak, sql server varsayılan örneğine bağlanmak için bir bağlantı noktası kullanabilirsiniz.

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

G. Always On kullanılabilirlik grubunun okunabilir ikincil çoğaltmasına başvurmak için dış veri kaynağı oluşturma

Şunlar için geçerlidir: SQL Server 2019 (15.x) ve üzeri

SQL Server'ın okunabilir ikincil çoğaltmasına başvuran bir dış veri kaynağı oluşturmak için öğesini CONNECTION_OPTIONS kullanarak belirtin ApplicationIntent=ReadOnly. Buna ek olarak, kullanılabilirlik veritabanını içinde Database={dbname}olarak CONNECTION_OPTIONS ayarlamanız veya kullanılabilirlik veritabanını, veritabanı kapsamlı kimlik bilgileri için kullanılan oturum açma bilgilerinin varsayılan veritabanı olarak ayarlamanız gerekir. Bunu kullanılabilirlik grubunun tüm kullanılabilirlik çoğaltmalarında yapmanız gerekir.

İlk olarak, SQL kimliği doğrulanmış oturum açma bilgileri için kimlik bilgilerini depolayarak veritabanı kapsamlı kimlik bilgilerini oluşturun. PolyBase için SQL ODBC Bağlayıcısı yalnızca temel kimlik doğrulamasını destekler. Veritabanı kapsamlı bir kimlik bilgisi oluşturmadan önce, veritabanının kimlik bilgilerini korumak için bir ana anahtarı olmalıdır. Daha fazla bilgi için bkz. CREATE MASTER KEY . Aşağıdaki örnek, veritabanı kapsamlı bir kimlik bilgisi oluşturur, kendi oturum açma bilgilerinizi ve parolanızı sağlar.

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

Ardından yeni dış veri kaynağını oluşturun.

veritabanı kapsamlı kimlik bilgilerindeki Database=dbname oturum açma bilgileri için kullanılabilirlik veritabanını varsayılan veritabanı olarak dahil CONNECTION_OPTIONS etmeniz veya ayarlamanız fark etmeksizin, LOCATION parametresinde CREATE EXTERNAL TABLE deyiminde veritabanı adını üç parçalı bir adla sağlamanız gerekir. Örnek için bkz . EXTERNAL TABLE OLUŞTURMA.

Aşağıdaki örnekte kullanılabilirlik WINSQL2019AGL grubu dinleyici adı ve dbname CREATE EXTERNAL TABLE deyiminin hedefi olacak veritabanının adıdır.

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

Sistem görünümünde ApplicationIntentbir dış tablo belirtip sys.servers oluşturarak kullanılabilirlik grubunun yeniden yönlendirme davranışını gösterebilirsiniz. Aşağıdaki örnek betikte iki dış veri kaynağı oluşturulur ve her biri için bir dış tablo oluşturulur. Hangi sunucunun bağlantıya yanıt verdiğini test etmek için görünümleri kullanın. Benzer sonuçlar salt okunur yönlendirme özelliği aracılığıyla da elde edilebilir. Daha fazla bilgi için bkz. Always On kullanılabilirlik grubu için salt okunur yönlendirmeyi yapılandırma.

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

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

Kullanılabilirlik grubundaki veritabanının içinde, döndürülecek sys.servers bir görünüm ve sorguya hangi çoğaltmanın yanıt verdiğini belirlemenize yardımcı olan yerel örneğin adını oluşturun. Daha fazla bilgi için bkz. sys.servers.

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

Ardından kaynak örnekte bir dış tablo oluşturun:

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

Örnekler: Toplu işlemler

Önemli

Bir dış veri kaynağını toplu işlemler için yapılandırırken URL'nin / sonuna sondaki LOCATION, dosya adı veya paylaşılan erişim imzası parametrelerini eklemeyin.

H. Azure Depolama'dan veri alma toplu işlemleri için dış veri kaynağı oluşturma

Şunlar için geçerlidir: SQL Server 2017 (14.x) ve SQL Server 2019 (15.x)

BULK INSERT veya OPENROWSET kullanarak toplu işlemler için aşağıdaki veri kaynağını kullanın. Kimlik bilgisi kimlik olarak ayarlanmalıdır SHARED ACCESS SIGNATURE , SAS belirtecinde başta ? yer almamalıdır, yüklenmesi gereken dosyada (örneğin srt=o&sp=r) en az okuma iznine sahip olmalıdır ve süre sonu süresi geçerli olmalıdır (tüm tarihler UTC saatindedir). Paylaşılan erişim imzaları hakkında daha fazla bilgi için bkz. Paylaşılan Erişim İmzalarını (SAS) Kullanma.

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

Bu örneği kullanımda görmek için bkz . BULK INSERT.

Ben. abfs:// arabirimini kullanarak Azure Depolama'daki verilere erişmek için dış veri kaynağı oluşturma

Şunlar için geçerlidir: SQL Server 2019 (15.x) CU11 ve üzeri

Bu örnekte dış veri kaynağı, Azure logs Lake Storage 2. Nesil hesabıdır. Depolama kapsayıcısı olarak adlandırılır daily. Koşul gönderimi desteklenmediğinden Azure Data Lake Storage 2. Nesil dış veri kaynağı yalnızca veri aktarımı içindir.

Bu örnekte, Azure Data Lake Storage 2. Nesil hesabında kimlik doğrulaması için veritabanı kapsamlı kimlik bilgilerinin nasıl oluşturulacağı gösterilmektedir. Veritabanı kimlik bilgisi gizli dizisinde Azure Depolama hesabı anahtarını belirtin. Azure Depolama'da kimlik doğrulaması sırasında kullanılmadığından, veritabanı kapsamlı kimlik bilgileri kimliğindeki herhangi bir dizeyi belirtebilirsiniz.

-- 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. PostgreSQL'e genel ODBC kullanarak dış veri kaynağı oluşturma

Önceki örneklerde olduğu gibi, önce bir veritabanı ana anahtarı ve veritabanı kapsamlı kimlik bilgileri oluşturun. Dış veri kaynağı için veritabanı kapsamlı kimlik bilgileri kullanılır. Bu örnekte, sunucuda PostgreSQL için genel bir ODBC veri sağlayıcısının yüklü olduğu da varsayılır.

Bu örnekte genel ODBC veri sağlayıcısı, varsayılan TCP 5432 bağlantı noktası kullanılarak PostgreSQL sunucusunun tam etki alanı adının olduğu POSTGRES1aynı ağdaki bir PostgreSQL veritabanı sunucusuna bağlanmak için kullanılır.

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

Genel Bakış: SQL Server 2022

için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümler

PolyBase sorguları için bir dış veri kaynağı oluşturur. Dış veri kaynakları, bağlantı kurmak ve şu birincil kullanım örneklerini desteklemek için kullanılır:

  • SQL Server'da PolyBase kullanarak veri sanallaştırma ve veri yükü
  • veya kullanarak BULK INSERT toplu yükleme işlemleri OPENROWSET

Uyarı

Bu söz dizimi SQL Server'ın farklı sürümlerinde farklılık gösterir. Uygun sürümü seçmek için sürüm seçici açılan listesini kullanın. Bu içerik SQL Server 2022 (16.x) ve sonraki sürümler için geçerlidir.

SQL Server 2022 söz dizimi

SQL Server 2022 ve sonraki sürümleri için söz dizimi

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

Tartışmalar

data_source_name

Veri kaynağı için kullanıcı tanımlı adı belirtir. Ad, SQL Server'daki veritabanında benzersiz olmalıdır.

LOCATION = '<prefix>://<path[:p ort]>'

Bağlantı protokolunu ve dış veri kaynağının yolunu sağlar.

Dış Veri Kaynağı Bağlayıcı konumu ön eki Konum yolu Ürüne/hizmete göre desteklenen konumlar Kimlik doğrulama
Azure Depolama Hesabı (V2) abs abs://<container_name>@<storage_account_name>.blob.core.windows.net/
veya
abs://<storage_account_name>.blob.core.windows.net/<container_name>
SQL Server 2022 (16.x) ile başlayarak
Hiyerarşik Ad Alanı desteklenir.
Paylaşılan erişim imzası (SAS)
Azure Data Lake Storage (İkinci Nesil) adls adls://<container_name>@<storage_account_name>.dfs.core.windows.net/
veya
adls://<storage_account_name>.dfs.core.windows.net/<container_name>
SQL Server 2022 (16.x) ile başlayarak Paylaşılan erişim imzası (SAS)
SQL Server sqlserver <server_name>[\<instance_name>][:port] SQL Server 2019 (15.x) ile başlayarak Yalnızca SQL kimlik doğrulaması
Oracle oracle <server_name>[:port] SQL Server 2019 (15.x) ile başlayarak Yalnızca temel kimlik doğrulaması
Teradata teradata <server_name>[:port] SQL Server 2019 (15.x) ile başlayarak Yalnızca temel kimlik doğrulaması
MongoDB için MongoDB veya Cosmos DB API'si mongodb <server_name>[:port] SQL Server 2019 (15.x) ile başlayarak Yalnızca temel kimlik doğrulaması
Genel ODBC odbc <server_name>[:port] SQL Server 2019 (15.x) ile başlayarak - Yalnızca Windows Yalnızca temel kimlik doğrulaması
Toplu İşlemler https <storage_account>.blob.core.windows.net/<container> SQL Server 2017 'den (14.x) başlayarak Paylaşılan erişim imzası (SAS)
S3 uyumlu nesne depolama s3 - S3 uyumlu: s3://<server_name>:<port>/
- AWS S3: s3://<bucket_name>.S3.amazonaws.com[:port]/<folder>
veya s3://s3.amazonaws.com[:port]/<bucket_name>/<folder>
SQL Server 2022 (16.x) ile başlayarak Temel veya geçişli (STS) *

* Kimliğin sabit kodlandığı ve SECRET bağımsız değişkeninin biçiminde IDENTITY = 'S3 Access Key' olduğu veya geçiş (STS) yetkilendirmesini kullandığı = '<AccessKeyID>:<SecretKeyID>' olmalıdır. Daha fazla bilgi için bkz. PolyBase'i S3 uyumlu nesne depolama alanında dış verilere erişecek şekilde yapılandırma.

Konum yolu:

  • port = Dış veri kaynağının dinlediği bağlantı noktası. Çoğu durumda, ağ yapılandırmasına bağlı olarak isteğe bağlıdır.
  • <container_name> = verileri tutan depolama hesabının kapsayıcısı. Kök kapsayıcılar salt okunur durumdadır, veriler kapsayıcıya geri yazılamaz.
  • <storage_account> = Azure kaynağının depolama hesabı adı.
  • <server_name> = konak adı.
  • <instance_name> = SQL Server adlı örneğin adı. Hedef örnekte çalışan SQL Server Tarayıcı Hizmetiniz varsa kullanılır.
  • <ip_address>:<port> = Yalnızca S3 uyumlu nesne depolama için (SQL Server 2022 (16.x) ile başlayarak), S3 uyumlu depolamaya bağlanmak için kullanılan uç nokta ve bağlantı noktası.
  • <bucket_name> = Yalnızca S3 uyumlu nesne depolama için (SQL Server 2022 (16.x) ile başlayarak), depolama platformuna özgü.
  • <region> = Yalnızca S3 uyumlu nesne depolama için (SQL Server 2022 (16.x) ile başlayarak), depolama platformuna özgü.
  • <folder> = Depolama URL'sinin içindeki depolama yolunun bir parçası.

Konumu ayarlarken ek notlar ve yönergeler:

  • SQL Server Veritabanı Altyapısı, nesne oluşturulduğunda dış veri kaynağının varlığını doğrulamaz. Doğrulamak için dış veri kaynağını kullanarak bir dış tablo oluşturun.
  • BAĞLAYıCıyı sqlserver kullanarak SQL Server 2019'u (15.x) başka bir SQL Server'a veya Azure SQL Veritabanı'na bağlayabilirsiniz.
  • aracılığıyla Driver={<Name of Driver>}bağlanırken değerini ODBC belirtin.
  • Ön ekini adls kullanan Azure Depolama Hesapları (V2) için Hiyerarşik Ad Alanı seçeneği, SQL Server 2022'de (16.x) Azure Data Lake Storage 2. Nesil aracılığıyla desteklenir.
  • HDFS Cloudera (CDP) ve Hortonworks (HDP) dış veri kaynakları için SQL Server desteği kullanımdan kaldırılmıştır ve SQL Server 2022'ye (16.x) dahil değildir. SQL Server 2022'de (16.x) TYPE bağımsız değişkenini kullanmanız gerekmez.
  • SQL Server 2022 (16.x) ile başlayan S3 uyumlu nesne depolama ve PolyBase hakkında daha fazla bilgi için bkz. PolyBase'i S3 uyumlu nesne depolama alanında dış verilere erişecek şekilde yapılandırma. S3 uyumlu nesne depolama alanında bir parquet dosyasını sorgulama örneği için bkz. PolyBase ile S3 uyumlu nesne depolama alanında parquet dosyasını sanallaştırma.
  • SQL Server 2022'de (16.x) önceki sürümlerden farklı olarak, Azure Depolama Hesabı (v2) için kullanılan ön ek olarak wasb[s]absolarak değiştirildi.
  • SQL Server 2022'de (16.x) önceki sürümlerden farklı olarak, Azure Data Lake Storage 2. Nesil için kullanılan ön ek olarak abfs[s]adlsdeğiştirildi.
  • Azure Depolama'da bir CSV dosyasını sanallaştırmak için PolyBase'i kullanma örneği için bkz. PolyBase ile CSV dosyasını sanallaştırma.
  • ADLS 2. Nesil'de delta tablosunu sanallaştırmak için PolyBase kullanma örneği için bkz. PolyBase ile delta tablosunu sanallaştırma.
  • SQL Server 2022 (16.x), hem Azure Depolama Hesabı v2 () hem de Azure Data Lake 2. Nesil (absadls) için iki URL biçimlerini tam olarak destekler.
    • LOCATION yolu şu biçimleri kullanabilir: <container>@<storage_account_name>.. (önerilen) veya <storage_account_name>../<container>. Örneğin:
      • Azure Depolama Hesabı v2: abs://<container>@<storage_account_name>.blob.core.windows.net (önerilen) veya abs://<storage_account_name>.blob.core.windows.net/<container>.
  • Azure Data Lake 2. Nesil şu desteği destekler: adls://<container>@<storage_account_name>.blob.core.windows.net (önerilen) veya adls://<storage_account_name>.dfs.core.windows.net/<container>.

CONNECTION_OPTIONS = key_value_pair

SQL Server 2019 (15.x) ve sonraki sürümler için belirtildi. Dış veri kaynağına bağlanırken ODBC ek seçenekleri belirtir. Birden çok bağlantı seçeneği kullanmak için bunları noktalı virgülle ayırın.

Genel ODBC bağlantıların yanı sıra SQL Server, Oracle, Teradata, MongoDB ve MongoDB için Azure Cosmos DB API'sine ODBC yönelik yerleşik bağlayıcılar için geçerlidir.

key_value_pair, belirli bir bağlantı seçeneğinin anahtar sözcüğü ve değeridir. Kullanılabilir anahtar sözcükler ve değerler dış veri kaynağı türüne bağlıdır. Sürücünün adı en düşük değer olarak gereklidir, ancak veya gibi APP='<your_application_name>'ApplicationIntent= ReadOnly|ReadWrite ayarlamak için de yararlı olan ve sorun gidermeye yardımcı olabilecek başka seçenekler de vardır.

Olası anahtar değer çiftleri sürücüye özgüdür. Her sağlayıcı hakkında daha fazla bilgi için bkz. CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.

SQL Server 2022 (16.x) Toplu Güncelleştirme 2'den başlayarak, Oracle TNS dosyalarını desteklemek için ek anahtar sözcükler kullanıma sunulmuştur:

  • anahtar sözcüğü TNSNamesFile , Oracle sunucusunda bulunan dosyanın dosya yolu tnsnames.ora belirtir.
  • anahtar sözcüğü ServerName , içinde konak tnsnames.ora adını ve bağlantı noktasını değiştirmek için kullanılacak diğer adı belirtir.

PUSHDOWN = ON | KAPALI

Şunlar için geçerlidir: SQL Server 2019 (15.x) ve sonraki sürümleri. Hesaplamanın dış veri kaynağına gönderilip gönderilemeyeceğini belirtir. Varsayılan olarak açıktır.

PUSHDOWN SQL Server, Oracle, Teradata, MongoDB, MongoDB için Azure Cosmos DB API'sine veya dış veri kaynağı düzeyinde ODBC'ye bağlanırken desteklenir.

Sorgu düzeyinde aşağı göndermeyi etkinleştirme veya devre dışı bırakma işlemi , EXTERNALPUSHDOWN ipucu aracılığıyla sağlanır.

CREDENTIAL = credential_name

Dış veri kaynağında kimlik doğrulaması için veritabanı kapsamlı bir kimlik bilgisi belirtir.

Kimlik bilgisi oluştururken ek notlar ve yönergeler:

Paylaşılan erişim imzası oluşturmanın birden çok yolu vardır:

  • Azure portalı -><Your_Storage_Account> - Paylaşılan erişim imzası -> İzinleri yapılandırma ->> SAS ve bağlantı dizesi oluşturma bölümüne giderek SAS belirteci oluşturabilirsiniz. Daha fazla bilgi için bkz . Paylaşılan erişim imzası oluşturma.

  • Azure Depolama Gezgini ile SAS oluşturabilir ve yapılandırabilirsiniz.

  • Sas belirtecini PowerShell, Azure CLI, .NET ve REST API aracılığıyla program aracılığıyla oluşturabilirsiniz. Daha fazla bilgi için bkz . Paylaşılan erişim imzalarını (SAS) kullanarak Azure Depolama kaynaklarına sınırlı erişim verme.

  • SAS belirteci aşağıdaki gibi yapılandırılmalıdır:

    • SAS belirteci oluşturulduğunda belirtecin başında bir soru işareti ('?') bulunur. GİzLİ olarak yapılandırıldığında baştakileri ? hariç tutun.
    • Geçerli bir süre sonu dönemi kullanın (tüm tarihler UTC saatindedir).
  • Yüklenmesi gereken dosya üzerinde en azından okuma izni verin (örneğin srt=o&sp=r). Farklı kullanım örnekleri için birden çok paylaşılan erişim imzası oluşturulabilir. İzinler aşağıdaki gibi verilmelidir:

    Eylem İzin
    Dosyadan veri okuma Okumak
    Birden çok dosyadan ve alt klasörden veri okuma Okuma ve Listeleme
    Dış Tablo Oluştur'u Seç Olarak Kullanma (CETAS) Okuma, Oluşturma, Listeleme ve Yazma
  • Azure Blob Depolama ve Azure Data Lake 2. Nesil için:

    • İzin verilen hizmetler: Blob SAS belirtecini oluşturmak için seçilmelidir
  • İzin verilen kaynak türleri: Container ve Object SAS belirtecini oluşturmak için seçilmelidir

S3 uyumlu nesne depolama ve PolyBase ile kullanma CREDENTIAL örneği için bkz. PolyBase'i S3 uyumlu nesne depolama alanında dış verilere erişecek şekilde yapılandırma.

Veritabanı kapsamlı kimlik bilgileri oluşturmak için bkz. CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

İzinler

CONTROL SQL Server'daki veritabanında izin gerektirir.

Kilitleme

Nesne üzerinde EXTERNAL DATA SOURCE paylaşılan bir kilit alır.

Güvenlik

PolyBase, dış veri kaynaklarının çoğu için ara sunucu tabanlı kimlik doğrulamasını destekler. Proxy hesabını oluşturmak için veritabanı kapsamlı bir kimlik bilgisi oluşturun.

SQL Server 2022'ye yükseltme

SQL Server 2022'den (16.x) başlayarak Hadoop dış veri kaynakları artık desteklenmiyor. Daha önce ile TYPE = HADOOPoluşturulan dış veri kaynaklarını ve bu dış veri kaynağını kullanan dış tabloları el ile yeniden oluşturmak gerekir.

Kullanıcıların Azure Depolama'ya bağlanırken yeni bağlayıcıları kullanacak şekilde dış veri kaynaklarını da yapılandırmaları gerekir.

Dış Veri Kaynağı Kaynak İçin
Azure Blob Saklama Alanı wasb[s] abs
ADLS 2. Nesil abfs[s] adls

Örnekler

Önemli

PolyBase'i yükleme ve etkinleştirme hakkında bilgi için bkz. Windows'a PolyBase yükleme

A. Oracle'a başvurmak için SQL Server'da dış veri kaynağı oluşturma

Oracle'a başvuran bir dış veri kaynağı oluşturmak için veritabanı kapsamlı bir kimlik bilgileriniz olduğundan emin olun. Ayrıca, isteğe bağlı olarak bu veri kaynağında hesaplamanın aşağı itilmesi özelliğini etkinleştirebilir veya devre dışı bırakabilirsiniz.

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

İsteğe bağlı olarak, Oracle'a dış veri kaynağı ayrıntılı erişim denetimi sağlamak için ara sunucu kimlik doğrulamasını kullanabilir. Ara sunucu kullanıcısı, kimliğine bürünülen kullanıcıyla karşılaştırıldığında sınırlı erişime sahip olacak şekilde yapılandırılabilir.

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

Alternatif olarak, TNS kullanarak kimlik doğrulaması yapabilirsiniz.

SQL Server 2022 (16.x) Toplu Güncelleştirme 2'den başlayarak, CREATE EXTERNAL DATA SOURCE artık Oracle'a bağlanırken TNS dosyalarının kullanımını destekliyor.

CONNECTION_OPTIONS parametresi genişletildi ve şimdi dosyaya TNSNamesFile göz atmak ServerName ve sunucuyla bağlantı kurmak için ve değişken olarak ve kullanıyortnsnames.ora.

Aşağıdaki örnekte, çalışma zamanı sırasında SQL Server tnsnames.ora tarafından TNSNamesFile belirtilen dosya konumunu ve tarafından ServerNamebelirtilen konak ve ağ bağlantı noktasını arar.

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. PolyBase bağlantısı aracılığıyla örnek adlı bir SQL Server'a başvurmak için dış veri kaynağı oluşturma

Şunlar için geçerlidir: SQL Server 2019 (15.x) ve üzeri

SQL Server'ın adlandırılmış bir örneğine başvuran bir dış veri kaynağı oluşturmak için örnek adını belirtmek için kullanın CONNECTION_OPTIONS .

İlk olarak, SQL kimliği doğrulanmış oturum açma bilgileri için kimlik bilgilerini depolayarak veritabanı kapsamlı kimlik bilgilerini oluşturun. PolyBase için SQL ODBC Bağlayıcısı yalnızca temel kimlik doğrulamasını destekler. Veritabanı kapsamlı bir kimlik bilgisi oluşturmadan önce, veritabanının kimlik bilgilerini korumak için bir ana anahtarı olmalıdır. Daha fazla bilgi için bkz. CREATE MASTER KEY (Transact-SQL). Aşağıdaki örnek, veritabanı kapsamlı bir kimlik bilgisi oluşturur, kendi oturum açma bilgilerinizi ve parolanızı sağlar.

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

Aşağıdaki örnekte konak WINSQL2019 adı ve SQL2019 örnek adıdır. 'Server=%s\SQL2019' anahtar değer çiftidir.

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

Alternatif olarak, sql server varsayılan örneğine bağlanmak için bir bağlantı noktası kullanabilirsiniz.

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

C. Always On kullanılabilirlik grubunun okunabilir ikincil çoğaltmasına başvurmak için dış veri kaynağı oluşturma

Şunlar için geçerlidir: SQL Server 2019 (15.x) ve üzeri

SQL Server'ın okunabilir ikincil çoğaltmasına başvuran bir dış veri kaynağı oluşturmak için öğesini CONNECTION_OPTIONS kullanarak belirtin ApplicationIntent=ReadOnly. Buna ek olarak, kullanılabilirlik veritabanını içinde Database={dbname}olarak CONNECTION_OPTIONS ayarlamanız veya kullanılabilirlik veritabanını, veritabanı kapsamlı kimlik bilgileri için kullanılan oturum açma bilgilerinin varsayılan veritabanı olarak ayarlamanız gerekir. Bunu kullanılabilirlik grubunun tüm kullanılabilirlik çoğaltmalarında yapmanız gerekir.

İlk olarak, SQL kimliği doğrulanmış oturum açma bilgileri için kimlik bilgilerini depolayarak veritabanı kapsamlı kimlik bilgilerini oluşturun. PolyBase için SQL ODBC Bağlayıcısı yalnızca temel kimlik doğrulamasını destekler. Veritabanı kapsamlı bir kimlik bilgisi oluşturmadan önce, veritabanının kimlik bilgilerini korumak için bir ana anahtarı olmalıdır. Daha fazla bilgi için bkz. CREATE MASTER KEY (Transact-SQL). Aşağıdaki örnek, veritabanı kapsamlı bir kimlik bilgisi oluşturur, kendi oturum açma bilgilerinizi ve parolanızı sağlar.

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

Ardından yeni dış veri kaynağını oluşturun.

veritabanı kapsamlı kimlik bilgilerindeki Database=dbname oturum açma bilgileri için kullanılabilirlik veritabanını varsayılan veritabanı olarak dahil CONNECTION_OPTIONS etmeniz veya ayarlamanız fark etmeksizin, LOCATION parametresinde CREATE EXTERNAL TABLE deyiminde veritabanı adını üç parçalı bir adla sağlamanız gerekir. Örnek için bkz . EXTERNAL TABLE OLUŞTURMA.

Aşağıdaki örnekte kullanılabilirlik WINSQL2019AGL grubu dinleyici adı ve dbname CREATE EXTERNAL TABLE deyiminin hedefi olacak veritabanının adıdır.

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

Sistem görünümünde ApplicationIntentbir dış tablo belirtip sys.servers oluşturarak kullanılabilirlik grubunun yeniden yönlendirme davranışını gösterebilirsiniz. Aşağıdaki örnek betikte iki dış veri kaynağı oluşturulur ve her biri için bir dış tablo oluşturulur. Hangi sunucunun bağlantıya yanıt verdiğini test etmek için görünümleri kullanın. Benzer sonuçlar salt okunur yönlendirme özelliği aracılığıyla da elde edilebilir. Daha fazla bilgi için bkz. Always On kullanılabilirlik grubu için salt okunur yönlendirmeyi yapılandırma.

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

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

Kullanılabilirlik grubundaki veritabanının içinde, döndürülecek sys.servers bir görünüm ve sorguya hangi çoğaltmanın yanıt verdiğini belirlemenize yardımcı olan yerel örneğin adını oluşturun. Daha fazla bilgi için bkz. sys.servers.

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

Ardından kaynak örnekte bir dış tablo oluşturun:

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. PolyBase aracılığıyla S3 uyumlu nesne depolama alanında bir parquet dosyasını sorgulamak için dış veri kaynağı oluşturma

Şunlar için geçerlidir: SQL Server 2022 (16.x) ve üzeri

Aşağıdaki örnek betik, SQL Server'daki kaynak kullanıcı veritabanında bir dış veri kaynağı s3_ds oluşturur. Dış veri kaynağı, s3_dc veritabanı kapsamlı kimlik bilgilerine başvurur.

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

yeni dış veri kaynağını sys.external_data_sourcesile doğrulayın.

SELECT * FROM sys.external_data_sources;

Ardından aşağıdaki örnek, OPENROWSET sorgusu aracılığıyla S3 uyumlu nesne depolama alanında depolanan bir parquet dosyasını sorgulamak için T-SQL'in kullanılmasını gösterir. Daha fazla bilgi için bkz. PolyBase ile S3 uyumlu bir nesne depolama alanında parquet dosyasını sanallaştırma.

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

E. PostgreSQL'e genel ODBC kullanarak dış veri kaynağı oluşturma

Önceki örneklerde olduğu gibi, önce bir veritabanı ana anahtarı ve veritabanı kapsamlı kimlik bilgileri oluşturun. Dış veri kaynağı için veritabanı kapsamlı kimlik bilgileri kullanılır. Bu örnekte, sunucuda PostgreSQL için genel bir ODBC veri sağlayıcısının yüklü olduğu da varsayılır.

Bu örnekte genel ODBC veri sağlayıcısı, varsayılan TCP 5432 bağlantı noktası kullanılarak PostgreSQL sunucusunun tam etki alanı adının olduğu POSTGRES1aynı ağdaki bir PostgreSQL veritabanı sunucusuna bağlanmak için kullanılır.

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

Azure Depolama

Paylaşılan erişim imzası oluşturma

Hem Azure Blob Depolama hem de Azure Data Lake Storage (ADLS) 2. Nesil için desteklenen kimlik doğrulama yöntemi paylaşılan erişim imzası (SAS) yöntemidir. Paylaşılan erişim imzası belirteci oluşturmanın basit bir yolu aşağıdaki adımları izleyin. Daha fazla bilgi için bkz. CREDENTIAL.

  1. Azure portalına ve istediğiniz Depolama Hesabına gidin.

  2. Veri Depolama menüsü altında istediğiniz Kapsayıcıya gidin.

  3. Paylaşılan erişim belirteçleri'ni seçin.

  4. İstenen eyleme göre uygun izni seçin:

    Eylem İzin
    Dosyadan veri okuma Okumak
    Birden çok dosyadan ve alt klasörden veri okuma Okuma ve Listeleme
    Dış Tablo Oluştur'u Seç Olarak Kullanma (CETAS) Okuma, Oluşturma ve Yazma
  5. Belirteç son kullanma tarihini seçin.

  6. SAS belirteci ve URL'si oluşturun.

  7. SAS belirtecini kopyalayın.

F. abs:// arabirimini kullanarak Azure Blob Depolama'daki verilere erişmek için dış veri kaynağı oluşturma

Şunlar için geçerlidir: SQL Server 2022 (16.x) ve üzeri

SQL Server 2022'den (16.x) başlayarak Azure Depolama Hesabı v2 için yeni bir ön ek abs kullanın. Ön abs ek, kullanarak SHARED ACCESS SIGNATUREkimlik doğrulamasını destekler. Ön ek, abs önceki sürümlerde wasbkullanılan öğesinin yerini alır. HADOOP artık desteklenmiyor, artık kullanılmasına TYPE = BLOB_STORAGEgerek yok.

Azure depolama hesabı anahtarı artık gerekli değildir; bunun yerine aşağıdaki örnekte görebileceğiniz gibi SAS Belirteci kullanılır:

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

Azure Blob Depolama'da depolanan CSV dosyalarına erişme hakkında daha ayrıntılı bir örnek için bkz. PolyBase ile CSV dosyasını sanallaştırma.

G. Azure Data Lake 2. Nesil'deki verilere erişmek için dış veri kaynağı oluşturma

Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri

SQL Server 2022'den (16.x) başlayarak Azure Data Lake 2adls. Nesil için önceki sürümlerde kullanılan yerine yeni bir ön ek abfs kullanın. Ön ek, adls bu örnekte gösterildiği gibi kimlik doğrulama yöntemi olarak SAS belirtecini de destekler:

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

Azure Data Lake 2. Nesil'de depolanan delta dosyalarına erişme hakkında daha ayrıntılı bir örnek için bkz. PolyBase ile delta tablosunu sanallaştırma.

Örnekler: Toplu İşlemler

Önemli

Bir dış veri kaynağını toplu işlemler için yapılandırırken URL'nin / sonuna sondaki LOCATION, dosya adı veya paylaşılan erişim imzası parametrelerini eklemeyin.

H. Azure Depolama'dan veri alma toplu işlemleri için dış veri kaynağı oluşturma

Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri.

BULK INSERT (Transact-SQL) veya OPENROWSET (Transact-SQL) kullanarak toplu işlemler için aşağıdaki veri kaynağını kullanın. Kimlik bilgisi kimlik olarak ayarlanmalıdır SHARED ACCESS SIGNATURE , SAS belirtecinde başta ? yer almamalıdır, yüklenmesi gereken dosyada (örneğin srt=o&sp=r) en az okuma iznine sahip olmalıdır ve süre sonu süresi geçerli olmalıdır (tüm tarihler UTC saatindedir). Paylaşılan erişim imzaları hakkında daha fazla bilgi için bkz. Paylaşılan Erişim İmzalarını (SAS) Kullanma.

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

Genel Bakış: SQL Server 2025

Şunlar için geçerlidir: SQL Server 2025 (17.x) Önizleme ve sonraki sürümler.

PolyBase sorguları için bir dış veri kaynağı oluşturur. Dış veri kaynakları, bağlantı kurmak ve şu birincil kullanım örneklerini desteklemek için kullanılır:

Uyarı

Bu söz dizimi SQL Server'ın farklı sürümlerinde farklılık gösterir. Uygun sürümü seçmek için sürüm seçici açılan listesini kullanın. Bu içerik SQL Server 2025 (17.x) Önizleme ve sonraki sürümler için geçerlidir.

SQL Server 2025 ve sonraki sürümleri için söz dizimi

Söz dizimi kuralları hakkında daha fazla bilgi için bkz.Transact-SQL söz dizimi kuralları.

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

Tartışmalar

data_source_name

Veri kaynağı için kullanıcı tanımlı adı belirtir. Ad, SQL Server'daki veritabanında benzersiz olmalıdır.

LOCATION = '<prefix>://<path[:p ort]>'

Bağlantı protokolunu ve dış veri kaynağının yolunu sağlar.

Dış veri kaynağı Bağlayıcı konumu ön eki Konum yolu Ürüne/hizmete göre desteklenen konumlar Kimlik doğrulama
Azure Depolama Hesabı (V2) abs abs://<container_name>@<storage_account_name>.blob.core.windows.net/
veya
abs://<storage_account_name>.blob.core.windows.net/<container_name>
SQL Server 2022 (16.x) ile başlayarak
Hiyerarşik Ad Alanı desteklenir.
Paylaşılan erişim imzası (SAS)
Azure Data Lake Storage (İkinci Nesil) adls adls://<container_name>@<storage_account_name>.dfs.core.windows.net/
veya
adls://<storage_account_name>.dfs.core.windows.net/<container_name>
SQL Server 2022 (16.x) ile başlayarak Paylaşılan erişim imzası (SAS)
SQL Server sqlserver <server_name>[\<instance_name>][:port] SQL Server 2019 (15.x) ile başlayarak Yalnızca SQL kimlik doğrulaması
Oracle oracle <server_name>[:port] SQL Server 2019 (15.x) ile başlayarak Yalnızca temel kimlik doğrulaması
Teradata teradata <server_name>[:port] SQL Server 2019 (15.x) ile başlayarak Yalnızca temel kimlik doğrulaması
MongoDB için MongoDB veya Cosmos DB API'si mongodb <server_name>[:port] SQL Server 2019 (15.x) ile başlayarak Yalnızca temel kimlik doğrulaması
Genel ODBC odbc <server_name>[:port] SQL Server 2019 (15.x) ile başlayarak - Yalnızca Windows Yalnızca temel kimlik doğrulaması
Toplu İşlemler https <storage_account>.blob.core.windows.net/<container> SQL Server 2017 'den (14.x) başlayarak Paylaşılan erişim imzası (SAS)
S3 uyumlu nesne depolama s3 - S3 uyumlu: s3://<server_name>:<port>/
- AWS S3: s3://<bucket_name>.S3.amazonaws.com[:port]/<folder>
veya s3://s3.amazonaws.com[:port]/<bucket_name>/<folder>
SQL Server 2022 (16.x) ile başlayarak Temel veya geçişli (STS) 1

1 Veritabanı kapsamlı bir kimlik bilgisi olmalıdır; burada IDENTITY sabit kodlanır IDENTITY = 'S3 Access Key' ve SECRET bağımsız değişken biçimindedir = '<AccessKeyID>:<SecretKeyID>' veya geçiş (STS) yetkilendirmesini kullanır. Daha fazla bilgi için bkz. PolyBase'i S3 uyumlu nesne depolama alanında dış verilere erişecek şekilde yapılandırma.

Konum yolu:

Konum yolu Açıklama
port Dış veri kaynağının dinlediği bağlantı noktası. Çoğu durumda, ağ yapılandırmasına bağlı olarak isteğe bağlıdır.
<container_name> Verileri tutan depolama hesabının kapsayıcısı. Kök kapsayıcılar salt okunur durumdadır, veriler kapsayıcıya geri yazılamaz.
<storage_account> Azure kaynağının depolama hesabı adı.
<server_name> Ana bilgisayar adı.
<instance_name> SQL Server adlı örneğin adı. Hedef örnekte çalışan SQL Server Tarayıcı Hizmetiniz varsa kullanılır.
<ip_address>:<port> 1 Yalnızca S3 uyumlu nesne depolaması için, S3 uyumlu depolamaya bağlanmak için kullanılan uç nokta ve bağlantı noktası.
<bucket_name> 1 Yalnızca S3 uyumlu nesne depolaması için, depolama platformuna özgü.
<region> 1 Yalnızca S3 uyumlu nesne depolaması için, depolama platformuna özgü.
<folder> Depolama URL'si içindeki depolama yolunun bir parçası.

1 SQL Server 2022 (16.x) ve sonraki sürümleri.

Konumu ayarlarken ek notlar ve yönergeler:

  • SQL Server Veritabanı Altyapısı, nesne oluşturulduğunda dış veri kaynağının varlığını doğrulamaz. Doğrulamak için dış veri kaynağını kullanarak bir dış tablo oluşturun.

  • BAĞLAYıCıyı sqlserver kullanarak SQL Server 2019'u (15.x) başka bir SQL Server'a veya Azure SQL Veritabanı'na bağlayabilirsiniz.

  • aracılığıyla Driver={<Name of Driver>}bağlanırken değerini ODBC belirtin.

  • Ön ekini adls kullanan Azure Depolama Hesapları (V2) için Hiyerarşik Ad Alanı seçeneği, SQL Server 2022 (16.x) ve sonraki sürümlerde Azure Data Lake Storage 2. Nesil aracılığıyla desteklenir.

  • HDFS Cloudera (CDP) ve Hortonworks (HDP) dış veri kaynakları için SQL Server desteği kullanımdan kaldırılmıştır ve SQL Server 2022 (16.x) ve sonraki sürümlere dahil değildir. SQL Server 2025 (17.x) Preview'da bağımsız değişkenini TYPE kullanmanız gerekmez.

  • SQL Server 2022 (16.x) ve sonraki sürümlerde S3 uyumlu nesne depolama ve PolyBase hakkında daha fazla bilgi için bkz. PolyBase'i S3 uyumlu nesne depolamadaki dış verilere erişecek şekilde yapılandırma. S3 uyumlu nesne depolama alanında bir parquet dosyasını sorgulama örneği için bkz. PolyBase ile S3 uyumlu nesne depolama alanında parquet dosyasını sanallaştırma.

SQL Server 2022 (16.x) ve sonraki sürümlerde:

  • Azure Depolama Hesabı (v2) için kullanılan ön ek olarak wasb[s] değiştirildi abs

  • Azure Data Lake Storage 2. Nesil için kullanılan ön ek olarak abfs[s] değiştirildi adls

  • Azure Depolama'da bir CSV dosyasını sanallaştırmak için PolyBase'i kullanma örneği için bkz. PolyBase ile CSV dosyasını sanallaştırma.

  • ADLS 2. Nesil'de delta tablosunu sanallaştırmak için PolyBase kullanma örneği için bkz. PolyBase ile delta tablosunu sanallaştırma.

  • SQL Server 2022 (16.x) ve sonraki sürümleri hem Azure Depolama Hesabı v2 () hem de Azure Data Lake 2. Nesil (absadls) için iki URL biçimini tam olarak destekler.

    • Yol LOCATION şu biçimleri kullanabilir: <container>@<storage_account_name>.. (önerilen) veya <storage_account_name>../<container>. Örneğin:

      • Azure Depolama Hesabı v2: abs://<container>@<storage_account_name>.blob.core.windows.net (önerilen) veya abs://<storage_account_name>.blob.core.windows.net/<container>.
  • Azure Data Lake 2. Nesil şu desteği destekler: adls://<container>@<storage_account_name>.blob.core.windows.net (önerilen) veya adls://<storage_account_name>.dfs.core.windows.net/<container>.

CONNECTION_OPTIONS = key_value_pair

için geçerlidir: SQL Server 2019 (15.x) ve sonraki sürümler.

Dış veri kaynağına bağlanırken ODBC ek seçenekleri belirtir. Birden çok bağlantı seçeneği kullanmak için bunları noktalı virgülle ayırın.

Genel ODBC bağlantıların yanı sıra SQL Server, Oracle, Teradata, MongoDB ve MongoDB için Azure Cosmos DB API'sine ODBC yönelik yerleşik bağlayıcılar için geçerlidir.

key_value_pair, belirli bir bağlantı seçeneğinin anahtar sözcüğü ve değeridir. Kullanılabilir anahtar sözcükler ve değerler dış veri kaynağı türüne bağlıdır. Sürücünün adı en düşük değer olarak gereklidir, ancak veya gibi APP='<your_application_name>'ApplicationIntent= ReadOnly|ReadWrite ayarlamak için de yararlı olan ve sorun gidermeye yardımcı olabilecek başka seçenekler de vardır.

Olası anahtar değer çiftleri sürücüye özgüdür. Her sağlayıcı hakkında daha fazla bilgi için bkz. CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.

SQL Server 2022 (16.x) Toplu Güncelleştirme 2'den başlayarak, Oracle TNS dosyalarını desteklemek için ek anahtar sözcükler kullanıma sunulmuştur:

  • anahtar sözcüğü TNSNamesFile , Oracle sunucusunda bulunan dosyanın dosya yolu tnsnames.ora belirtir.
  • anahtar sözcüğü ServerName , içinde konak tnsnames.ora adını ve bağlantı noktasını değiştirmek için kullanılacak diğer adı belirtir.

SQL Server 2025 (17.x) Preview'da şifreleme seçenekleri

SQL Server 2025 (17.x) Önizleme sürümünden başlayarak, veri kaynağı olarak kullanıldığında sqlserver SQL Server için Microsoft ODBC Sürücüsü sürüm 18 varsayılan sürücüdür. Bu Encryption seçenek gereklidir (Yes, No, veya Strict) ve TrustServerCertificate kullanılabilir (Yes veya No). Belirtilmezse Encryption , varsayılan davranış şeklindedir Encrypt=Yes;TrustServerCertificate=No;ve bir sunucu sertifikası gerektirir.

TDS 8.0 protokolunu kullanarak bağlanmak için katı mod (Encrypt=Strict) eklenmiştir. Bu modda, güvenilen bir sunucu sertifikasının yüklenmesi gerekir ve her zaman doğrulanır (TrustServerCertificate yoksayılır). Yeni bir anahtar sözcük olan , HostnameInCertificatebelirtilen sunucudan farklıysa sertifikada bulunan beklenen konak adını belirtmek için kullanılabilir. HostnameInCertificatetüm şifreleme modlarında kullanılabilir ve sunucu tarafı Şifrelemeyi Zorla seçeneği etkinse de geçerlidir. Bu seçenek, kullanılarak devre dışı bırakılmadığı sürece sürücünün İsteğe bağlı veya TrustServerCertificate modlarda sertifikayı doğrulamasına neden olur.

Seçenekler, sunucu sertifikaları ve Encryptionhakkında TrustServerCertificate daha fazla bilgi için bkz. Windows üzerinde SQL Server için Microsoft ODBC Sürücüsünün Özellikleri.

Her zaman en son sürücüyü kullanmalısınız. Ancak, SQL Server 2025 (17.x) Önizlemesi geriye dönük uyumluluk için SQL Server için Microsoft ODBC Sürücüsü sürüm 17'yi de destekler. PolyBase tarafından kullanılan sürücü sürümünü değiştirme hakkında daha fazla bilgi için bkz. PolyBase için SQL Server sürücü sürümünü değiştirme.

PUSHDOWN = ON | KAPALI

için geçerlidir: SQL Server 2019 (15.x) ve sonraki sürümler.

Hesaplamanın dış veri kaynağına gönderilip gönderilemeyeceğini belirtir. Varsayılan olarak etkindir.

PUSHDOWN SQL Server, Oracle, Teradata, MongoDB, MongoDB için Azure Cosmos DB API'sine veya dış veri kaynağı düzeyinde ODBC'ye bağlanırken desteklenir.

Sorgu düzeyinde aşağı göndermeyi etkinleştirme veya devre dışı bırakma işlemi bir ipucu aracılığıyla oluşturulduğunda elde edilir.

CREDENTIAL = credential_name

Dış veri kaynağında kimlik doğrulaması için veritabanı kapsamlı bir kimlik bilgisi belirtir.

Kimlik bilgisi oluştururken ek notlar ve yönergeler:

Paylaşılan erişim imzası oluşturmanın birden çok yolu vardır:

  • Paylaşılanerişim imzası><>SAS ve bağlantı dizesi oluşturma>> giderek SAS belirteci oluşturabilirsiniz. Daha fazla bilgi için bkz . Paylaşılan erişim imzası oluşturma.

  • Azure Depolama Gezgini ile SAS oluşturabilir ve yapılandırabilirsiniz.

  • Sas belirtecini PowerShell, Azure CLI, .NET ve REST API aracılığıyla program aracılığıyla oluşturabilirsiniz. Daha fazla bilgi için bkz . Paylaşılan erişim imzalarını (SAS) kullanarak Azure Depolama kaynaklarına sınırlı erişim verme.

  • SAS belirteci aşağıdaki gibi yapılandırılmalıdır:

    • SAS belirteci oluşturulduğunda belirtecin başında bir soru işareti ('?') bulunur. olarak yapılandırıldığında baştakileri ?SECREThariç tutun.

    • Geçerli bir süre sonu dönemi kullanın (tüm tarihler UTC saatindedir).

  • Yüklenmesi gereken dosya üzerinde en azından okuma izni verin (örneğin srt=o&sp=r). Farklı kullanım örnekleri için birden çok paylaşılan erişim imzası oluşturulabilir. İzinler aşağıdaki gibi verilmelidir:

    Eylem İzin
    Dosyadan veri okuma Okumak
    Birden çok dosyadan ve alt klasörden veri okuma Okuma ve Listeleme
    Dış Tablo Oluştur'u Seç Olarak Kullanma (CETAS) Okuma, Oluşturma, Listeleme ve Yazma
  • Azure Blob Depolama ve Azure Data Lake 2. Nesil için:

    • İzin verilen hizmetler: Blob SAS belirtecini oluşturmak için seçilmelidir
  • İzin verilen kaynak türleri: Container ve Object SAS belirtecini oluşturmak için seçilmelidir

S3 uyumlu nesne depolama ve PolyBase ile kullanma CREDENTIAL örneği için bkz. PolyBase'i S3 uyumlu nesne depolama alanında dış verilere erişecek şekilde yapılandırma.

Veritabanı kapsamlı kimlik bilgileri oluşturmak için bkz. CREATE DATABASE SCOPED CREDENTIAL.

İzinler

CONTROL SQL Server'daki veritabanında izin gerektirir.

Kilitleme

Nesne üzerinde EXTERNAL DATA SOURCE paylaşılan bir kilit alır.

Güvenlik

PolyBase, dış veri kaynaklarının çoğu için ara sunucu tabanlı kimlik doğrulamasını destekler. Proxy hesabını oluşturmak için veritabanı kapsamlı bir kimlik bilgisi oluşturun.

SQL Server 2025'e yükseltme

SQL Server 2022 (16.x) ve sonraki sürümlerinde Hadoop dış veri kaynakları desteklenmez. Daha önce ile TYPE = HADOOPoluşturulan dış veri kaynaklarını ve bu dış veri kaynağını kullanan tüm dış tabloları el ile yeniden oluşturmak gerekir.

Kullanıcıların Azure Depolama'ya bağlanırken yeni bağlayıcıları kullanacak şekilde dış veri kaynaklarını da yapılandırmaları gerekir.

Dış veri kaynağı Kaynak İçin
Azure Blob Saklama Alanı wasb[s] Karın kasları
ADLS 2. Nesil abfs[s] adls

Örnekler

Önemli

PolyBase'i yükleme ve etkinleştirme hakkında bilgi için bkz. Windows'a PolyBase yükleme.

A. Oracle'a başvurmak için SQL Server'da dış veri kaynağı oluşturma

Oracle'a başvuran bir dış veri kaynağı oluşturmak için veritabanı kapsamlı bir kimlik bilgileriniz olduğundan emin olun. Ayrıca, isteğe bağlı olarak bu veri kaynağında hesaplamanın aşağı itilmesi özelliğini etkinleştirebilir veya devre dışı bırakabilirsiniz.

-- 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',
    PUSHDOWN = ON,
    CREDENTIAL = OracleProxyAccount
);

İsteğe bağlı olarak, Oracle'a dış veri kaynağı ayrıntılı erişim denetimi sağlamak için ara sunucu kimlik doğrulamasını kullanabilir. Ara sunucu kullanıcısı, kimliğine bürünülen kullanıcıyla karşılaştırıldığında sınırlı erişime sahip olacak şekilde yapılandırılabilir.

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

Alternatif olarak, TNS kullanarak kimlik doğrulaması yapabilirsiniz.

SQL Server 2022 (16.x) Toplu Güncelleştirme 2'den başlayarak, CREATE EXTERNAL DATA SOURCE artık Oracle'a bağlanırken TNS dosyalarının kullanımını destekliyor.

CONNECTION_OPTIONS parametresi genişletildi ve şimdi dosyaya TNSNamesFile göz atmak ServerName ve sunucuyla bağlantı kurmak için ve değişken olarak ve kullanıyortnsnames.ora.

Aşağıdaki örnekte, çalışma zamanı sırasında SQL Server tnsnames.ora tarafından TNSNamesFile belirtilen dosya konumunu ve tarafından ServerNamebelirtilen konak ve ağ bağlantı noktasını arar.

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. PolyBase bağlantısı aracılığıyla örnek adlı bir SQL Server'a başvurmak için dış veri kaynağı oluşturma

Şunlar için geçerlidir: SQL Server 2019 (15.x) ve sonraki sürümleri.

SQL Server'ın adlandırılmış bir örneğine başvuran bir dış veri kaynağı oluşturmak için örnek adını belirtmek için kullanın CONNECTION_OPTIONS .

İlk olarak, SQL kimliği doğrulanmış oturum açma bilgileri için kimlik bilgilerini depolayarak veritabanı kapsamlı kimlik bilgilerini oluşturun. PolyBase için SQL ODBC Bağlayıcısı yalnızca temel kimlik doğrulamasını destekler. Veritabanı kapsamlı bir kimlik bilgisi oluşturmadan önce, veritabanının kimlik bilgilerini korumak için bir ana anahtarı olmalıdır. Daha fazla bilgi için bkz. CREATE MASTER KEY . Aşağıdaki örnek, veritabanı kapsamlı bir kimlik bilgisi oluşturur, kendi oturum açma bilgilerinizi ve parolanızı sağlar.

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

Aşağıdaki örnekte konak WINSQL2019 adı ve SQL2019 örnek adıdır. 'Server=%s\SQL2019' anahtar değer çiftidir.

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

Alternatif olarak, sql server varsayılan örneğine bağlanmak için bir bağlantı noktası kullanabilirsiniz.

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

C. Always On kullanılabilirlik grubunun okunabilir ikincil çoğaltmasına başvurmak için dış veri kaynağı oluşturma

Şunlar için geçerlidir: SQL Server 2019 (15.x) ve sonraki sürümleri.

SQL Server'ın okunabilir ikincil çoğaltmasına başvuran bir dış veri kaynağı oluşturmak için öğesini CONNECTION_OPTIONS kullanarak belirtin ApplicationIntent=ReadOnly. Buna ek olarak, kullanılabilirlik veritabanını içinde Database={dbname}olarak CONNECTION_OPTIONS ayarlamanız veya kullanılabilirlik veritabanını, veritabanı kapsamlı kimlik bilgileri için kullanılan oturum açma bilgilerinin varsayılan veritabanı olarak ayarlamanız gerekir. Bunu kullanılabilirlik grubunun tüm kullanılabilirlik çoğaltmalarında yapmanız gerekir.

İlk olarak, SQL kimliği doğrulanmış oturum açma bilgileri için kimlik bilgilerini depolayarak veritabanı kapsamlı kimlik bilgilerini oluşturun. PolyBase için SQL ODBC Bağlayıcısı yalnızca temel kimlik doğrulamasını destekler. Veritabanı kapsamlı bir kimlik bilgisi oluşturmadan önce, veritabanının kimlik bilgilerini korumak için bir ana anahtarı olmalıdır. Daha fazla bilgi için bkz. CREATE MASTER KEY . Aşağıdaki örnek, veritabanı kapsamlı bir kimlik bilgisi oluşturur, kendi oturum açma bilgilerinizi ve parolanızı sağlar.

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

Ardından yeni dış veri kaynağını oluşturun.

veritabanı kapsamlı kimlik bilgilerindeki Database=dbname oturum açma bilgileri için kullanılabilirlik veritabanını varsayılan veritabanı olarak dahil CONNECTION_OPTIONS etmeniz veya ayarlamanız fark etmeksizin, LOCATION parametresinde CREATE EXTERNAL TABLE deyiminde veritabanı adını üç parçalı bir adla sağlamanız gerekir. Örnek için bkz . EXTERNAL TABLE OLUŞTURMA.

Aşağıdaki örnekte kullanılabilirlik WINSQL2019AGL grubu dinleyici adı ve dbname CREATE EXTERNAL TABLE deyiminin hedefi olacak veritabanının adıdır.

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

Sistem görünümünde ApplicationIntentbir dış tablo belirtip sys.servers oluşturarak kullanılabilirlik grubunun yeniden yönlendirme davranışını gösterebilirsiniz. Aşağıdaki örnek betikte iki dış veri kaynağı oluşturulur ve her biri için bir dış tablo oluşturulur. Hangi sunucunun bağlantıya yanıt verdiğini test etmek için görünümleri kullanın. Benzer sonuçlar salt okunur yönlendirme özelliği aracılığıyla da elde edilebilir. Daha fazla bilgi için bkz. Always On kullanılabilirlik grubu için salt okunur yönlendirmeyi yapılandırma.

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

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

Kullanılabilirlik grubundaki veritabanının içinde, döndürülecek sys.servers bir görünüm ve sorguya hangi çoğaltmanın yanıt verdiğini belirlemenize yardımcı olan yerel örneğin adını oluşturun. Daha fazla bilgi için bkz. sys.servers.

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

Ardından kaynak örnekte bir dış tablo oluşturun:

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. PolyBase aracılığıyla S3 uyumlu nesne depolama alanında bir parquet dosyasını sorgulamak için dış veri kaynağı oluşturma

Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri.

Aşağıdaki örnek betik, SQL Server'daki kaynak kullanıcı veritabanında bir dış veri kaynağı s3_ds oluşturur. Dış veri kaynağı, s3_dc veritabanı kapsamlı kimlik bilgilerine başvurur.

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

yeni dış veri kaynağını sys.external_data_sourcesile doğrulayın.

SELECT *
FROM sys.external_data_sources;

Ardından aşağıdaki örnek, OPENROWSET sorgusu aracılığıyla S3 uyumlu nesne depolama alanında depolanan bir parquet dosyasını sorgulamak için T-SQL'in kullanılmasını gösterir. Daha fazla bilgi için bkz. PolyBase ile S3 uyumlu bir nesne depolama alanında parquet dosyasını sanallaştırma.

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

E. PostgreSQL'e genel ODBC kullanarak dış veri kaynağı oluşturma

Önceki örneklerde olduğu gibi, önce bir veritabanı ana anahtarı ve veritabanı kapsamlı kimlik bilgileri oluşturun. Dış veri kaynağı için veritabanı kapsamlı kimlik bilgileri kullanılır. Bu örnekte, sunucuda PostgreSQL için genel bir ODBC veri sağlayıcısının yüklü olduğu da varsayılır.

Bu örnekte genel ODBC veri sağlayıcısı, varsayılan TCP 5432 bağlantı noktası kullanılarak PostgreSQL sunucusunun tam etki alanı adının olduğu POSTGRES1aynı ağdaki bir PostgreSQL veritabanı sunucusuna bağlanmak için kullanılır.

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

Azure Depolama

Paylaşılan erişim imzası oluşturma

Hem Azure Blob Depolama hem de Azure Data Lake 2. Nesil için desteklenen kimlik doğrulama yöntemi paylaşılan erişim imzası (SAS) yöntemidir. Paylaşılan erişim imzası belirteci oluşturmanın basit bir yolu aşağıdaki adımları izleyin. Daha fazla bilgi için bkz. CREDENTIAL.

  1. Azure portalına ve istediğiniz Depolama Hesabına gidin.
  2. Veri Depolama menüsü altında istediğiniz Kapsayıcıya gidin.
  3. Paylaşılan erişim belirteçleri'ni seçin.
  4. İstenen eyleme göre uygun izni seçin; başvuru için tablo körü kullanın:
Eylem İzin
Dosyadan veri okuma Okumak
Birden çok dosyadan ve alt klasörden veri okuma Okuma ve Listeleme
Dış Tablo Oluştur'u Seç Olarak Kullanma (CETAS) Okuma, Oluşturma ve Yazma
  1. Belirteç son kullanma tarihini seçin.
  2. SAS belirteci ve URL'si oluşturun.
  3. SAS belirtecini kopyalayın.

F. abs:// arabirimini kullanarak Azure Blob Depolama'daki verilere erişmek için dış veri kaynağı oluşturma

Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri.

Azure Depolama Hesabı v2 için yeni bir ön ek abs kullanın. Ön abs ek, kullanarak SHARED ACCESS SIGNATUREkimlik doğrulamasını destekler. Ön ek, abs önceki sürümlerde wasbkullanılan öğesinin yerini alır. HADOOP artık desteklenmiyor, artık kullanılmasına TYPE = BLOB_STORAGEgerek yok.

Azure depolama hesabı anahtarı artık gerekli değildir; bunun yerine aşağıdaki örnekte görebileceğiniz gibi SAS Belirteci kullanılır:

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

Azure Blob Depolama'da depolanan CSV dosyalarına erişme hakkında daha ayrıntılı bir örnek için bkz. PolyBase ile CSV dosyasını sanallaştırma.

G. Azure Data Lake 2. Nesil'deki verilere erişmek için dış veri kaynağı oluşturma

Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri.

Önceki sürümlerde kullanılan yerine Azure Data Lake 2adls. Nesil için yeni bir ön ek abfs kullanın. Ön ek, adls bu örnekte gösterildiği gibi kimlik doğrulama yöntemi olarak SAS belirtecini de destekler:

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

Azure Data Lake 2. Nesil'de depolanan delta dosyalarına erişme hakkında daha ayrıntılı bir örnek için bkz. PolyBase ile delta tablosunu sanallaştırma.

Örnekler: Toplu İşlemler

Önemli

Bir dış veri kaynağını toplu işlemler için yapılandırırken URL'nin sonuna sondaki /, dosya adı veya paylaşılan erişim imzası parametrelerini eklemeyin LOCATION .

H. Azure Depolama'dan veri alma toplu işlemleri için dış veri kaynağı oluşturma

Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri.

BULK INSERT veya OPENROWSET kullanarak toplu işlemler için aşağıdaki veri kaynağını kullanın. Kimlik bilgisi kimlik olarak ayarlanmalıdır SHARED ACCESS SIGNATURE , SAS belirtecinde başta ? yer almamalıdır, yüklenmesi gereken dosyada (örneğin srt=o&sp=r) en az okuma iznine sahip olmalıdır ve süre sonu süresi geçerli olmalıdır (tüm tarihler UTC saatindedir). Paylaşılan erişim imzaları hakkında daha fazla bilgi için bkz. Paylaşılan Erişim İmzalarını (SAS) Kullanma.

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

Ben. Başka bir SQL Server'a bağlanmak için TDS 8.0 kullanarak dış veri kaynağı oluşturma

Şunlar için geçerlidir: SQL Server 2025 (17.x) Önizleme ve sonraki sürümler.

SQL Server için en son Microsoft ODBC Sürücüsü 18'i kullanırken altında Encryptionseçeneğini kullanmanız CONNECTION_OPTIONS gerekir ve TrustServerCertificate ayrıca desteklenir. Belirtilmezse Encryption , varsayılan davranış şeklindedir Encrypt=Yes;TrustServerCertificate=No;ve bir sunucu sertifikasına ihtiyacınız vardır.

Bu örnekte SQL Kimlik Doğrulaması kullanılmıştır. Kimlik bilgilerini korumak için bir veritabanı ana anahtarına (DMK) ihtiyacınız vardır. Daha fazla bilgi için bkz. CREATE MASTER KEY . Aşağıdaki örnek, özel oturum açma bilgileri ve parola ile veritabanı kapsamlı bir kimlik bilgisi oluşturur.

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

Hedef sunucu adı WINSQL2022, bağlantı noktası 58137ve varsayılan bir örnektir. belirterek Encryption=Strict, bağlantı TDS 8.0 kullanır ve sunucu sertifikası her zaman doğrulanır. bu örnekte HostnameinCertificate kullanılan:WINSQL2022

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2022:58137',
    CONNECTION_OPTIONS = 'Encryption=Strict;HostnameInCertificate=WINSQL2022;'
    CREDENTIAL = SQLServerCredentials
);

J. Şifreleme ve TrustServerCertificate seçeneğini kullanarak dış veri kaynağı oluşturma

Aşağıdaki önceki örnekte iki kod örneği verilmiştır. İlk kod parçacığında ve EncryptionTrustServerCertificate ayarlanmıştır.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2022:58137',
    CONNECTION_OPTIONS = 'Encryption=Yes;HostnameInCertificate=WINSQL2022;TrustServerCertificate=Yes;'
    CREDENTIAL = SQLServerCredentials
);

Aşağıdaki kod parçacığı etkinleştirilmemiş Encryption .

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2022:58137',
    CONNECTION_OPTIONS = 'Encryption=no;'
    CREDENTIAL = SQLServerCredentials
);

* SQL Veritabanı *  

 

Genel Bakış: Azure SQL Veritabanı

için geçerlidir: Azure SQL Veritabanı

Elastik sorgular için bir dış veri kaynağı oluşturur. Dış veri kaynakları, bağlantı kurmak ve şu birincil kullanım örneklerini desteklemek için kullanılır:

Transact-SQL söz dizimi kuralları

Sözdizimi

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>' ] )
[ ; ]

Tartışmalar

data_source_name

Veri kaynağı için kullanıcı tanımlı adı belirtir. Ad, SQL Veritabanı'ndaki veritabanında benzersiz olmalıdır.

LOCATION = '<prefix>://<path[:p ort]>'

Bağlantı protokolunu ve dış veri kaynağının yolunu sağlar.

Dış Veri Kaynağı Bağlayıcı konumu ön eki Konum yolu Kullanılabilirlik
Toplu İşlemler https <storage_account>.blob.core.windows.net/<container>
Elastik Sorgu (parça) Gerekli değil <shard_map_server_name>.database.windows.net
Elastik Sorgu (uzak) Gerekli değil <remote_server_name>.database.windows.net
EdgeHub edgehub edgehub:// YalnızcaAzure SQL Edge'de kullanılabilir. EdgeHub, Azure SQL Edge örneğinde her zaman yereldir. Bu nedenle bir yol veya bağlantı noktası değeri belirtmeniz gerekmez.
Kafka kafka kafka://<kafka_bootstrap_server_name_ip>:<port_number> YalnızcaAzure SQL Edge'de kullanılabilir.
Azure Depolama Hesabı (v2) abs abs://<container_name>@<storage_account_name>.blob.core.windows.net/

veya

abs://<storage_account_name>.blob.core.windows.net/ <container_name>
Azure Data Lake Storage (İkinci Nesil) adls adls://<container_name>@<storage_account_name>.dfs.core.windows.net/

veya

adls://<storage_account_name>.dfs.core.windows.net/<container_name>

Konum yolu:

  • <shard_map_server_name> = Azure'da parça eşleme yöneticisini barındıran mantıksal sunucu adı. DATABASE_NAME bağımsız değişkeni, parça eşlemesini barındırmak için kullanılan veritabanını sağlar ve SHARD_MAP_NAME parça eşlemesinin kendisi için kullanılır.
  • <remote_server_name> = Elastik sorgunun hedef mantıksal sunucu adı. Veritabanı adı bağımsız değişkeni kullanılarak DATABASE_NAME belirtilir.

Konumu ayarlarken ek notlar ve yönergeler:

  • Veritabanı Altyapısı, nesne oluşturulduğunda dış veri kaynağının varlığını doğrulamaz. Doğrulamak için dış veri kaynağını kullanarak bir dış tablo oluşturun.

CREDENTIAL = credential_name

Dış veri kaynağında kimlik doğrulaması için veritabanı kapsamlı bir kimlik bilgisi belirtir.

Kimlik bilgisi oluştururken ek notlar ve yönergeler:

  • Azure Depolama'dan Azure SQL Veritabanı'na veri yüklemek için Paylaşılan Erişim İmzası (SAS belirteci) kullanın.
  • CREDENTIAL yalnızca verilerin güvenliği sağlanmışsa gereklidir. CREDENTIAL anonim erişime izin veren veri kümeleri için gerekli değildir.
  • TYPE = BLOB_STORAGEolduğunda kimlik bilgisi kimlik olarak kullanılarak SHARED ACCESS SIGNATURE oluşturulmalıdır.
  • WASB[s] bağlayıcısı aracılığıyla Azure Depolama'ya bağlanırken, kimlik doğrulaması paylaşılan erişim imzası (SAS) ile değil depolama hesabı anahtarıyla yapılmalıdır.
  • TYPE = HADOOPKimlik bilgilerinin depolama hesabı anahtarı olarak SECRETkullanılarak oluşturulması gerektiğinde.
  • TYPE = BLOB_STORAGE yalnızca toplu işlemler için izin verilir; ile TYPE = BLOB_STORAGEbir dış veri kaynağı için dış tablolar oluşturamazsınız.

Paylaşılan erişim imzası oluşturmanın birden çok yolu vardır:

  • Azure portalı -><Your_Storage_Account> - Paylaşılan erişim imzası -> İzinleri yapılandırma ->> SAS ve bağlantı dizesi oluşturma bölümüne giderek SAS belirteci oluşturabilirsiniz. Daha fazla bilgi için bkz . Paylaşılan erişim imzası oluşturma.

  • Azure Depolama Gezgini ile SAS oluşturabilir ve yapılandırabilirsiniz.

  • Sas belirtecini PowerShell, Azure CLI, .NET ve REST API aracılığıyla program aracılığıyla oluşturabilirsiniz. Daha fazla bilgi için bkz . Paylaşılan erişim imzalarını (SAS) kullanarak Azure Depolama kaynaklarına sınırlı erişim verme.

  • SAS belirteci aşağıdaki gibi yapılandırılmalıdır:

    • SAS belirteci oluşturulduğunda belirtecin başında bir soru işareti ('?') bulunur. GİzLİ olarak yapılandırıldığında baştakileri ? hariç tutun.
    • Geçerli bir süre sonu dönemi kullanın (tüm tarihler UTC saatindedir).
  • Yüklenmesi gereken dosya üzerinde en azından okuma izni verin (örneğin srt=o&sp=r). Farklı kullanım örnekleri için birden çok paylaşılan erişim imzası oluşturulabilir. İzinler aşağıdaki gibi verilmelidir:

    Eylem İzin
    Dosyadan veri okuma Okumak
    Birden çok dosyadan ve alt klasörden veri okuma Okuma ve Listeleme
    Dış Tablo Oluştur'u Seç Olarak Kullanma (CETAS) Okuma, Oluşturma ve Yazma

ve CREDENTIALSHARED ACCESS SIGNATURETYPEile = kullanma BLOB_STORAGE örneği için bkz. Toplu işlemleri yürütmek ve Azure Depolama'dan SQL Veritabanı'na veri almak için dış veri kaynağı oluşturma

Veritabanı kapsamlı kimlik bilgileri oluşturmak için bkz. CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

TÜR = * [ BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER ] *

Yapılandırılan dış veri kaynağının türünü belirtir. Bu parametre her zaman gerekli değildir ve yalnızca belirli dış veri kaynakları için sağlanmalıdır.

  • SQL Veritabanı'ndan elastik sorgu kullanarak veritabanları arası sorgular için kullanın RDBMS .
  • Parçalı SQL Veritabanına bağlanırken dış veri kaynağı oluştururken kullanın SHARD_MAP_MANAGER .
  • Yalnızca BLOB_STORAGE ön ek ile https kullanmak için kullanılır. ve abd ön ekleri için adls sağlamazTYPE.

Önemli

Başka bir dış veri kaynağı kullanıyorsanız ayarlamayın TYPE .

DATABASE_NAME = database_name

veya TYPEolarak ayarlandığında RDBMS bu bağımsız değişkeni SHARD_MAP_MANAGER yapılandırın.

TİP DATABASE_NAME değeri
RDBMS Kullanılarak sağlanan sunucudaki uzak veritabanının adı LOCATION
SHARD_MAP_MANAGER Parça eşleme yöneticisi olarak çalışan veritabanının adı

burada TYPE = RDBMSdış veri kaynağının nasıl oluşturulacağını gösteren bir örnek için bkz. RDBMS dış veri kaynağı oluşturma.

SHARD_MAP_NAME = shard_map_name

TYPE Bağımsız değişken yalnızca parça eşlemesinin adını ayarlamak için ayarlandığında SHARD_MAP_MANAGER kullanılır.

Parça eşleme yöneticisi dış veri kaynağı oluşturma bölümüne başvuran TYPE nasıl oluşturulacağını = SHARD_MAP_MANAGER gösteren bir örnek için

İzinler

CONTROL Azure SQL Veritabanı'ndaki veritabanında izin gerektirir.

Kilitleme

Nesne üzerinde EXTERNAL DATA SOURCE paylaşılan bir kilit alır.

Örnekler

A. Parça eşleme yöneticisi dış veri kaynağı oluşturma

bir öğesine başvurmak SHARD_MAP_MANAGERüzere bir dış veri kaynağı oluşturmak için, SQL Veritabanı'nda parça eşleme yöneticisini barındıran SQL Veritabanı sunucu adını veya bir sanal makinedeki SQL Server veritabanını belirtin.

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

Adım adım öğretici için bkz. Parçalama (yatay bölümleme) için elastik sorgularla çalışmaya başlama.

B. RDBMS dış veri kaynağı oluşturma

RDBMS'ye başvurmak üzere bir dış veri kaynağı oluşturmak için, SQL Veritabanı'ndaki uzak veritabanının SQL Veritabanı sunucu adını belirtir.

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

RDBMS ile ilgili adım adım öğretici için bkz. Veritabanları arası sorguları (dikey bölümleme) kullanmaya başlama.

Örnekler: Toplu işlemler

Önemli

Bir dış veri kaynağını toplu işlemler için yapılandırırken URL'nin / sonuna sondaki LOCATION, dosya adı veya paylaşılan erişim imzası parametrelerini eklemeyin.

C. Azure Depolama'dan veri alma toplu işlemleri için dış veri kaynağı oluşturma

BULK INSERT (Transact-SQL) veya OPENROWSET (Transact-SQL) kullanarak toplu işlemler için aşağıdaki veri kaynağını kullanın. Kimlik bilgisi kimlik olarak ayarlanmalıdır SHARED ACCESS SIGNATURE , SAS belirtecinde başta ? yer almamalıdır, yüklenmesi gereken dosyada (örneğin srt=o&sp=r) en az okuma iznine sahip olmalıdır ve süre sonu süresi geçerli olmalıdır (tüm tarihler UTC saatindedir). Paylaşılan erişim imzaları hakkında daha fazla bilgi için bkz. Paylaşılan Erişim İmzalarını (SAS) Kullanma.

Yönetilen Kimlik kullanarak Azure Blob Depolama (ABS) için dış veri kaynağı oluşturma:

CREATE DATABASE SCOPED CREDENTIAL DSC_MI
WITH IDENTITY = 'Managed Identity'

--Create external data source pointing to the file path, and referencing database-scoped credential: 
CREATE EXTERNAL DATA SOURCE PrivateABS 
WITH ( 
    LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/' 
    ,CREDENTIAL = [DSC_MI]);

Kullanıcı Kimliği kullanarak Azure Data Lake 2. Nesil (ADLS) için dış veri kaynağı oluşturma:

CREATE DATABASE SCOPED CREDENTIAL DSC_ADLS
WITH IDENTITY = 'User Identity'

--Create external data source pointing to the file path, and referencing database-scoped credential: 
CREATE EXTERNAL DATA SOURCE PrivateADLS 
WITH ( 
    LOCATION = 'adls://<container>@<storage_account_name>.dfs.core.windows.net/' 
    ,CREDENTIAL = [DSC_ADLS]);

Bu örneği kullanımda görmek için bkz . BULK INSERT.

Örnekler: Azure SQL Edge

Önemli

Azure SQL Edge için dış verileri yapılandırma hakkında bilgi için bkz. Azure SQL Edge'de veri akışı.

A. Kafka'ya başvurmak için dış veri kaynağı oluşturma

Şunlar için geçerlidir:YalnızcaAzure SQL Edge

Bu örnekte dış veri kaynağı, IP adresi xxx.xxx.xxx.xxx ve bağlantı noktası 1900'de dinleyen bir Kafka sunucusudur. Kafka dış veri kaynağı yalnızca veri akışı içindir ve koşul aşağı göndermeyi desteklemez.

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

B. EdgeHub'a başvurmak için dış veri kaynağı oluşturma

Şunlar için geçerlidir:YalnızcaAzure SQL Edge

Bu örnekte dış veri kaynağı, Azure SQL Edge ile aynı uç cihazda çalışan bir EdgeHub'dır. edgeHub dış veri kaynağı yalnızca veri akışı içindir ve koşul aşağı göndermeyi desteklemez.

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

* Azure Synapse
Analiz *
 

 

Genel Bakış: Azure Synapse Analytics

için geçerlidir: Azure Synapse Analytics

Veri sanallaştırma için bir dış veri kaynağı oluşturur. Dış veri kaynakları, bağlantı kurmak ve dış veri kaynaklarından veri sanallaştırma ve veri yüklemenin birincil kullanım örneğini desteklemek için kullanılır. Daha fazla bilgi için bkz. Synapse SQL ile dış tabloları kullanma.

Önemli

Elastik sorguyla Azure SQL Veritabanı kullanarak Azure Synapse Analytics kaynağını sorgulamak üzere bir dış veri kaynağı oluşturmak için bkz. Azure SQL Veritabanı için EXTERNAL DATA SOURCE OLUŞTURMA.

Transact-SQL söz dizimi kuralları

Sözdizimi

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

Tartışmalar

data_source_name

Veri kaynağı için kullanıcı tanımlı adı belirtir. Ad, Azure Synapse Analytics'teki Azure SQL Veritabanı içinde benzersiz olmalıdır.

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

Bağlantı protokolunu ve dış veri kaynağının yolunu sağlar.

Dış Veri Kaynağı Bağlayıcı konumu ön eki Konum yolu
Data Lake Storage* 1. Nesil adl <storage_account>.azuredatalake.net
Data Lake Storage Gen 2 abfs[s] <container>@<storage_account>.dfs.core.windows.net
Azure Blob Saklama Alanı wasbs <container>@<storage_account>.blob.core.windows.net
Azure Blob Saklama Alanı https <storage_account>.blob.core.windows.net/<container>/subfolders
Data Lake Storage 1. Nesil http[s] <storage_account>.azuredatalakestore.net/webhdfs/v1
Data Lake Storage Gen 2 http[s] <storage_account>.dfs.core.windows.net/<container>/subfolders
Data Lake Storage Gen 2 wasb[s] <container>@<storage_account>.blob.core.windows.net

* Microsoft Azure Data Lake Storage 1. Nesil sınırlı desteğe sahiptir, tüm yeni geliştirmeler için 2. Nesil önerilir.

Dış Veri Kaynağı Bağlayıcı konumu ön eki Ayrılmış SQL havuzları: PolyBase Ayrılmış SQL havuzları: yerel* Sunucusuz SQL havuzları
Data Lake Storage** 1. Nesil adl Hayı Hayı Evet
Data Lake Storage Gen 2 abfs[s] Evet Evet Evet
Azure Blob Saklama Alanı wasbs Evet Evet*** Evet
Azure Blob Saklama Alanı https Hayı Evet Evet
Data Lake Storage 1. Nesil http[s] Hayı Hayı Evet
Data Lake Storage Gen 2 http[s] Evet Evet Evet
Data Lake Storage Gen 2 wasb[s] Evet Evet Evet

* Azure Synapse Analytics'teki sunucusuz ve ayrılmış SQL havuzları, veri sanallaştırma için farklı kod temelleri kullanır. Sunucusuz SQL havuzları yerel bir veri sanallaştırma teknolojisini destekler. Ayrılmış SQL havuzları hem yerel hem de PolyBase veri sanallaştırmayı destekler. PolyBase veri sanallaştırması, EXTERNAL DATA SOURCE TYPE=HADOOPile oluşturulduğunda kullanılır.

** Microsoft Azure Data Lake Storage 1. Nesil sınırlı desteğe sahiptir. Tüm yeni geliştirmeler için 2. Nesil önerilir.

üzerinden wasbsdaha güvenli wasb bağlayıcı önerilir. Yalnızca ayrılmış SQL havuzlarındaki yerel veri sanallaştırması (TYPE hadOOP'a eşit değildir) destekler wasb.

Konum yolu:

  • <container> = verileri tutan depolama hesabının kapsayıcısı. Kök kapsayıcılar salt okunur durumdadır, veriler kapsayıcıya geri yazılamaz.
  • <storage_account> = Azure kaynağının depolama hesabı adı.

Konumu ayarlarken ek notlar ve yönergeler:

  • Varsayılan seçenek, Azure Data Lake Storage 2. Nesil'i sağlarken kullanmaktır enable secure SSL connections . Bu etkinleştirildiğinde güvenli bir TLS/SSL bağlantısı seçildiğinde kullanmanız abfss gerekir, ancak abfss güvenli olmayan TLS bağlantıları için de çalışır. Daha fazla bilgi için bkz. Azure Blob Dosya Sistemi sürücüsü (ABFS).
  • Azure Synapse, nesne oluşturulduğunda dış veri kaynağının varlığını doğrulamaz. Doğrulamak için dış veri kaynağını kullanarak bir dış tablo oluşturun.
  • Tutarlı sorgu semantiği sağlamak için Hadoop sorgularken tüm tablolar için aynı dış veri kaynağını kullanın.
  • https: ön ek, yolda alt klasör kullanmanızı sağlar. https tüm veri erişim yöntemlerinde kullanılamaz.
  • wasbs güvenli bir TLS bağlantısı kullanılarak veri gönderileceği için önerilir.
  • Hiyerarşik Ad Alanları, eski wasb:// arabirimi kullanarak verilere erişirken Azure V2 Depolama Hesapları ile desteklenmez, ancak kullanmak wasbs:// Hiyerarşik Ad Alanlarını destekler.

CREDENTIAL = credential_name

Opsiyonel. Dış veri kaynağında kimlik doğrulaması için veritabanı kapsamlı kimlik bilgilerini belirtir. Kimlik bilgisi olmayan dış veri kaynağı, azure depolamadaki dosyalara erişmek için genel depolama hesabına erişebilir veya çağıranın Microsoft Entra kimliğini kullanabilir.

Kimlik bilgisi oluştururken ek notlar ve yönergeler:

  • Azure Depolama veya Azure Data Lake Store (ADLS) 2. Nesil'den Azure Synapse Analytics'e veri yüklemek için bir Azure Depolama Anahtarı kullanın.
  • CREDENTIAL yalnızca verilerin güvenliği sağlanmışsa gereklidir. CREDENTIAL anonim erişime izin veren veri kümeleri için gerekli değildir.

Veritabanı kapsamlı kimlik bilgileri oluşturmak için bkz. CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

  • Sunucusuz SQL havuzunda, veritabanı kapsamlı kimlik bilgileri çalışma alanı yönetilen kimliği, hizmet asıl adı veya paylaşılan erişim imzası (SAS) belirteci belirtebilir. Microsoft Entra geçişi olarak da bilinen bir kullanıcı kimliği aracılığıyla erişim, genel kullanıma açık depolamaya anonim erişim olduğu gibi, veritabanı kapsamlı kimlik bilgisinde de mümkündür. Daha fazla bilgi için bkz . Desteklenen depolama yetkilendirme türleri.

  • Ayrılmış SQL havuzunda, veritabanı kapsamlı kimlik bilgileri paylaşılan erişim imzası (SAS) belirteci, depolama erişim anahtarı, hizmet sorumlusu, çalışma alanı yönetilen kimliği veya Microsoft Entra geçişi belirtebilir.

TÜR = HADOOP

İsteğe bağlı, önerilmez.

TYPE'i yalnızca ayrılmış SQL havuzlarıyla belirtebilirsiniz. HADOOP belirtildiğinde izin verilen tek değerdir. ile TYPE=HADOOP dış veri kaynakları yalnızca ayrılmış SQL havuzlarında kullanılabilir.

Eski uygulamalar için HADOOP kullanın, aksi takdirde daha yeni yerel veri erişimini kullanmanız önerilir. Daha yeni yerel veri erişimini kullanmak için TÜR bağımsız değişkenini belirtmeyin.

Azure Depolama'dan veri yüklemek için kullanma TYPE = HADOOP örneği için bkz. Hizmet sorumlusu kullanarak Azure Data Lake Store 1. Veya 2. Nesil'e başvurmak için dış veri kaynağı oluşturma.

Azure Synapse Analytics'teki sunucusuz ve ayrılmış SQL havuzları, veri sanallaştırma için farklı kod temelleri kullanır. Sunucusuz SQL havuzları yerel bir veri sanallaştırma teknolojisini destekler. Ayrılmış SQL havuzları hem yerel hem de PolyBase veri sanallaştırmayı destekler. PolyBase veri sanallaştırması, EXTERNAL DATA SOURCE TYPE=HADOOPile oluşturulduğunda kullanılır.

İzinler

Veritabanı üzerinde CONTROL izni gereklidir.

Kilitleme

Nesne üzerinde EXTERNAL DATA SOURCE paylaşılan bir kilit alır.

Güvenlik

Dış veri kaynaklarının çoğu, ara sunucu hesabı oluşturmak için veritabanı kapsamlı bir kimlik bilgisi kullanarak ara sunucu tabanlı kimlik doğrulamasını destekler.

Paylaşılan Erişim İmzası (SAS) anahtarları, Azure Data Lake Store 2. Nesil Depolama Hesaplarında kimlik doğrulaması için desteklenir. Paylaşılan Erişim İmzası kullanarak kimlik doğrulaması yapmak isteyen müşterilerin, gizli dizi olarak sas belirtecinin girilip girildiği IDENTITY = "Shared Access Signature" veritabanı kapsamlı bir kimlik bilgisi oluşturması gerekir.

Burada veritabanı kapsamlı bir kimlik bilgisi IDENTITY = "Shared Access Signature" oluşturursanız ve gizli dizi olarak bir depolama anahtarı değeri kullanırsanız aşağıdaki hata iletisini alırsınız:

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

Örnekler

A. wasb:// arabirimini kullanarak Azure Depolama'daki verilere erişmek için dış veri kaynağı oluşturma

Bu örnekte dış veri kaynağı adlı logsbir Azure Depolama hesabı V2'dir. Depolama kapsayıcısı olarak adlandırılır daily. Azure Depolama dış veri kaynağı yalnızca veri aktarımı içindir. Koşul aşağı göndermeyi desteklemez. Arabirim aracılığıyla wasb:// verilere erişirken hiyerarşik ad alanları desteklenmez. veya wasbaracılığıyla wasbs Azure Depolama'ya bağlanırken kimlik doğrulaması, paylaşılan erişim imzası (SAS) ile değil depolama hesabı anahtarıyla yapılmalıdır.

Bu örnekte eski HADOOP Java tabanlı erişim yöntemi kullanılır. Aşağıdaki örnekte, Azure Depolama'da kimlik doğrulaması için veritabanı kapsamlı kimlik bilgilerinin nasıl oluşturulacağı gösterilmektedir. Veritabanı kimlik bilgisi gizli dizisinde Azure Depolama hesabı anahtarını belirtin. Azure depolamada kimlik doğrulaması sırasında kullanılmadığından veritabanı kapsamlı kimlik bilgileri kimliğindeki herhangi bir dizeyi belirtebilirsiniz.

-- 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. Hizmet sorumlusu kullanarak Azure Data Lake Store 1. veya 2. Nesil'e başvurmak için dış veri kaynağı oluşturma

Azure Data Lake Store bağlantısı ADLS URI'nizi ve Microsoft Entra uygulamanızın hizmet sorumlusunu temel alabilir. Bu uygulamayı oluşturmaya yönelik belgeler , Microsoft Entra Id kullanılarak Data lake store kimlik doğrulaması bölümünde bulunabilir.

-- 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. Depolama hesabı anahtarını kullanarak Azure Data Lake Store 2. Nesil'e başvurmak için dış veri kaynağı oluşturma

-- 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. abfs:// kullanarak Azure Data Lake Store 2. Nesil'e dış veri kaynağı oluşturma

Yönetilen Kimlik mekanizmasıyla Azure Data Lake Store 2. Nesil hesabına bağlanırken GİzLİ değerini belirtmeniz gerekmez.

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

* Analiz
Platform Sistemi (PDW) *
 

 

Genel Bakış: Analiz Platformu Sistemi

Şunlar için geçerlidir: Analiz Platformu Sistemi (PDW)

PolyBase sorguları için bir dış veri kaynağı oluşturur. Dış veri kaynakları, bağlantı kurmak ve şu kullanım örneğini desteklemek için kullanılır: SQL Server'da PolyBase ile Veri sanallaştırma kullanılarak veri sanallaştırma ve veri yükü.

Transact-SQL söz dizimi kuralları

Sözdizimi

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

Tartışmalar

data_source_name

Veri kaynağı için kullanıcı tanımlı adı belirtir. Ad, Analiz Platformu Sistemi'ndeki (PDW) sunucu içinde benzersiz olmalıdır.

LOCATION = '<prefix>://<path[:p ort]>'

Bağlantı protokolunu ve dış veri kaynağının yolunu sağlar.

Dış Veri Kaynağı Bağlayıcı konumu ön eki Konum yolu
Cloudera CDH veya Hortonworks HDP hdfs <Namenode>[:port]
Azure Depolama Hesabı wasb[s] <container>@<storage_account>.blob.core.windows.net

Konum yolu:

  • <Namenode> = Hadoop kümesindeki öğesinin makine adı, ad hizmeti URI'si Namenode veya IP adresi. PolyBase, Hadoop kümesi tarafından kullanılan DNS adlarını çözümlemelidir.
  • port = Dış veri kaynağının dinlediği bağlantı noktası. Hadoop'ta bağlantı noktası yapılandırma parametresi kullanılarak fs.defaultFS bulunabilir. Varsayılan değer 8020'dir.
  • <container> = verileri tutan depolama hesabının kapsayıcısı. Kök kapsayıcılar salt okunur durumdadır, veriler kapsayıcıya geri yazılamaz.
  • <storage_account> = Azure kaynağının depolama hesabı adı.

Konumu ayarlarken ek notlar ve yönergeler:

  • PDW altyapısı, nesne oluşturulduğunda dış veri kaynağının varlığını doğrulamaz. Doğrulamak için dış veri kaynağını kullanarak bir dış tablo oluşturun.
  • Tutarlı sorgu semantiği sağlamak için Hadoop sorgularken tüm tablolar için aynı dış veri kaynağını kullanın.
  • wasbs güvenli bir TLS bağlantısı kullanılarak veri gönderileceği için önerilir.
  • Hiyerarşik Ad Alanları, wasb:// üzerinden Azure Depolama hesaplarıyla kullanıldığında desteklenmez.
  • Hadoop yük devretmesi sırasında PolyBase sorgularının başarılı olmasını sağlamak için Hadoop Namenode kümesinin Namenode sanal IP adresini kullanmayı göz önünde bulundurun. Aksi takdirde ALTER EXTERNAL DATA SOURCE komutunu yürüterek yeni konumu işaret edin.

CREDENTIAL = credential_name

Dış veri kaynağında kimlik doğrulaması için veritabanı kapsamlı bir kimlik bilgisi belirtir.

Kimlik bilgisi oluştururken ek notlar ve yönergeler:

  • Azure Depolama'dan Azure Synapse veya PDW'ye veri yüklemek için bir Azure Depolama Anahtarı kullanın.
  • CREDENTIAL yalnızca verilerin güvenliği sağlanmışsa gereklidir. CREDENTIAL anonim erişime izin veren veri kümeleri için gerekli değildir.

TYPE = * [ HADOOP ] *

Yapılandırılan dış veri kaynağının türünü belirtir. Bu parametre her zaman gerekli değildir.

  • Dış veri kaynağı Cloudera CDH, Hortonworks HDP veya Azure Depolama olduğunda HADOOP kullanın.

Azure Depolama'dan veri yüklemek için kullanma TYPE = HADOOP örneği için bkz. Hadoop'a başvurmak için dış veri kaynağı oluşturma.

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]'

SQL Server 2019'da (15.x), Bir Azure Depolama hesabı olan Cloudera CDH, Hortonworks HDP'ye bağlanmadığınız sürece RESOURCE_MANAGER_LOCATION belirtmeyin.

Yalnızca Cloudera CDH, Hortonworks HDP veya bir Azure Depolama hesabına bağlanırken bu isteğe bağlı değeri yapılandırın. Desteklenen Hadoop sürümlerinin tam listesi için bkz. PolyBase bağlantı yapılandırması (Transact-SQL).

RESOURCE_MANAGER_LOCATION tanımlandığında, sorgu iyileştirici performansı geliştirmek için maliyet tabanlı bir karar verir. MapReduce işi, hesaplamayı Hadoop'a göndermek için kullanılabilir. değerinin RESOURCE_MANAGER_LOCATION belirtilmesi Hadoop ile SQL arasında aktarılan veri hacmini önemli ölçüde azaltabilir ve bu da sorgu performansının artmasına neden olabilir.

Resource Manager belirtilmezse, PolyBase sorguları için Hadoop'a işlem gönderme devre dışı bırakılır. Aşağı itme özelliğinin etkinleştirildiği Hadoop'a başvurmak için dış veri kaynağı oluşturma , somut bir örnek ve daha fazla rehberlik sağlar.

Dış veri kaynağını oluşturduğunuzda RESOURCE_MANAGER_LOCATION değeri doğrulanmaz. Yanlış bir değer girilmesi, sağlanan değer çözümlenemediğinden, aşağı gönderme denendiği her durumda yürütme sırasında sorgu hatasına neden olabilir.

PolyBase'in hadoop dış veri kaynağıyla düzgün çalışması için aşağıdaki Hadoop kümesi bileşenlerinin bağlantı noktalarının açık olması gerekir:

  • HDFS bağlantı noktaları
    • Ad Düğümü
    • Veri düğümü
  • Resource Manager
    • İş gönderimi
  • İş geçmişi

Bağlantı noktası belirtilmezse, 'hadoop bağlantısı' yapılandırması için geçerli ayar kullanılarak varsayılan değer seçilir.

Hadoop Bağlantısı Varsayılan Resource Manager Bağlantı Noktası
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050

Aşağıdaki tabloda bu bileşenler için varsayılan bağlantı noktaları gösterilmektedir. Hadoop sürüm bağımlılığının yanı sıra varsayılan bağlantı noktası atamasını kullanmayan özel yapılandırma olasılığı da vardır.

Hadoop küme bileşeni Varsayılan Bağlantı Noktası
NameNode 8020
DataNode (Veri aktarımı, ayrıcalıksız IPC bağlantı noktası) 50010
DataNode (Veri aktarımı, ayrıcalık IPC bağlantı noktası) 1019
Resource Manager İş Gönderimi (Hortonworks 1.3) 50300
Resource Manager İş Gönderimi (Cloudera 4.3) 8021
Resource Manager İş Gönderimi (Windows'ta Hortonworks 2.0, Linux'ta Cloudera 5.x) 8032
Resource Manager İş Gönderimi (Linux üzerinde Hortonworks 2.x, 3.0, Windows üzerinde Hortonworks 2.1-3) 8050
Resource Manager İş Geçmişi 10020

İzinler

CONTROL Analiz Platformu Sistemi'ndeki (PDW) veritabanında izin gerektirir.

Uyarı

PDW'nin önceki sürümlerinde dış veri kaynağı için gerekli ALTER ANY EXTERNAL DATA SOURCE izinleri oluşturun.

Kilitleme

Nesne üzerinde EXTERNAL DATA SOURCE paylaşılan bir kilit alır.

Güvenlik

PolyBase, dış veri kaynaklarının çoğu için ara sunucu tabanlı kimlik doğrulamasını destekler. Proxy hesabını oluşturmak için veritabanı kapsamlı bir kimlik bilgisi oluşturun.

Türü HADOOP olan bir SAS belirteci desteklenmiyor. Bunun yerine yalnızca depolama hesabı erişim anahtarı kullanıldığında tür = BLOB_STORAGE ile desteklenir. Tür HADOOP ve SAS kimlik bilgilerine sahip bir dış veri kaynağı oluşturma girişimi aşağıdaki hatayla başarısız oluyor:

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.'

Örnekler

A. Hadoop'a başvurmak için dış veri kaynağı oluşturma

Hortonworks HDP veya Cloudera CDH'nize başvurmak üzere bir dış veri kaynağı oluşturmak için Hadoop Namenode ve bağlantı noktasının makine adını veya IP adresini belirtin.

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

B. Aşağı gönderme etkin hadoop'a başvurmak için dış veri kaynağı oluşturma

RESOURCE_MANAGER_LOCATION PolyBase sorguları için Hadoop'a aşağı itme hesaplamasını etkinleştirme seçeneğini belirtin. Etkinleştirildikten sonra PolyBase, sorgu hesaplamasının Hadoop'a gönderilip gönderilmeyeceğini belirlemek için maliyet tabanlı bir karar verir.

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

C. Kerberos güvenli Hadoop'a başvurmak için dış veri kaynağı oluşturma

Hadoop kümesinin Kerberos ile güvenli olup olmadığını doğrulamak için Hadoop core-site.xmliçindeki özelliğinin hadoop.security.authentication değerini denetleyin. Kerberos güvenli Hadoop kümesine başvurmak için, Kerberos kullanıcı adınızı ve parolanızı içeren veritabanı kapsamlı bir kimlik bilgisi belirtmeniz gerekir. Veritabanı ana anahtarı, veritabanı kapsamlı kimlik bilgisi gizli dizisini şifrelemek için kullanılır.

-- 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. wasb:// arabirimini kullanarak Azure Depolama'daki verilere erişmek için dış veri kaynağı oluşturma

Bu örnekte dış veri kaynağı adlı logsbir Azure V2 Depolama hesabıdır. Depolama kapsayıcısı olarak adlandırılır daily. Azure Depolama dış veri kaynağı yalnızca veri aktarımı içindir. Koşul aşağı göndermeyi desteklemez. Arabirim aracılığıyla wasb:// verilere erişirken hiyerarşik ad alanları desteklenmez. veya wasbaracılığıyla wasbs Azure Depolama'ya bağlanırken kimlik doğrulaması, paylaşılan erişim imzası (SAS) ile değil depolama hesabı anahtarıyla yapılmalıdır.

Bu örnekte, Azure depolamada kimlik doğrulaması için veritabanı kapsamlı kimlik bilgilerinin nasıl oluşturulacağı gösterilmektedir. Veritabanı kimlik bilgisi gizli dizisinde Azure depolama hesabı anahtarını belirtin. Azure depolamada kimlik doğrulaması sırasında kullanılmadığından veritabanı kapsamlı kimlik bilgileri kimliğindeki herhangi bir dizeyi belirtebilirsiniz.

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

* SQL Yönetilen Örneği *  

Genel Bakış: Azure SQL Yönetilen Örneği

Şunlar için geçerlidir: Azure SQL Yönetilen Örneği

Azure SQL Yönetilen Örneği'nde bir dış veri kaynağı oluşturur. Tam bilgi için bkz. Azure SQL Yönetilen Örneği ile veri sanallaştırma.

Azure SQL Yönetilen Örneği'nde veri sanallaştırma, OPENROWSET veya CREATE EXTERNAL TABLE aracılığıyla çeşitli dosya biçimlerinde dış verilere erişim sağlar.

Transact-SQL söz dizimi kuralları

Sözdizimi

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

Tartışmalar

data_source_name

Veri kaynağı için kullanıcı tanımlı adı belirtir. Adın veritabanında benzersiz olması gerekir.

LOCATION = '<prefix>://<path[:p ort]>'

Bağlantı protokolunu ve dış veri kaynağının yolunu sağlar.

Dış Veri Kaynağı Konum ön eki Konum yolu
Azure Blob Saklama Alanı abs abs://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name>
Azure Data Lake Service 2. Nesil adls adls://<container>@<storage_account>.dfs.core.windows.net/<path>/<file_name>

Veritabanı Altyapısı, nesne oluşturulduğunda dış veri kaynağının varlığını doğrulamaz. Doğrulamak için dış veri kaynağını kullanarak bir dış tablo oluşturun.

Bir dış veri kaynağını toplu işlemler için yapılandırırken URL'nin / sonuna sondaki LOCATION, dosya adı veya paylaşılan erişim imzası parametrelerini eklemeyin.

CREDENTIAL = credential_name

Dış veri kaynağında kimlik doğrulaması için veritabanı kapsamlı bir kimlik bilgisi belirtir.

Kimlik bilgisi oluştururken ek notlar ve yönergeler:

  • Azure Depolama'dan Azure SQL Yönetilen Örneği'ne veri yüklemek için Paylaşılan Erişim İmzası (SAS belirteci) kullanın.
  • CREDENTIAL yalnızca verilerin güvenliği sağlanmışsa gereklidir. CREDENTIAL anonim erişime izin veren veri kümeleri için gerekli değildir.
  • Bir kimlik bilgisi gerekiyorsa, kimlik bilgisi veya kimlik olarak oluşturulmalıdır Managed IdentitySHARED ACCESS SIGNATURE . Veritabanı kapsamlı kimlik bilgileri oluşturmak için bkz. CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

Veritabanı kapsamlı kimlik bilgileri için yönetilen hizmet kimliğini kullanmak için:

  • Belirtmek WITH IDENTITY = 'Managed Identity'

  • Bu amaçla kullanılacaksa etkinleştirilmesi gereken Azure SQL Yönetilen Örneği'nin sistem tarafından atanan yönetilen hizmet kimliğini kullanın.

    • Okuyucu Azure RBAC rolünü, gerekli Azure Blob Depolama kapsayıcılarına Azure SQL Yönetilen Örneğinin sistem tarafından atanan yönetilen hizmet kimliğine verin. Örneğin, Azure portalı aracılığıyla bkz. Azure portalını kullanarak Azure rolleri atama.

Veritabanı kapsamlı kimlik bilgileri için paylaşılan erişim imzası (SAS) oluşturmak için:

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

  • Paylaşılan erişim imzası oluşturmanın birden çok yolu vardır:

  • SAS belirteci aşağıdaki gibi yapılandırılmalıdır:

    • SAS belirteci oluşturulduğunda belirtecin başında bir soru işareti ('?') bulunur. GİzLİ olarak yapılandırıldığında baştakileri ? hariç tutun.
    • Geçerli bir süre sonu dönemi kullanın (tüm tarihler UTC saatindedir).
  • Yüklenmesi gereken dosya üzerinde en azından okuma izni verin (örneğin srt=o&sp=r). Farklı kullanım örnekleri için birden çok paylaşılan erişim imzası oluşturulabilir. İzinler aşağıdaki gibi verilmelidir:

    Eylem İzin
    Dosyadan veri okuma Okumak
    Birden çok dosyadan ve alt klasörden veri okuma Okuma ve Listeleme
    Dış Tablo Oluştur'u Seç Olarak Kullanma (CETAS) Okuma, Oluşturma ve Yazma

İzinler

CONTROL Azure SQL Yönetilen Örneği'ndeki veritabanında izin gerektirir.

Kilitleme

Nesne üzerinde EXTERNAL DATA SOURCE paylaşılan bir kilit alır.

Örnekler

Daha fazla örnek için bkz. Azure SQL Yönetilen Örneği ile veri sanallaştırma.

A. OPENROWSET veya dış tablo ile Azure SQL Yönetilen Örneği'nden dış verileri sorgulama

Daha fazla örnek için bkz . CREATE EXTERNAL DATA SOURCE (Transact-SQL) veya bkz. Azure SQL Yönetilen Örneği ile veri sanallaştırma.

  1. Yoksa veritabanı ana anahtarını oluşturun.

    -- Optional: Create MASTER KEY if it doesn't exist in the database:
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong Password>'
    GO
    
  2. SAS belirteci kullanarak veritabanı kapsamlı kimlik bilgilerini oluşturun. Yönetilen kimlik de kullanabilirsiniz.

    CREATE DATABASE SCOPED CREDENTIAL MyCredential
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    SECRET = '<KEY>' ; --Removing leading '?'
    GO
    
  3. Kimlik bilgilerini kullanarak dış veri kaynağını oluşturun.

    --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. OpenROWSET T-SQL söz dizimini kullanarak dış veri kaynağındaki sorgu parquet veri dosyası, şemayı bilmeden verileri hızla keşfetmek için şema çıkarımına dayanır.

    --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. İsterseniz, yürütme maliyetini sorgulayan şema çıkarımına güvenmek yerine, OPENROWSET with yan tümcesini kullanarak verileri sorgulayabilirsiniz. CSV'de şema çıkarımı desteklenmez.

    --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. Verileri yerel tablo olarak sorgulamak için bir EXTERNAL FILE FORMAT ve external table da oluşturabilirsiniz.

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