Aracılığıyla paylaş


PolyBase ile verileri bağlama, sorgulama ve dışarı aktarma

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümler Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

Veri sanallaştırma , dış veriler üzerinde Transact-SQL (T-SQL) sorguları veritabanınıza yüklemeden çalıştırmanıza olanak tanır. PolyBase, SQL Server ve Azure SQL genelinde veri sanallaştırması uygulayan Veritabanı Altyapısı özelliğidir. Dış veri kaynağı, isteğe bağlı dosya biçimi ve dış tablo tanımlayıp dış tabloyu diğer tablolarda SELECT olduğu gibi sorgularsınız.

Bu kılavuz size yardımcı olur:

  • SQL platformunuzun ve sürüm desteğinizin hangi PolyBase özelliklerini anlayın.
  • OPENROWSET, harici tablolar ve BULK INSERT arasında seçim yaparak verileri sorgulayabilir veya içe aktarabilirsiniz.
  • Yaygın senaryolar için adım adım bağlantıları izleyin.
  • Üretim iş yükleri için performans, sorun giderme ve en iyi yöntemleri gözden geçirin.

Yaygın kullanım örnekleri

Aşağıdaki tabloda olası kullanım senaryoları açıklanmaktadır.

Scenario Kullan
Geçici dosya keşfi OPENROWSET(BULK ...)
BI/raporlama için yeniden kullanılabilir dosya sorgulama Dosyalar üzerinde oluşturulmuş dış tablolar
Veritabanları arası sorgulama (SQL Server, Oracle, Teradata, MongoDB, ODBC) Dış tabloları olan PolyBase bağlayıcıları
Sorgu sonuçlarını dosyalara aktarma CREATE EXTERNAL TABLE AS SELECT (CETAS)
Tablolara toplu veri yükleme BULK INSERTveya OPENROWSET(BULK ...)INSERT ... SELECT

Hangi özellikler nerede kullanılabilir?

Aşağıdaki tabloda, her SQL platformunda hangi temel PolyBase ve veri sanallaştırma özelliklerinin kullanılabilir olduğu gösterilmektedir. Ayrıntılı kılavuzları kullanmadan önce platformunuzda neler yapabileceğinizi belirlemek için bu tabloyu kullanın.

Özellik SQL Server 2019 SQL Server 2022 SQL Server 2025 Azure SQL Veritabanı Azure SQL Yönetilen Varlık Microsoft Fabric'da SQL veritabanı
Dış tablolar Evet Evet Evet Evet Evet Evet
OPENROWSET (BULK) Evet 1 Evet Evet Evet Evet Evet
CETAS (dışarı aktarma) Hayır Evet Evet Hayır Evet Hayır
CSV / sınırlandırılmış dosyalar Evet 2 Evet Evet Evet Evet Evet
Parquet dosyaları Hayır Evet Evet Evet Evet Evet
Delta Lake tabloları Hayır Evet Evet Hayır Hayır Hayır
Başka bir SQL Server'a bağlanma Evet Evet Evet Hayır Hayır Hayır
Azure SQL Veritabanı'na veya Azure SQL Yönetilen Örneği'ne bağlanma Evet 3 Evet 3 Evet 3 Hayır Hayır Hayır
Oracle'a bağlanma / Teradata / MongoDB Evet Evet Evet Hayır Hayır Hayır
Azure Blob Depolama'ya bağlanma Evet Evet Evet Evet Evet Hayır
ADLS 2. Nesil'e bağlanma Hayır Evet Evet Evet Evet Hayır
S3 uyumlu depolamaya bağlanma Hayır Evet Evet Hayır Hayır Hayır
OneLake'e Bağlan (Fabric) Hayır Hayır Hayır Hayır Hayır Evet
İtme hesaplaması Evet Evet Evet Hayır Hayır Hayır
Yönetilen kimlik doğrulaması Hayır Hayır Evet 4 Evet Evet Hayır

1 SQL Server 2019 (15.x), yerel ve ağ dosya yollarını destekler OPENROWSET(BULK...) . SQL Server 2022 (16.x) ve sonraki sürümlerinde, OPENROWSET(BULK...) , FORMAT = 'PARQUET've FORMAT = DELTAile FORMAT = 'CSV'bulut depolamadan okumayı da destekler.

2 CSV desteği, SQL Server 2019 (15.x) için Hadoop gerektiriyordu. SQL Server 2022 (16.x) ve sonraki sürümlerinde CSV, Hadoop olmadan yerel olarak desteklenir.

