Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümler
Azure SQL Database
Azure SQL Managed Instance
SQL 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 veBULK INSERTarası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]://'iabs://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:
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:
- HARİCİ VERİ KAYNAĞI OLUŞTUR
- HARİCİ DOSYA BİÇİMİ OLUŞTUR
- DıŞ TABLO OLUŞTURMA
- OPENROWSET
- DIŞ TABLO OLUŞTUR VE SELECT OLARAK SEÇ (CETAS)
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ü IDENTITYdeğerGizli 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ü IDENTITYdeğerGizli 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
OPENROWSETbu 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:
- VERILERI SQL Server'a aktarmak için BULK INSERT veya OPENROWSET(BULK...) kullanın: Güvenlikle ilgili dikkat edilmesi gereken ayrıntılı bir yan yana kılavuz.
-
Verileri Toplu İçeri ve Dışarı Aktarma (SQL Server): Tüm toplu veri taşıma yöntemlerine (bcp,
BULK INSERT,OPENROWSET) genel bakış. - BULK INSERT (Transact-SQL): Tam bir T-SQL başvurusu.
- OPENROWSET BULK (Transact-SQL): Tam bir T-SQL başvurusu.
- Azure Blob Depolama'daki verilere toplu erişim örnekleri: Azure depolama ile her iki yöntemin de kullanıldığı yan yana örnekler.
-
OPENROWSET Toplu Satır Kümesi Sağlayıcısı (SQL Server) :, ve örnekleri. - Verileri toplu içeri aktarmak için bir biçim dosyası kullanın (SQL Server):Dosya kullanımını her iki yöntemle de biçimlendirin.
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 |