3 SQL Server bağlayıcısını (sqlserver://) kullanır. Veritabanı kapsamlı kimlik bilgisi, Azure SQL uç noktasını hedefler; başka bir SQL Server'a bağlanmakla aynı adımlar.

4 Yönetilen Kimlik kimlik doğrulaması, Azure Blob Depolama (ABS) ve ADLS 2. Nesil'e bağlanmak için desteklenir. Şirket içi SQL Server için, Azure Arc özellikli SQL Server veya Azure VM'deki SQL Server gereklidir. Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği üzerinde yerel olarak kullanılabilir.

Uyarı

SQL Server 2025'te (17.x) başlayarak Azure Blob Depolama, ADLS 2. Nesil veya S3 uyumlu depolamada veri dosyalarını (CSV, Parquet ve Delta) sorgulamak yerel bir altyapı özelliğidir ve artık PolyBase hizmetlerinin yüklenmesini veya çalıştırılmasını gerektirmez. RDBMS bağlayıcıları (SQL Server, Oracle, Teradata, MongoDB, ODBC) hala PolyBase hizmetlerinin yüklenmesini ve çalıştırılmasını gerektirir. SQL Server 2025 (17.x), daha önce yalnızca Windows'da kullanılabilen bu bağlayıcılar için Linux desteği de ekler.

Dış verileri sorgulama

Belirli bir senaryoyu seçmeden önce dış verileri sorgulamanın üç yolunu anlayın:

Yaklaşım Sözdizimi Şu durumlarda kullanın: Kimlik Doğrulaması PolyBase gerekli
OLE DB geçici sorguları OPENROWSET(provider, connection, query) Kalıcı nesneleri olmayan hızlı bir tek seferlik sorgu istiyorsunuz veya Microsoft Entra Id kimlik doğrulamasına ihtiyacınız var SQL kimlik doğrulaması, Windows kimlik doğrulaması, Microsoft Entra Id (MSOLEDBSQL) Hayır
Geçici sorgular oluşturma OPENROWSET(BULK ...) Tablo oluşturmadan önce dosya verilerini hızla incelemek veya şemaları test etmek istiyorsunuz SAS belirteci, erişim anahtarı, Yönetilen Kimlik, Microsoft Entra Id Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği için Evet

SQL Server örnekleri için hayır
Kalıcı veri bağlayıcıları CREATE EXTERNAL TABLE, sqlserver://, oracle://, teradata:// vb. Üretim için tekrarlayan erişim, yönetim, istatistikler ve pushdown işlemi gerekir. Yalnızca SQL kimlik doğrulaması Evet

SQL Server 2019 (15.x) ve SQL Server 2022 'de (16.x) bulut dosyası erişimi için PolyBase hizmetleri gereklidir. SQL Server 2025 (17.x) ve sonraki sürümleri PolyBase içermeyen CSV, Parquet ve Delta için yerel desteğe sahiptir.

Karar kılavuzu

Scenario Tavsiye
Uzak SQL için Microsoft Entra Id kimlik doğrulamasına ihtiyacım var veya PolyBase hizmetlerinden kaçınmak istiyorum Kullan OPENROWSET(MSOLEDBSQL, ...) (geçici, kalıcı nesne yok)
Uzak veritabanları için kalıcı tablolara, istatistiklere veya pushdown hesaplamasına ihtiyacım var PolyBase bağlayıcıları (sqlserver://, oracle://, teradata://, mongodb://, odbc://) ile CREATE EXTERNAL TABLE kullanın. OPENROWSETbağlayıcıları desteklemez
Yeni bir dosya keşfediyorum veya şemayı test ediyorum Kullan OPENROWSET(BULK ...) (hızlı yineleme, kalıcı nesne yok)
Dosya verilerini dönüştürmelerle bir tabloya aktarıyorum. Şu kaynaktan kullanın INSERT ... SELECT : OPENROWSET(BULK ...)
Birçok kullanıcı veya uygulama için idareye veya paylaşılan erişime ihtiyacım var İzinlerin ve meta verilerin merkezi hale getirilebilmesi için kullanın CREATE EXTERNAL TABLE
Fabric'de SQL veritabanında çalışıyorum Özel OneLake sorguları veya dış tabloları yeniden kullanılabilir erişim için kullanın OPENROWSET(BULK ...), dış depolama için OneLake kısayollarını kullanın.

Senaryonuzu seçin

Üç yaklaşımı anladığınıza göre, özel kullanım örneğinizi uygulamak için aşağıdaki kılavuzlardan birini kullanın.

Sorgu dosyaları (Parquet, CSV veya Delta)

Verileriniz Azure Blob Depolama, ADLS 2. Nesil, S3 uyumlu depolama veya OneLake'deki Parquet, CSV veya Delta dosyalarındaysa şu kılavuzlardan birini izleyin:

Scenario Önerilen kılavuz Platformlar
Parquet veya CSV dosyasında hızlı geçici sorgu OPENROWSETkullanın. Dış tablo gerekmez SQL Server 2022 (16.x) ve sonraki sürümleri, Azure SQL Veritabanı, Azure SQL Yönetilen Örneği, Fabric'te SQL Veritabanı
Kalıcı şema ile Parquet dosyalarında yinelenen sorgular Parquet üzerinden dış tablo oluşturma SQL Server 2022 (16.x) ve sonraki sürümleri, Azure SQL Veritabanı, Azure SQL Yönetilen Örneği, Fabric'te SQL Veritabanı
Dış tabloyla CSV dosyalarını sorgulama Sınırlandırılmış metin için dosya biçiminde dış tablo oluşturma SQL Server 2019 (15.x) ve sonraki sürümleri, Azure SQL Veritabanı, Azure SQL Yönetilen Örneği, Dokuda SQL veritabanı
Delta Lake tablolarını sorgulama FILE_FORMAT = DeltaLakeFileFormat ile dış tablo oluşturun SQL Server 2022 (16.x) ve sonraki sürümleri
Sorgu sonuçlarını Parquet veya CSV dosyalarına (CETAS) dışarı aktarma CREATE EXTERNAL TABLE AS SELECT komutunu kullanma SQL Server 2022 (16.x) ve sonraki sürümleri, Azure SQL Managed Instance

Aşağıdaki adım adım öğreticilerden birini de izleyebilirsiniz:

Kılavuz Açıklama
SQL Server 2022'de PolyBase'i kullanmaya başlama Parquet ve CSV, dış tablolar ve klasör gezintisi ile OPENROWSET örtülür.
PolyBase ile S3 uyumlu nesne depolama alanında parquet dosyasını sanallaştırma SQL Server 2022 (16.x) ve sonraki sürümleri için öğretici.
POLYBase ile CSV dosyasını sanallaştırma SQL Server 2022 (16.x) ve sonraki sürümleri için öğretici.
PolyBase ile delta tablosunu sanallaştırma SQL Server 2022 (16.x) ve sonraki sürümleri için öğretici.
Azure SQL Veritabanı ile veri sanallaştırma (Önizleme) Parquet ve CSV için Azure SQL Veritabanı kılavuzu.
Azure SQL Yönetilen Örneği ile veri sanallaştırma Parquet, CSV ve CETAS için Azure SQL Yönetilen Örneği kılavuzu.
SQL veritabanında veri sanalizasyonu Fabric'te OneLake dosyaları için Fabric'te SQL veritabanı kılavuzu.

Başka bir SQL Server örneğine, Azure SQL Veritabanı'na veya SQL Yönetilen Örneği'ne bağlanma

SQL Server 2019 (15.x) ve sonraki sürümlerinde PolyBase, bağlı sunucuları kullanmadan başka bir SQL Server örneğindeki, Azure SQL Veritabanı'ndaki veya Azure SQL Yönetilen Örneği'ndeki tabloları sorgulayabilir.

Önemli

sqlserver:// Bağlayıcı, Microsoft Fabric'teki SQL veritabanında desteklenmez. PolyBase RDBMS bağlayıcıları CREATE DATABASE SCOPED CREDENTIAL üzerinden SQL kimlik doğrulaması kullanır ve Microsoft Entra Kimliği, Yönetilen Kimlik veya hizmet sorumlusu kimlik doğrulamasını desteklemez. Fabric'teki SQL veritabanı Microsoft Entra kimlik doğrulaması gerektirdiğinden PolyBase kullanarak bu veritabanına bağlanamazsınız.

Step Yapılması gerekenler
1. PolyBase'i yükleme Windows'a PolyBase yükleme veya Linux'ta PolyBase yükleme
2. Kimlik bilgisi oluşturma CREATE DATABASE SCOPED CREDENTIAL hedef oturum açma bilgileriyle
3. Dış veri kaynağı oluşturma CREATE EXTERNAL DATA SOURCE ... WITH (LOCATION = 'sqlserver://<server>')
4. Dış tablo oluşturma CREATE EXTERNAL TABLE ... WITH (LOCATION = '<db>.<schema>.<table>')
5. Sorgu SELECT * FROM <external_table>

Tavsiye

SQL Server bağlayıcısı (sqlserver://), Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği için de çalışır. Aynı adımları kullanın ve Azure SQL uç noktasına ayarlayın LOCATION (örneğin, sqlserver://myserver.database.windows.net).

Ayrıntılı bir kılavuz için bkz. SQL Server'da dış verilere erişmek için PolyBase'i yapılandırma.

Oracle, Teradata veya MongoDB'ye bağlanma

SQL Server 2019 (15.x) ve sonraki sürümleri PolyBase ODBC bağlayıcıları aracılığıyla Oracle, Teradata, MongoDB ve Cosmos DB'yi sorgulayabilir.

Veri kaynağı Guide Gereksinimler
Oracle Oracle'da dış verilere erişmek için PolyBase'i yapılandırma SQL Server 2019 (15.x) ve sonraki sürümleri, Oracle istemci sürücüleri
Teradata PolyBase'i Teradata'daki dış verilere erişecek şekilde yapılandırma SQL Server 2019 (15.x) ve sonraki sürümleri, Teradata ODBC sürücüsü
MongoDB / Cosmos DB PolyBase'i MongoDB'deki dış verilere erişecek şekilde yapılandırma SQL Server 2019 (15.x) ve sonraki sürümleri, MongoDB ODBC sürücüsü
Herhangi bir ODBC kaynağı POLYBase'i ODBC genel türleriyle dış verilere erişecek şekilde yapılandırma SQL Server 2019 (15.x) ve sonraki sürümleri (Windows)

(SQL Server 2025 (17.x) ile başlayan Linux)

Azure Blob Depolama'ya veya ADLS 2. Nesil'e bağlanma

SQL platformu Kimlik doğrulama seçenekleri Guide
SQL Server 2022 (16.x) ve sonraki sürümleri SAS belirteci, erişim anahtarı, Yönetilen Kimlik (SQL Server 2025 (17.x) ile başlayarak) PolyBase'i Azure Blob Depolama'daki dış verilere erişecek şekilde yapılandırma
SQL Server 2019 (15.x) Erişim anahtarı (Hadoop bağlayıcısı aracılığıyla) PolyBase'i Azure Blob Depolama'daki dış verilere erişecek şekilde yapılandırma
Azure SQL Veritabanı SAS belirteci, Yönetilen Kimlik, Microsoft Entra geçişi Azure SQL Veritabanı ile veri sanallaştırma (Önizleme)
Azure SQL Yönetilen Varlık SAS belirteci, Yönetilen Kimlik Azure SQL Yönetilen Örneği ile veri sanallaştırma

SQL Server 2022'de (16.x), URI ön ekleri değişti. SQL Server 2019 (15.x) veya önceki sürümlerden geçiş yaparken:

  • Azure Blob Depolama: wasb[s]://'i abs:// ile değiştir
  • ADLS 2. Nesil: Değiştir abfs[s]://adls://

Daha fazla bilgi için bkz. PolyBase'i Azure Blob Depolama'daki dış verilere erişecek şekilde yapılandırma.

S3 uyumlu nesne depolamaya bağlanma

SQL Server 2022 (16.x) ve sonraki sürümleri Amazon S3, MinIO ve Ceph gibi S3 uyumlu depolamayı destekler.

Daha fazla bilgi için bkz. PolyBase'i S3 uyumlu nesne depolama alanında dış verilere erişecek şekilde yapılandırma.

CREATE EXTERNAL TABLE AS SELECT (CETAS) ile verileri dışarı aktarma

CETAS sorgu sonuçlarını Azure Blob Depolama, ADLS 2. Nesil veya S3 uyumlu depolama alanındaki dış dosyalara (Parquet veya CSV) aktarır.

SQL platformu Destekleniyor Dışa Aktarım Biçimleri Notlar
SQL Server 2022 (16.x) ve sonraki sürümleri Evet Parquet, CSV Sunucu yapılandırması gerektirir: polybase dışarı aktarmaya izin ver
Azure SQL Yönetilen Varlık Evet Parquet, CSV Varsayılan olarak devre dışı
Azure SQL Veritabanı Hayır Hiçbiri Mevcut değil
Fabric'de SQL veritabanı Hayır Hiçbiri Mevcut değil

Transact-SQL başvurusu için bkz. CREATE EXTERNAL TABLE AS SELECT (CETAS).

Hızlı başlangıç örnekleri

Örnek 1: Parquet dosyasında geçici sorgu (OPENROWSET)

Dış tablo gerekmez. SQL Server 2022 (16.x) ve sonraki sürümleri, Azure SQL Veritabanı, Azure SQL Yönetilen Örneği ve Fabric'teki SQL veritabanı üzerinde çalışır.

SELECT TOP 10 *
FROM OPENROWSET (
    BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet',
    FORMAT = 'PARQUET'
) AS [result];

Örnek 2: Azure Blob Saklama'daki CSV üzerinde dış tablo

Bu örnek, PolyBase'i destekleyen tüm SQL platformlarında çalışır.

  • 1. Adım: Veritabanı ana anahtarı (DMK) oluşturma. SAS jetonunun gizli anahtarını depoladığı için bu yetkilendirme adımı gereklidir. Ancak, Yönetilen Kimlik veya Microsoft Entra kimlik doğrulaması kullanıyorsanız bu adımı kullanabilirsiniz.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong_password>';
    
  • 2. Adım: SAS belirteci ile kimlik bilgisi oluşturma. Baştaki ?öğesini atla.

    CREATE DATABASE SCOPED CREDENTIAL MyStorageCred
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
         SECRET = '<your_SAS_token>'; -- omit the leading '?'
    
  • 3. Adım: Dış veri kaynağı oluşturma.

    CREATE EXTERNAL DATA SOURCE MyAzureStorage
    WITH (
        LOCATION = 'abs://mycontainer@mystorageaccount.blob.core.windows.net',
        CREDENTIAL = MyStorageCred
    );
    
  • 4. Adım: CSV için bir dosya biçimi oluşturun.

    CREATE EXTERNAL FILE FORMAT CsvFormat
    WITH (
        FORMAT_TYPE = DELIMITEDTEXT,
        FORMAT_OPTIONS (
            FIELD_TERMINATOR = ',',
            STRING_DELIMITER = '"',
            FIRST_ROW = 2
        )
    );
    
  • 5. Adım: Dış tabloyu oluşturun.

    CREATE EXTERNAL TABLE dbo.SalesExternal
    (
        OrderId INT,
        OrderDate DATE,
        Amount DECIMAL (18, 2),
        Customer NVARCHAR (100)
    )
    WITH (
        DATA_SOURCE = MyAzureStorage,
        LOCATION = '/data/sales/',
        FILE_FORMAT = CsvFormat
    );
    
  • 6. Adım: Dış tabloyu sorgulama.

    SELECT *
    FROM dbo.SalesExternal
    WHERE OrderDate >= '2025-01-01';
    

Örnek 3: Başka bir SQL Server'da tablo sorgulama

Bu örnek SQL Server 2019 (15.x) ve sonraki sürümlerde çalışır.

  • 1. Adım: Veritabanı ana anahtarı oluşturma (kimlik bilgisi parola depoladığı için gereklidir).

    CREATE MASTER KEY ENCRYPTION
    BY PASSWORD = '<strong_password>';
    
  • 2. Adım: Uzak SQL Server örneği için bir kimlik bilgisi oluşturun.

    CREATE DATABASE SCOPED CREDENTIAL RemoteSqlCred
    WITH IDENTITY = 'remote_user',
         SECRET = '<password>';
    
  • 3. Adım: Dış veri kaynağını oluşturma.

    CREATE EXTERNAL DATA SOURCE RemoteSqlServer
    WITH (
        LOCATION = 'sqlserver://remote-server.contoso.com',
        PUSHDOWN = ON,
        CREDENTIAL = RemoteSqlCred
    );
    
  • 4. Adım: Dış tabloyu oluşturma (içinde LOCATIONüç bölümlü ad).

    CREATE EXTERNAL TABLE dbo.RemoteCustomers
    (
        CustomerId INT,
        CustomerName NVARCHAR (200)
            COLLATE SQL_Latin1_General_CP1_CI_AS
    )
    WITH (
        DATA_SOURCE = RemoteSqlServer,
        LOCATION = 'SalesDB.dbo.Customers'
    );
    
  • 5. Adım: Sunucular arasında sorgulama.

    SELECT c.CustomerName,
           s.Amount
    FROM dbo.RemoteCustomers AS c
         INNER JOIN dbo.LocalSales AS s
             ON c.CustomerId = s.CustomerId;
    

Örnek 4: CeTAS ile sonuçları Parquet'e dışarı aktarma

SQL Server 2022 (16.x) ve sonraki sürümleri olan Azure SQL Yönetilen Örneği üzerinde çalışır.

  • 1. Adım: CETAS'ı etkinleştirin (yalnızca SQL Server).

    EXECUTE sp_configure 'allow polybase export', 1;
    RECONFIGURE;
    
  • 2. Adım: Kimlik bilgisi ve veri kaynağı oluşturma (önceki örneklerden yeniden kullanma).

  • 3. Adım: Parquet dışarı aktarma için bir dosya biçimi oluşturun.

    CREATE EXTERNAL FILE FORMAT ParquetFormat
    WITH (
        FORMAT_TYPE = PARQUET
    );
    
  • 4. Adım: Sorgu sonuçlarını dışarı aktarma.

    CREATE EXTERNAL TABLE dbo.Sales2025Export
    WITH (
        DATA_SOURCE = MyAzureStorage,
        LOCATION = '/exports/sales_2025.parquet',
        FILE_FORMAT = ParquetFormat
    ) AS
    SELECT *
    FROM Sales.Orders
    WHERE OrderDate >= '2025-01-01';
    

PolyBase için T-SQL yapı taşları

Herhangi bir senaryoyu uygulamadan önce PolyBase'in kullandığı temel T-SQL nesnelerini ve bunların nasıl bir araya geldiğini anlayın:

PolyBase Transact-SQL nesnelerini ve ilişkilerini gösteren diyagram.

Kimlik doğrulamasından (veritabanı ana anahtarı, kimlik bilgileri) veri kaynaklarına ve dosya biçimlerinden sorgu yöntemlerine (Dış Tablo, OPENROWSET, BULK INSERT, CETAS) kadar PolyBase T-SQL nesnelerini ve bunların ilişkilerini gösteren diyagram.

Bu T-SQL deyimleri hakkında bilgi için bkz:

Tüm nesneler için tam Transact-SQL başvuru rehberi için PolyBase Transact-SQL başvurusu kısmına bakın.

Önemli

Dış dosya biçiminiz için veri türü eşlemesini denetleyin. kullanarak OPENROWSETbir dış dosya biçimi oluşturduğunuzda veya kullanarak dosyaları sorguladığınızda PolyBase, kaynak veri türlerini (Parquet, CSV, Delta, Oracle, Teradata, MongoDB) SQL Server veri türlerine otomatik olarak eşler. Tip uyumsuzlukları sessiz veri kesilmesi, hassasiyet kaybı veya sorgu hatalarına neden olabilir. Örneğin, bir Parquet DECIMAL(38,18) ile DECIMAL(18,0) eşler. Dış tablo sütunlarını veya yan WITH tümcesini tanımlamadan önce eşleme tablolarını gözden geçirin. Başvuru kaynağının tamamı için bkz. PolyBase ile tür eşlemesi.

CREATE MASTER KEY ne zaman gereklidir?

Veritabanı ana anahtarı (DMK) CREATE MASTER KEY söz dizimi kullanılarak oluşturulur. DMK, veritabanı kapsamlı kimlik bilgileri içinde depolanan gizli bilgileri şifreleme işlemi uygular. Kimlik bilgisi, gizli bir dizi değeri, yani bir parola, belirteç veya erişim anahtarı içerdiğinde gereklidir.

  • DMK gereklidir (kimlik doğrulama bilgisi bir gizli öğe depolar):

    Doğrulama türü IDENTITY değer Gizli bilgi var DMK
    SAS belirteci 'SHARED ACCESS SIGNATURE' Evet Zorunlu
    S3 erişim anahtarı 'S3 ACCESS KEY' Evet Zorunlu
    SQL oturum açma / temel kimlik doğrulaması '<username>' Evet Zorunlu
    Depolama hesabı erişim anahtarı '<storage_account_name>' Evet Zorunlu
  • DMK gerekli değildir (gizli bilgi saklanmaz)

    Doğrulama türü IDENTITY değer Gizli bilgi var DMK
    Yönetimli Kimlik 'Managed Identity' Hayır Gerekli değil
    Microsoft Entra Kimliği 'User Identity' veya 'Managed Identity' Hayır Gerekli değil

Tavsiye

İfadenizde CREATE DATABASE SCOPED CREDENTIAL gizlilik yoksa DMK'ye ihtiyacınız yoktur. Yönetilen Kimlik ve Microsoft Entra ID kimlik doğrulaması, güveni platforma devreder. Veritabanı parolaları veya belirteçleri depolamaz.

Örnekler:

Bu örnek sorguda DMK gereklidir (Kimlik bilgisi bir SAS belirtecini depolar).

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

CREATE DATABASE SCOPED CREDENTIAL SasCred
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
     SECRET = '<your_SAS_token>';

Bu örnek sorguda DMK gerekli değildir (Yönetilen Kimlik, gizli yok).

CREATE DATABASE SCOPED CREDENTIAL ManagedIdentityCred
WITH IDENTITY = 'Managed Identity';

Bu örnek sorguda DMK gerekli değildir (Microsoft Entra geçiş bağlantısı, gizli anahtar yoktur).

CREATE DATABASE SCOPED CREDENTIAL EntraIdCred
WITH IDENTITY = 'User Identity';

OPENROWSET ve dış tablolar ile uzaktan veri erişimi

SQL Server, uzak verileri sorgulamak için üç farklı yaklaşım sunar. Söz dizimi, kimlik doğrulaması ve mimari farklarını anladığınızda doğru yaklaşımı seçebilirsiniz.

Yaklaşım Sözdizimi Bağlanacak yer Kimlik Doğrulaması PolyBase hizmetleri Platformlar
OLE DB sorguları OPENROWSET(provider, connection, query) MSOLEDBSQL, SQLOLEDB veya diğer sağlayıcılar aracılığıyla herhangi bir OLE DB kaynağı SQL kimlik doğrulaması, Windows kimlik doğrulaması, Microsoft Entra Id (MSOLEDBSQL) Hayır SQL Server (desteklenen tüm sürümler)
Dosya sorguları OPENROWSET(BULK ...) Yerel disk, ağ veya bulut üzerindeki dosyalar (Azure Blob, ADLS, S3, OneLake) SAS belirteci, erişim anahtarı, Yönetilen Kimlik, Microsoft Entra Id Bulut için evet*; Yerel için hayır SQL Server 2005; SQL Server 2022 (16.x) ve sonraki sürümleri (bulut); Azure SQL
PolyBase bağlayıcıları CREATE EXTERNAL TABLE kullanarak CREATE EXTERNAL DATA SOURCE, sqlserver://, oracle://, teradata://, mongodb://, odbc:// Uzak SQL Server, Oracle, Teradata, MongoDB, ODBC kaynakları Yalnızca SQL kimlik doğrulaması Evet SQL Server 2019 (15.x) ve sonraki sürümleri (Windows); SQL Server 2025 (17.x) ve sonraki sürümleri (Linux)

SQL Server 2019 (15.x) ve SQL Server 2022 'de (16.x) bulut dosyası erişimi için PolyBase hizmetleri gereklidir. SQL Server 2025 (17.x) ve sonraki sürümleri yerel bulut dosyası desteğine sahiptir ve artık CSV, Parquet veya Delta için PolyBase gerektirmez.

Her yaklaşımın ne zaman kullanılacağı

Ole DB OPENROWSET'i aşağıdakiler için kullanın:

  • Kalıcı nesneler oluşturmadan hızlı, tek seferlik geçici sorgular
  • Microsoft Entra ID veya Yönetilen Kimlik kimlik doğrulaması (MSOLEDBSQL aracılığıyla)
  • PolyBase hizmet bağımlılıklarından kaçınma
  • OLE DB sağlayıcısıyla herhangi bir veri kaynağına bağlanma

OPENROWSET(BULK) işlevini kullanın:

  • Geçici dosya keşfi ve şema bulma
  • Tablo tanımına işlemeden önce hızlı dönüştürmeler ve önizlemeler
  • Esnek sütun dönüştürmeleri doğrudan (dönüştürme, filtreleme, hesaplanan sütunlar)
  • Sık değişmeyen ve kalıcı meta verilere ihtiyaç duymayan veriler

Aşağıdakiler için CREATE EXTERNAL TABLE ile PolyBase bağlayıcılarını kullanın:

  • Birden çok kullanıcı veya uygulama tarafından erişilen kalıcı, yeniden kullanılabilir tablo tanımları
  • İstatistik ve sorgu planı iyileştirmesi gerektiren üretim iş yükleri
  • Uzaktaki kaynaklara işlem yükü aktarma (Oracle, SQL Server vb.'ye filtreleri aktararak)
  • Paylaşılan idare ve güvenlik (oluşturulduktan sonra kullanıcıların yalnızca izne ihtiyacı vardır SELECT )
  • Uzak kaynakta SQL kimlik doğrulaması kullanılabilir olduğunda

OPENROWSET (OLE DB) - geçici uzak sorgular (PolyBase hizmetleri gerekmez)

OLE DB biçimi OPENROWSET bir OLE DB sağlayıcısı aracılığıyla uzak bir veri kaynağına bağlanır, doğrudan sorgu yürütür ve sonuçları satır kümesi olarak döndürür. Bağlantılı sunucuya tek seferlik, geçici bir alternatiftir. Kalıcı meta veriler oluşturulmaz. Bu söz dizimi PolyBase hizmetlerini gerektirmez ve bulut dosyalarını veya dış veri kaynaklarını desteklemez.

Bu örnek sorgu, OLE DB (PolyBase değil) aracılığıyla uzak bir SQL Server'a bağlanır.

SELECT *
FROM OPENROWSET (
    'MSOLEDBSQL',
    'Server=remote-server;Database=AdventureWorks;Trusted_Connection=yes;',
    'SELECT TOP 10 * FROM AdventureWorks.Sales.SalesOrderHeader'
);

OPENROWSET(BULK) - dosya tabanlı sorgular (PolyBase)

BULK biçimi OPENROWSET verileri doğrudan dosyalardan okur. SQL Server 2019 (15.x) ve önceki sürümlerinde, yerel veya UNC dosya yollarından okur ve bir biçim dosyası gerektirir. SQL Server 2022 (16.x) ve sonraki sürümlerde, DATA_SOURCE ve FORMAT parametrelerini kullanarak bulut depolamadan okuyabilirsiniz. Bu yaklaşım, veri sanallaştırma için kullanılan PolyBase ile tümleşik sürümdür.

PolyBase ve veri sanallaştırma bağlamında, bu kılavuzda OPENROWSET'ya başvurulduğunda, dış dosyaları sorgulamak için FORMAT koşulunu içeren OPENROWSET(BULK ...) söz dizimi anlamına gelir.

Örnekler:

Bu örnek sorgu, Azure Blob Depolama'dan (SQL Server 2022 ve sonraki sürümler) bir Parquet dosyası okur.

SELECT TOP 10 *
FROM OPENROWSET (
    BULK 'data/sales/*.parquet',
    DATA_SOURCE = 'MyAzureStorage',
    FORMAT = 'PARQUET'
) AS [result];

Bu örnek sorgu, satır içi yolu (Azure SQL Veritabanı, Azure SQL Yönetilen Örneği) olan bir Parquet dosyasını okur.

SELECT TOP 10 *
FROM OPENROWSET (
    BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet',
    FORMAT = 'PARQUET'
) AS [result];

OPENROWSET ve dış tablolar ne zaman kullanılır?

Hem OPENROWSET(BULK ...) tabloları hem de dış tablolar, T-SQL ile dış verileri sorgulamanıza olanak sağlar, ancak farklı kullanım durumları için tasarlanmıştır. Aşağıdaki tabloda hangi yaklaşımın senaryonuza uygun olduğunu belirlemenize yardımcı olacak temel farklılıklar özetlemektedir.

Kapasite OPENROWSET(BULK ...) Dış tablo
Purpose Geçici keşif ve tek seferlik sorgular Kalıcı, yeniden kullanılabilir tablo tanımı
Veritabanında depolanan meta veriler Hayır. Sorgu çalıştırıldıktan sonra hiçbir şey kaydedilmez Evet. Tablo tanımı, veri kaynağı ve dosya biçimi veritabanı nesneleri olarak depolanır
Şema tanımı Parquet dosyasından otomatik olarak türetilir veya bir WITH tümcesi ile satır içi olarak belirtilir. CREATE EXTERNAL TABLE ifadesinde açıkça tanımlanmış
Permissions ADMINISTER BULK OPERATIONS veya ADMINISTER DATABASE BULK OPERATIONS gerektirir Oluşturulduktan sonra tabloda standart SELECT izin yeterlidir
Hesaplanan sütunlar Evet. Listeye ifadeler ve hesaplanan sütunlar SELECT ekleyin; filename() ve filepath() gibi meta veri işlevleri yalnızca burada kullanılabilir. Hayır. Sabit sütun listesi; dış tabloyu okuyan bir görünümde veya sorguda dönüştürmeler gerçekleştirme
İstatistikler Azure SQL: sys.sp_create_openrowset_statistics yoluyla manuel tek sütunlu istatistikler; SQL Server 2022 (16.x) ve sonraki sürümleri: öngörüler üzerinde otomatik istatistik oluşturma (SQL Server'da manuel istatistik yok). Bkz. OPENROWSET kılavuzu istatistikleri. Tüm platformlarda tam CREATE STATISTICS desteğin yanı sıra SQL Server 2022 (16.x) ve sonraki sürümlerde otomatik oluşturma. Bkz. Harici tablo manuel istatistikleri oluşturma.
Pushdown Sınırlı destek. Altyapı, filtreleri dosya taramasına gönderse de uzak RDBMS kaynaklarına gönderme işlemi yapılmaz Evet. RDBMS bağlayıcıları için pushdown hesaplamasını destekler (SQL Server, Oracle, Teradata, MongoDB)
En uygun Veri keşfi, şema bulma, prototip oluşturma sorguları, tek seferlik veri yükleri, esnek dönüşümler Üretim iş yükleri, yinelenen sorgular, kullanıcılar arasında paylaşılan erişim, panolar ve raporlama

Esnekliğe ihtiyacınız olduğunda OPENROWSET'i kullanma

Bir dosyayı keşfetmek, farklı şemaları test etmek veya herhangi bir kalıcı nesne oluşturmadan hesaplanan sütunlar ve dönüşümler eklemek için kullanın OPENROWSET . Örneğin, dosya yolunu sütun olarak ayıklayabilir, veri türlerini satır içi olarak yayınlayabilir veya tek bir sorguda hesaplanan ifadelere filtreleyebilirsiniz.

Bu örnek sorgu hesaplanan sütunları ve dönüştürmeleri içerir:

SELECT result.filename() AS [FileName],
       result.filepath(1) AS [Year],
       result.filepath(2) AS [Month],
       CAST (OrderDate AS DATE) AS OrderDate,
       Amount,
       OrderDate
FROM OPENROWSET (
    BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*/*/*/*.parquet',
    FORMAT = 'PARQUET'
) AS result
WHERE result.filepath(1) = '2025';

Tavsiye

filepath() ve filename() işlevleri Azure SQL Veritabanı, Azure SQL Yönetilen Örneği ve SQL Server 2022 (16.x) ve sonraki sürümlerde kullanılabilir. Dosya yolunun bölümlerine göre filtrelemenize (bölüm eleme) ve kaynak dosya adını bir sütun olarak kullanıma sunmanıza olanak sağlar ve bu, dış tablolarla doğrudan mümkün değildir.

Kalıcılık ve idareye ihtiyacınız olduğunda dış tabloları kullanma

Birden çok kullanıcının veya uygulamanın aynı dış verileri tekrar tekrar sorgulaması gerektiğinde dış tabloları kullanın. Şemayı, veri kaynağını ve kimlik bilgilerini bir kez tanımlar ve veritabanında depolarsınız. Tüketicilerin yalnızca tabloda izne ihtiyacı vardır SELECT .

Dış tablolar, sorgu iyileştiricisinin daha iyi yürütme planları oluşturmak için kullandığı istatistikleri de destekler. İstatistikleri el ile oluşturabilir veya altyapının bunları otomatik olarak oluşturmasına izin verebilirim (SQL Server 2022 (16.x) ve sonraki sürümler).

Bu örnek sorgu, daha iyi sorgu planları için bir dış tabloda istatistikler oluşturur.

CREATE STATISTICS Stats_OrderDate
ON dbo.SalesExternal(OrderDate)
WITH FULLSCAN;

Her iki yaklaşımla ilgili istatistikler hakkında daha fazla bilgi için bkz. PolyBase performans konuları - İstatistikler.

BULK INSERT ve OPENROWSET(BULK): Hangisini kullanmalıyım?

Hem BULK INSERT hem de OPENROWSET(BULK ...), aynı temel toplu yükleme motorunu kullanarak dosyalardan SQL Server'a veri aktarmaktadır. Ancak, bunlar söz dizimleri, esneklikleri ve sonuçlarla yapabilecekleriniz bakımından farklılık gösterir. Aşağıdaki tabloda önemli farklar özetlemektedir:

Uyarı

BULK INSERT Fabric'deki SQL veritabanında kullanılamaz. OneLake'e karşı Fabric kullanın OPENROWSET(BULK ...).

Kapasite BULK INSERT OPENROWSET(BULK ...)
Temel amaç Bir dosyadaki verileri doğrudan hedef tabloya yükler Satır kümesi, SELECT veya INSERT ... SELECT deyiminde kullandığınız bir sonuç döndürür.
Kullanım düzeni Tek başına ifade: BULK INSERT <table> FROM '<file>' Sorgu içinde kullanılmalıdır: SELECT * FROM OPENROWSET(BULK ...) veya INSERT INTO <table> SELECT * FROM OPENROWSET(BULK ...)
Hedef tablo mu gerekiyor? Evet. Her zaman doğrudan bir tabloya yazar Hayır. Herhangi bir yere eklemeden veya herhangi bir tabloya veya geçici tabloya ekleme yapmadan bu tablodan ekleyebilirsiniz SELECT
Yükleme sırasında sütun dönüştürmeleri Sınırlı destek. Veriler, format dosyası veya sütun sırası tarafından denetlenen eşleme ile olduğu gibi dosyadan tabloya akıyor. Tam destek. Çevresine ifadeler, CAST, WHERE filtreler, JOIN diğer tablolar ve hesaplanan sütunlar ekleyebilirsiniz SELECT
Tablo ipuçları madde WITH için BATCHSIZE, CHECK_CONSTRAINTS, FIRE_TRIGGERS, KEEPIDENTITY, KEEPNULLS, TABLOCK ve daha fazlası destek içerir INSERT ... SELECT * FROM OPENROWSET(BULK ...) WITH (TABLOCK, IGNORE_CONSTRAINTS, ...) sözdizimi aracılığıyla tablo ipuçları desteği sağlar
Büyük nesne (LOB) tek değerli aktarım Desteklenmiyor Evet. Bir dosyanın tamamını tek bir varbinary(max), varchar(max), veya nvarchar(max) değeri olarak içeri aktarmak için SINGLE_BLOB, SINGLE_CLOB, SINGLE_NCLOB'yi destekler
Dosyaları biçimlendirme Evet. (XML ve XML-dışı) aracılığıyla destek sağlanır Evet. Desteklenir (XML ve XML olmayan)
Bulut dosya erişimi (Azure Blob Storage, ADLS Gen2, S3) Evet. DATA_SOURCE Parametre (SQL Server 2017 (14.x) ve sonraki sürümler aracılığıyla desteklenir, Azure SQL) Evet. DATA_SOURCE parametresi veya satır içi URL ile FORMAT tümcesi aracılığıyla desteklenir (SQL Server 2022 (16.x) ve sonraki sürümler, Azure SQL)
Parquet veya Delta dosyaları Desteklenmiyor. Yalnızca CSV/sınırlandırılmış metin Evet. FORMAT = 'PARQUET' veya FORMAT = 'DELTA' (SQL Server 2022 (16.x) ve daha sonraki sürümler, Azure SQL ile desteklenir)
İzin gerekiyor ADMINISTER BULK OPERATIONS veya ADMINISTER DATABASE BULK OPERATIONS, artı INSERT hedef tabloda ADMINISTER BULK OPERATIONS veya ADMINISTER DATABASE BULK OPERATIONS
Minimum günlük kaydı Evet. Basit veya büyük ölçekli günlük kaydı kurtarma modeli altında desteklenmektedir TABLOCK Evet. INSERT ... SELECT kullanıldığında ve TABLOCK ile desteklenir

TOPLU EKLE'nin ne zaman seçileceği

Basit bir dosyadan tabloya yükünüz olduğunda ve içeri aktarma sırasında verileri dönüştürmeniz, filtrelemeniz veya birleştirmeniz gerekmeyen durumlarda kullanın BULK INSERT . CSV veya diğer sınırlandırılmış dosyalar için daha basit söz dizimi kullanır:

Bu örnek sorgu, Azure Blob Depolama'dan bir CSV dosyasını doğrudan bir tabloya yükler.

BULK INSERT Sales.Invoices
FROM 'invoices/inv-2025-01.csv'
WITH (
    DATA_SOURCE = 'MyAzureBlobStorage',
    FORMAT = 'CSV',
    FIRSTROW = 2,
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n'
);

Bu örnek sorgu, sütun eşlemesi için biçim dosyası içeren bir yerel dosya yükler.

BULK INSERT dbo.Products
FROM 'C:\Data\products.csv'
WITH (
    FORMATFILE = 'C:\Data\products.fmt',
    FIRSTROW = 2,
    TABLOCK
);

OPENROWSET(BULK) ne zaman seçilir?

Aşağıdaki koşullardan birine veya daha fazlasına ihtiyacınız olduğunda kullanın OPENROWSET(BULK ...) :

  • Önce tablo oluşturmadan dosya verilerini sorgula veya ön izleme.
  • İçeri aktarma sırasında verileri dönüştürme, filtreleme veya birleştirme.
  • Parquet veya Delta dosyalarını yükleyin (yalnızca OPENROWSET bu biçimleri destekler).
  • Bir dosyanın tamamını tek bir LOB değeri (SINGLE_BLOB, SINGLE_CLOB, SINGLE_NCLOB) olarak içeri aktarma.

Bu örnek sorgu, verileri herhangi bir yere eklemeden Azure Blob Depolama'dan bir CSV dosyasının önizlemesini gösterir.

SELECT TOP 10 *
FROM OPENROWSET (
    BULK 'invoices/inv-2025-01.csv',
    DATA_SOURCE = 'MyAzureBlobStorage',
    FORMAT = 'CSV',
    FIRSTROW = 2,
    FIELDTERMINATOR = ','
) AS src;

Bu örnek sorgu, dönüştürme ve filtreleme ile veri ekler.

INSERT INTO Sales.Invoices (InvoiceDate, Amount, Customer)
SELECT CAST (InvoiceDate AS DATE),
       Amount * 1.1, -- Apply a 10% markup
       UPPER(Customer)
FROM OPENROWSET (
    BULK 'invoices/inv-2025-01.csv',
    DATA_SOURCE = 'MyAzureBlobStorage',
    FORMAT = 'CSV',
    FIRSTROW = 2
) WITH (
    InvoiceDate VARCHAR (10),
    Amount DECIMAL (18, 2),
    Customer VARCHAR (100)
) AS src
WHERE Amount IS NOT NULL;

Bu örnek sorgu bir Parquet dosyası yükler (Parquet dosyasını BULK INSERT ile yüklemek mümkün değildir).

INSERT INTO Sales.Invoices
SELECT *
FROM OPENROWSET (
    BULK 'data/invoices/*.parquet',
    DATA_SOURCE = 'MyAzureStorage',
    FORMAT = 'PARQUET') AS src;

Bu örnek sorgu, xml dosyasının tamamını tek bir varbinary(max) değeri olarak içeri aktarır.

INSERT INTO dbo.XmlDocuments (DocContent)
SELECT BulkColumn
FROM OPENROWSET (
    BULK 'C:\Data\catalog.xml',
    SINGLE_BLOB
) AS x;

Tavsiye

Yaklaşımlardan biri, dosya verilerini araştırmak ve doğrulamak için bir OPENROWSET(BULK ...) ile SELECT'de başlamak ve dönüştürmelere ihtiyacınız yoksa, son üretim yükü için BULK INSERT'ye geçmektir. Parquet veya Delta desteğine ya da satır içi filtrelemeye ihtiyacınız varsa, OPENROWSET ile kalın.

Daha fazla bilgi için aşağıdaki ilgili kılavuzlara bakın:

Yararlı meta veri işlevleri

Veya dış tablolarla OPENROWSET dış dosyaları sorguladığınızda, dosya meta verilerini incelemek, şemaları bulmak ve bölüme duyarlı sorgular uygulamak için birkaç yerleşik işlev ve yordam kullanabilirsiniz.

filepath() ve filename()

filepath() ve filename() işlevleri, sonuç kümesindeki her satır için dosya yolunun veya dosya adının bölümlerini döndürür. Bunlar özellikle şunlar için kullanışlıdır:

  • Bölüm filtreleme: Motorun her şeyi taramak yerine yalnızca uyumlu dosyaları okumasını sağlamak için klasör bölümlerini (örneğin, yıl/ay/gün bölümleri) filtreleyin.

  • Kaynak meta verileri açığa çıkarma: Kaynak dosya adını veya yolu sorgu sonuçlarına sütun olarak ekleyin. Bu, denetim veya hata ayıklama için yararlıdır.

Function İadeler Example
filename() Her satır için kaynak dosyanın dosya adı (uzantı dahil) sales_2025_01.parquet
filepath(N) Yoldaki (BULK) joker karakterden () itibaren *N'inci klasör kesimi, burada N 1'den başlar Yol sales/2025/01/*.parquet için, filepath(1)2025 döndürür, filepath(2)01 döndürür

Şunlar için geçerlidir: Azure SQL Veritabanı, Azure SQL Yönetilen Örneği, SQL Server 2022 (16.x) ve sonraki sürümler, Fabric SQL Veritabanı.

Bu örnek sorgu, filepath() bölüm eleme için ve filename() kaynak dosyaları tanımlamak için kullanılır. Yalnızca klasörün altındaki /2025/ dosyaları okur ve yalnızca alt klasörün altındaki /06/ dosyaları okur.

SELECT result.filename() AS SourceFile,
       result.filepath(1) AS [Year],
       result.filepath(2) AS [Month],
       *
FROM OPENROWSET (
    BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*/*/*.parquet',
    FORMAT = 'PARQUET'
) AS result
WHERE result.filepath(1) = '2025' 
      AND result.filepath(2) = '06';

Tavsiye

Filtreleri filepath(), bir alt sorgu veya CTE yerine WHERE koşuluna yerleştirin. Filtre yan tümcesinde WHERE olduğunda altyapı, dosya tarama düzeyinde bölüm eleme gerçekleştirebilir ve bu da G/Ç'yi önemli ölçüde azaltır.

sp_describe_first_result_set - OPENROWSET sütun türlerini bulma

Parquet dosyalarıyla OPENROWSET kullandığınızda motor sütun veri türlerini otomatik olarak tanımlar (şema çıkarımı). Çıkarsanan türler gerekenden daha büyük olabilir. Örneğin, Parquet meta verileri maksimum uzunluk içermediğinden karakter sütunları genellikle varchar(8000) olarak çıkarılır. Bu seçim performansı düşürebilir ve daha fazla bellek tüketebilir.

Sorgunuzu sp_describe_first_result_set çıkarsanan şemayı incelemek için kullanın. Çıkarılan türleri gördükkten sonra, performansı geliştirmek için bir WITH yan tümcede daha dar türler belirtin.

  • 1. Adım: Çıkarsanan şemayı inceleyin.

    EXECUTE sp_describe_first_result_set N'
    SELECT *
    FROM OPENROWSET(
        BULK ''abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet'',
        FORMAT = ''PARQUET''
    ) AS result';
    

    Çıkışta her sütunun adı, çıkarımlı veri türü, maksimum uzunluk, duyarlık ve ölçek gösterilir. Eğer bir varchar(8000) öğesini, varchar(100) öğesi yeterli olduğu durumda görürseniz, onu geçersiz kılın:

  • 2. Adım: Daha iyi performans için açık türleri kullanın.

    SELECT TOP 100 *
    FROM OPENROWSET (
        BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet',
        FORMAT = 'PARQUET'
    ) WITH (
        OrderId INT,
        OrderDate DATE,
        Amount DECIMAL (18, 2),
        Customer VARCHAR (100) -- much narrower than the inferred varchar(8000)
    ) AS result;
    

Şema çıkarımı yalnızca Parquet dosyalarıyla çalışır. CSV dosyaları için her zaman sütun tanımlarını bir WITH açıklamasında (OPENROWSET için) veya CREATE EXTERNAL TABLE deyiminde belirtin. sp_describe_first_result_set genel bir SQL Server ve Azure SQL yordamıdır, ancak sorgular için OPENROWSET özellikle yararlıdır. Daha fazla bilgi için bkz. sp_describe_first_result_set.

Performans, sorun giderme ve en iyi yöntemler

Veri sanallaştırmayı uyguladıktan sonra performansı iyileştirmek, sorunları tanılamak ve üretime hazır olduğunuzdan emin olmak için şu kılavuzları kullanın:

Area Makale Ayrıntılar
PolyBase performansı SQL Server için PolyBase'de performansla ilgili dikkat edilmesi gerekenler İstatistikler, yığma, paralel işlem ve bellek yönetimi
İtme hesaplaması PolyBase'de pushdown hesaplamaları Uzak kaynağa hangi işlemlerin gönderildiği belirtir
İtmenin gerçekleşip gerçekleşmediğini belirleme Dış baskının gerçekleşip gerçekleşmediğini belirleme Planları ve DMV'leri sorgulama
Sorun giderme PolyBase'i izleme ve sorunlarını giderme Genel sorunlar ve çözümleri
Kerberos bağlantısı PolyBase Kerberos bağlantısı sorunlarını giderme
SSS PolyBase hakkında sık sorulan sorular
Hatalar ve çözümler PolyBase hataları ve olası çözümleri