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
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
OPENROWSET
T-SQL komutu, dış veri kaynağından uzak verilere erişmek için gereken tüm bağlantı bilgilerini içerir.
OPENROWSET
, bir dosyadaki verilerin okunmasını ve satır kümesi olarak döndürülmasını sağlayan yerleşik bir BULK
sağlayıcısı aracılığıyla toplu işlemleri de destekler.
OPENROWSET BULK
, dış veri dosyalarından okuma içindir; OPENROWSET
toplu olarak başka bir veritabanı altyapısından okumak için kullanılır.
OPENROWSET
işlevine sorgunun FROM
yan tümcesinde tablo adıymış gibi başvurulabilir. İşleve OPENROWSET
, veri sağlayıcısının özelliklerine bağlı olarak bir INSERT
, UPDATE
veya DELETE
deyiminin hedefi olarak da başvurulabilir. Sorgu birden çok sonuç kümesi döndürebileceğinden OPENROWSET
yalnızca ilkini döndürür.
OPENROWSET
BULK
işleci olmadan yalnızca SQL Server'da kullanılabilir. Daha fazla bilgi için bkz. OPENROWSET (Transact-SQL).
Diğer platformlardaki benzer örneklerin ayrıntıları ve bağlantıları:
- Microsoft Fabric Veri Ambarı söz dizimi için sürüm açılan listesinde Doku'ya tıklayın.
- Azure SQL Yönetilen Örneği'ne ilişkin örnekler için bkz. OPENROWSET kullanarak veri kaynaklarını sorgulama.
- Azure Synapse'te sunucusuz SQL havuzlarıyla ilgili bilgi ve örnekler için bkz. Azure Synapse Analytics'te sunucusuz SQL havuzu kullanarak OPENROWSET'i kullanma.
- Azure Synapse'teki ayrılmış SQL havuzları
OPENROWSET
işlevini desteklemez.
Transact-SQL söz dizimi kuralları
Sözdizimi
dış dosyaları okumak için OPENROWSET(BULK)
söz dizimi kullanılır:
OPENROWSET( BULK 'data_file' ,
{ FORMATFILE = 'format_file_path' [ <bulk_options> ]
| SINGLE_BLOB | SINGLE_CLOB | SINGLE_NCLOB }
)
<bulk_options> ::=
[ , DATA_SOURCE = 'data_source_name' ]
-- bulk_options related to input file format
[ , CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]
[ , FORMAT = { 'CSV' | 'PARQUET' | 'DELTA' } ]
[ , FIELDQUOTE = 'quote_character' ]
[ , FORMATFILE = 'format_file_path' ]
[ , FORMATFILE_DATA_SOURCE = 'data_source_name' ]
[ , FIRSTROW = first_row ]
[ , LASTROW = last_row ]
[ , MAXERRORS = maximum_errors ]
[ , ERRORFILE = 'file_name' ]
[ , ERRORFILE_DATA_SOURCE = 'data_source_name' ]
[ , ROWS_PER_BATCH = rows_per_batch ]
[ , ORDER ( { column [ ASC | DESC ] } [ , ...n ] ) [ UNIQUE ] ]
Tartışmalar
BULK bağımsız değişkenleri
BULK
bir dosyadaki verileri okumak için OPENROWSET
satır kümesi sağlayıcısını kullanır. SQL Server'da OPENROWSET
verileri hedef tabloya yüklemeden veri dosyasından okuyabilir. Bu, temel bir OPENROWSET
deyimiyle SELECT
kullanmanıza olanak tanır.
BULK
seçeneğinin bağımsız değişkenleri, okuma verilerinin nereden başlatılıp sonlandırıldığı, hatalarla nasıl başa çıkıldığı ve verilerin nasıl yorumlandığı üzerinde önemli bir denetim sağlar. Örneğin, veri dosyasının varbinary,
BULK
seçeneğini kullanma hakkında bilgi için bu makalenin devamında yer alan Açıklamalar bölümüne bakın.
BULK
seçeneğinin gerektirdiği izinler hakkında bilgi için bu makalenin devamındaki İzinler bölümüne bakın.
Uyarı
Verileri tam kurtarma modeliyle içeri aktarmak için kullanıldığında OPENROWSET (BULK ...)
günlüğü iyileştirmez.
Verileri toplu içeri aktarma için hazırlama hakkında bilgi için bkz. Verileri toplu dışarı veya içeri aktarma için hazırlama
BULK 'data_file'
Verileri hedef tabloya kopyalanacak olan veri dosyasının tam yolu.
SELECT * FROM OPENROWSET(
BULK 'C:\DATA\inv-2017-01-19.csv',
SINGLE_CLOB
) AS DATA;
SQL Server 2017 (14.x) sürümünden başlayarak data_file Azure Blob Depolama'da olabilir. Örnekler için bkz. Azure Blob Depolamaverilere toplu erişim örnekleri.
BULK hata işleme seçenekleri
ERRORFILE = 'file_name'
Biçimlendirme hataları olan ve OLE DB satır kümesine dönüştürülemez satırları toplamak için kullanılan dosyayı belirtir. Bu satırlar, "olduğu gibi" veri dosyasından bu hata dosyasına kopyalanır.
Hata dosyası, komut yürütmenin başlangıcında oluşturulur. Dosya zaten varsa bir hata oluşur. Ayrıca, uzantı .ERROR.txt sahip bir denetim dosyası oluşturulur. Bu dosya, hata dosyasındaki her satıra başvurur ve hata tanılaması sağlar. Hatalar düzeltildikten sonra veriler yüklenebilir.
SQL Server 2017 (14.x) sürümünden başlayarak error_file_path
Azure Blob Depolama'da olabilir.
ERRORFILE_DATA_SOURCE_NAME
SQL Server 2017'den (14.x) başlayarak bu bağımsız değişken, içeri aktarma sırasında bulunan hataları içeren hata dosyasının Azure Blob depolama konumunu işaret eden adlandırılmış bir dış veri kaynağıdır. Dış veri kaynağı TYPE = BLOB_STORAGE
kullanılarak oluşturulmalıdır. Daha fazla bilgi için bkz. CREATE EXTERNAL DATA SOURCE (Transact-SQL).
MAXERRORS = maximum_errors
Biçim dosyasında tanımlandığı gibi, OPENROWSET
özel durum oluşturmadan önce gerçekleşebilecek en fazla söz dizimi hatası veya uyumsuz satır sayısını belirtir.
MAXERRORS
ulaşılana kadar, OPENROWSET
her bir hatalı satırı yoksayar, yüklemez ve hatalı satırı tek hata olarak sayar.
maximum_errors için varsayılan değer 10'dur.
Uyarı
BULK veri işleme seçenekleri
VERİ_KAYNAĞI
DATA_SOURCE
, CREATE EXTERNAL DATA SOURCE ile oluşturulan dış konumdur.
FIRSTROW = first_row
Yüklenecek ilk satırın sayısını belirtir. Varsayılan değer 1'dir. Bu, belirtilen veri dosyasındaki ilk satırı gösterir. Satır numaraları, satır sonlandırıcıları sayılarak belirlenir.
FIRSTROW
1 tabanlıdır.
LASTROW = last_row
Yüklenecek son satırın sayısını belirtir. Varsayılan değer 0'dır. Bu, belirtilen veri dosyasındaki son satırı gösterir.
ROWS_PER_BATCH = rows_per_batch
Veri dosyasındaki yaklaşık veri satır sayısını belirtir. Bu değer, gerçek satır sayısıyla aynı sırada olmalıdır.
OPENROWSET
bir veri dosyasını her zaman tek bir toplu iş olarak içeri aktarır. Ancak, 0 değerine sahip > belirtirseniz, sorgu işlemcisi sorgu planındaki kaynakları ayırmaya yönelik bir ipucu olarak rows_per_batch değerini kullanır.
Varsayılan olarak, ROWS_PER_BATCH
bilinmiyor.
ROWS_PER_BATCH = 0
belirtmek, ROWS_PER_BATCH
atlama ile aynıdır.
ORDER ( { sütun [ ASC | DESC ] } [ ,... n ] [ UNIQUE ] )
Veri dosyasındaki verilerin nasıl sıralanacağını belirten isteğe bağlı bir ipucu. Varsayılan olarak, toplu işlem veri dosyasının sıralı olmadığını varsayar. Sorgu iyileştiricisi daha verimli bir sorgu planı oluşturmak için sıralamadan yararlanabiliyorsa performans iyileştirebilir. Aşağıdaki listede, sıralama belirtmenin yararlı olabileceği örnekler verilmiştir:
- Satır kümesi verilerinin kümelenmiş dizin anahtarında sıralandığı kümelenmiş dizini olan bir tabloya satır ekleme.
- Satır kümesini sıralama ve birleştirme sütunlarının eşleştiği başka bir tabloyla birleştirme.
- Satır kümesi verilerini sıralama sütunlarına göre toplama.
- Sıralama ve birleştirme sütunlarının eşleştiği sorgunun
FROM
yan tümcesinde satır kümesini kaynak tablo olarak kullanma.
EŞSİZ
Veri dosyasının yinelenen girdileri olmadığını belirtir.
Veri dosyasındaki gerçek satırlar belirtilen düzene göre sıralanmamışsa veya UNIQUE
ipucu belirtilirse ve yinelenen anahtarlar varsa bir hata döndürülür.
ORDER
kullanıldığında sütun diğer adları gereklidir. Sütun diğer adı listesi, BULK
yan tümcesi tarafından erişilen türetilmiş tabloya başvurmalıdır.
ORDER
yan tümcesinde belirtilen sütun adları bu sütun diğer ad listesine başvurur. Büyük değer türleri (varchar(max), nvarchar(max), varbinary(max)ve xml) ve büyük nesne (LOB) türleri (metin, ntextve resim) sütunları belirtilemiyor.
SINGLE_BLOB
Önemli
XML verilerini SINGLE_BLOB
ve SINGLE_CLOB
yerine yalnızca SINGLE_NCLOB
seçeneğini kullanarak içeri aktarmanızı öneririz çünkü yalnızca SINGLE_BLOB
tüm Windows kodlama dönüştürmelerini destekler.
SINGLE_CLOB
data_file ASCII olarak okuyarak, içeriği geçerli veritabanının harmanlamasını kullanarak varchar(max)türünde tek satırlı, tek sütunlu satır kümesi olarak döndürür.
SINGLE_NCLOB
SELECT * FROM OPENROWSET(
BULK N'C:\Text1.txt',
SINGLE_NCLOB
) AS Document;
BULK giriş dosyası biçimi seçenekleri
CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' }
Veri dosyasındaki verilerin kod sayfasını belirtir.
CODEPAGE
yalnızca veriler karakter değerleri 127'den büyük veya 32'den küçük olan karakter, varcharveya metin sütunları içeriyorsa geçerlidir.
Önemli
CODEPAGE
, Linux'ta desteklenen bir seçenek değildir.
Uyarı
65001 seçeneğinin harmanlama/kod sayfası belirtimine göre önceliğe sahip olmasını istemeniz dışında, biçim dosyasındaki her sütun için bir harmanlama adı belirtmenizi öneririz.
CODEPAGE değeri | Açıklama |
---|---|
ACP |
char, varcharveya metin veri türünün sütunlarını ANSI/Microsoft Windows kod sayfasından (ISO 1252) SQL Server kod sayfasına dönüştürür. |
OEM (varsayılan) |
char, varcharveya metin veri türünün sütunlarını sistem OEM kodu sayfasından SQL Server kod sayfasına dönüştürür. |
RAW |
Bir kod sayfasından diğerine dönüştürme gerçekleşmez. Bu en hızlı seçenektir. |
code_page |
Veri dosyasındaki karakter verilerinin kodlandığı kaynak kod sayfasını gösterir; örneğin, 850. SQL Server 2016 (13.x) öncesi Önemli Sürümleri, 65001 (UTF-8 kodlama) kod sayfasını desteklemez. |
FORMAT = { 'CSV' | 'PARQUET' | 'DELTA' }
SQL Server 2017(14.x) ile başlayarak bu bağımsız değişken, rfc 4180 standardına
SQL Server 2022(16.x) sürümünden itibaren hem Parquet hem de Delta biçimleri desteklenir.
SELECT *
FROM OPENROWSET(BULK N'D:\XChange\test-csv.csv',
FORMATFILE = N'D:\XChange\test-csv.fmt',
FIRSTROW=2,
FORMAT='CSV') AS cars;
FORMATFILE = 'format_file_path'
Biçim dosyasının tam yolunu belirtir. SQL Server iki tür biçim dosyasını destekler: XML ve XML olmayan.
Sonuç kümesinde sütun türlerini tanımlamak için bir biçim dosyası gereklidir. Tek özel durum, SINGLE_CLOB
, SINGLE_BLOB
veya SINGLE_NCLOB
belirtildiği durumlardır; bu durumda, biçim dosyası gerekli değildir.
Biçim dosyaları hakkında bilgi için bkz. Verileri toplu içeri aktarmak için biçim dosyası kullanma (SQL Server).
SQL Server 2017 (14.x) sürümünden başlayarak format_file_path Azure Blob Depolama'da olabilir. Örnekler için bkz. Azure Blob Depolamaverilere toplu erişim örnekleri.
FIELDQUOTE = 'field_quote'
SQL Server 2017 'den (14.x) başlayarak, bu bağımsız değişken CSV dosyasında tırnak karakteri olarak kullanılan bir karakteri belirtir. Belirtilmezse, teklif karakteri ("
) RFC 4180 standardında tanımlandığı gibi tırnak karakteri olarak kullanılır. Bu seçenek için değer olarak yalnızca tek bir karakter belirtilebilir.
Açıklamalar
OPENROWSET
OLE DB veri kaynaklarından uzak verilere erişmek için yalnızca Belirtilen sağlayıcı için DisallowAdhocAccess kayıt defteri seçeneği açıkça olarak ayarlandığında 0
ve Geçici Dağıtılmış Sorgular gelişmiş yapılandırma seçeneği etkinleştirildiğinde kullanılabilir. Bu seçenekler ayarlanmamışsa, varsayılan davranış geçici erişime izin vermez.
Uzak OLE DB veri kaynaklarına eriştiğiniz zaman, güvenilen bağlantıların oturum açma kimliği, istemcinin sorgulanan sunucuya bağlı olduğu sunucudan otomatik olarak temsilci seçmez. Kimlik doğrulaması temsilcisinin yapılandırılması gerekir.
Veri sağlayıcısı belirtilen veri kaynağında birden çok kataloğu ve şemayı destekliyorsa katalog ve şema adları gereklidir. veri sağlayıcısı bunları desteklemediğinde ve catalog
değerleri schema
atlanabilir. Sağlayıcı yalnızca şema adlarını destekliyorsa formun schema.object
iki bölümden oluşan bir adı belirtilmelidir. Sağlayıcı yalnızca katalog adlarını destekliyorsa formun catalog.schema.object
üç bölümden oluşan bir adı belirtilmelidir. Daha fazla bilgi için bkz.
SQL Server Yerel İstemci OLE DB sağlayıcısını kullanan doğrudan sorgular için üç bölümlü adlar belirtilmelidir.
OPENROWSET
bağımsız değişkenleri kabul etmez.
OPENDATASOURCE
yan tümcesindeki OPENQUERY
, OPENROWSET
veya FROM
çağrıları, iki çağrıya aynı bağımsız değişkenler sağlansa bile güncelleştirmenin hedefi olarak kullanılan bu işlevlere yapılan çağrılardan ayrı ve bağımsız olarak değerlendirilir. Özellikle, bu çağrılardan birinin sonucuna uygulanan filtre veya birleştirme koşullarının diğerinin sonuçları üzerinde hiçbir etkisi yoktur.
BULK seçeneğiyle OPENROWSET kullanma
Aşağıdaki Transact-SQL geliştirmeleri OPENROWSET(BULK...)
işlevini destekler:
FROM
ile kullanılan birSELECT
yan tümcesi, tamOPENROWSET(BULK...)
işlevselliğiyle tablo adı yerineSELECT
çağırabilir.OPENROWSET
seçeneğiyleBULK
,FROM
yan tümcesinde aralık değişkeni veya diğer ad olarak da bilinen bir bağıntı adı gerektirir. Sütun diğer adları belirtilebilir. Sütun diğer adı listesi belirtilmezse, biçim dosyasının sütun adları olmalıdır. Sütun diğer adlarının belirtilmesi, biçim dosyasındaki sütun adlarını geçersiz kılar, örneğin:FROM OPENROWSET(BULK...) AS table_alias
FROM OPENROWSET(BULK...) AS table_alias(column_alias,...n)
Önemli
AS <table_alias>
eklenememesi şu hataya neden olur: Msg 491, Düzey 16, Durum 1, Satır 20 From yan tümcesindeki toplu satır kümesi için bağıntı adı belirtilmelidir.SELECT...FROM OPENROWSET(BULK...)
deyimi, verileri tabloya aktarmadan doğrudan bir dosyadaki verileri sorgular.SELECT...FROM OPENROWSET(BULK...)
deyimleri, sütun adlarını ve veri türlerini belirtmek için bir biçim dosyası kullanarak toplu sütun diğer adlarını da listeleyebilir.OPENROWSET(BULK...)
veyaINSERT
deyiminde kaynak tablo olarakMERGE
kullanmak, verileri bir veri dosyasından SQL Server tablosuna toplu olarak içeri aktarır. Daha fazla bilgi için bkz. VERILERI SQL Serveriçeri aktarmak için BULK INSERT veya OPENROWSET(BULK...) kullanma.OPENROWSET BULK
seçeneği birINSERT
deyimiyle kullanıldığında,BULK
yan tümcesi tablo ipuçlarını destekler.TABLOCK
gibi normal tablo ipuçlarına ek olarak,BULK
yan tümcesi şu özel tablo ipuçlarını kabul edebilir:IGNORE_CONSTRAINTS
(yalnızcaCHECK
veFOREIGN KEY
kısıtlamalarını yoksayar),IGNORE_TRIGGERS
,KEEPDEFAULTS
veKEEPIDENTITY
. Daha fazla bilgi için bkz. Tablo İpuçları (Transact-SQL).INSERT...SELECT * FROM OPENROWSET(BULK...)
deyimlerini kullanma hakkında bilgi için bkz. Verileri Toplu İçeri ve Dışarı Aktarma (SQL Server). Toplu içeri aktarma tarafından gerçekleştirilen satır ekleme işlemlerinin işlem günlüğüne ne zaman kaydedildiği hakkında bilgi için Toplu İçeri Aktarmada Minimum Günlük Kaydı İçin Önkoşullar başlığına bakın.
Uyarı
OPENROWSET
kullandığınızda, SQL Server'ın kimliğe bürünmeyi nasıl işlediğini anlamak önemlidir. Güvenlikle ilgili dikkat edilmesi gerekenler hakkında bilgi için bkz. VERILERI SQL Serveriçeri aktarmak için BULK INSERT veya OPENROWSET(BULK...) kullanma.
SQLCHAR, SQLNCHAR veya SQLBINARY verilerini toplu içeri aktarma
OPENROWSET(BULK...)
belirtilmezse en fazla SQLCHAR
, SQLNCHAR
veya SQLBINARY
veri uzunluğunun 8.000 bayt'ı aşmadığını varsayar. İçeri aktarılan veriler, 8.000 bayt'ı aşan nesneler
Uyarı
Otomatik olarak oluşturulan biçim dosyası, LOB alanı için uzunluk veya uzunluk üst sınırını belirtmez. Ancak, bir biçim dosyasını düzenleyebilir ve uzunluğu veya uzunluk üst sınırını el ile belirtebilirsiniz.
SQLXML belgelerini toplu dışarı veya içeri aktarma
SQLXML verilerini toplu olarak dışarı veya içeri aktarmak için biçim dosyanızda aşağıdaki veri türlerinden birini kullanın.
Veri türü | Etki |
---|---|
SQLCHAR veya SQLVARYCHAR |
Veriler istemci kodu sayfasında veya harmanlama tarafından ima edilen kod sayfasında gönderilir. |
SQLNCHAR veya SQLNVARCHAR |
Veriler Unicode olarak gönderilir. |
SQLBINARY veya SQLVARYBIN |
Veriler dönüştürme olmadan gönderilir. |
İzinler
OPENROWSET
izinleri, veri sağlayıcısına geçirilen kullanıcı adının izinlerine göre belirlenir.
BULK
seçeneğini kullanmak için ADMINISTER BULK OPERATIONS
veya ADMINISTER DATABASE BULK OPERATIONS
izni gerekir.
Örnekler
Bu bölümde, söz dizimini kullanmayı OPENROWSET BULK
gösteren genel örnekler sağlanır.
A. OpenROWSET kullanarak dosya verilerini bir varbinary(max) sütununa TOPLU EKLEME
Şunlar için geçerlidir: yalnızca SQL Server'ı.
Aşağıdaki örnek, gösterim amacıyla küçük bir tablo oluşturur ve Text1.txt
kök dizininde bulunan C:
adlı dosyadan dosya verilerini varbinary(max) sütununa ekler.
CREATE TABLE myTable (
FileName NVARCHAR(60),
FileType NVARCHAR(60),
Document VARBINARY(MAX)
);
GO
INSERT INTO myTable (
FileName,
FileType,
Document
)
SELECT 'Text1.txt' AS FileName,
'.txt' AS FileType,
*
FROM OPENROWSET(
BULK N'C:\Text1.txt',
SINGLE_BLOB
) AS Document;
GO
B. Metin dosyasından satır almak için biçim dosyasıyla OPENROWSET BULK sağlayıcısını kullanma
Şunlar için geçerlidir: yalnızca SQL Server'ı.
Aşağıdaki örnek, aşağıdaki verileri içeren values.txt
sekmeyle ayrılmış bir metin dosyasından satır almak için bir biçim dosyası kullanır:
1 Data Item 1
2 Data Item 2
3 Data Item 3
values.fmt
biçim dosyası, values.txt
içindeki sütunları açıklar:
9.0
2
1 SQLCHAR 0 10 "\t" 1 ID SQL_Latin1_General_Cp437_BIN
2 SQLCHAR 0 40 "\r\n" 2 Description SQL_Latin1_General_Cp437_BIN
Bu sorgu bu verileri alır:
SELECT a.* FROM OPENROWSET(
BULK 'C:\test\values.txt',
FORMATFILE = 'C:\test\values.fmt'
) AS a;
C. Biçim dosyası ve kod sayfası belirtme
Şunlar için geçerlidir: yalnızca SQL Server'ı.
Aşağıdaki örnekte hem biçim dosyası hem de kod sayfası seçeneklerinin aynı anda nasıl kullanılacağı gösterilmektedir.
INSERT INTO MyTable
SELECT a.* FROM OPENROWSET (
BULK N'D:\data.csv',
FORMATFILE = 'D:\format_no_collation.txt',
CODEPAGE = '65001'
) AS a;
D. Biçim dosyasıyla CSV dosyasından verilere erişme
Şunlar için geçerlidir: yalnızca SQL Server 2017 (14.x) ve sonraki sürümleri.
SELECT * FROM OPENROWSET(
BULK N'D:\XChange\test-csv.csv',
FORMATFILE = N'D:\XChange\test-csv.fmt',
FIRSTROW = 2,
FORMAT = 'CSV'
) AS cars;
E. Biçim dosyası olmadan CSV dosyasından verilere erişme
Şunlar için geçerlidir: yalnızca SQL Server'ı.
SELECT * FROM OPENROWSET(
BULK 'C:\Program Files\Microsoft SQL Server\MSSQL14.CTP1_1\MSSQL\DATA\inv-2017-01-19.csv',
SINGLE_CLOB
) AS DATA;
SELECT *
FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Access Text Driver (*.txt, *.csv)}',
'SELECT * FROM E:\Tlog\TerritoryData.csv'
);
Önemli
ODBC sürücüsü 64 bit olmalıdır. Bunu doğrulamak için Windows'ta bir ODBC Veri Kaynağına Bağlanma (SQL Server İçeri ve Dışarı Aktarma Sihirbazı) uygulamasının Sürücüler sekmesini açın. 64 bit Microsoft Text Driver (*.txt, *.csv)
sürümüyle çalışmayan 32 bit sqlservr.exe
vardır.
F. Azure Blob Depolama'da depolanan bir dosyadan verilere erişme
Şunlar için geçerlidir: yalnızca SQL Server 2017 (14.x) ve sonraki sürümleri.
SQL Server 2017 (14.x) ve sonraki sürümlerinde, aşağıdaki örnekte Azure depolama hesabındaki bir kapsayıcıyı işaret eden bir dış veri kaynağı ve paylaşılan erişim imzası için oluşturulan veritabanı kapsamlı kimlik bilgileri kullanılmaktadır.
SELECT * FROM OPENROWSET(
BULK 'inv-2017-01-19.csv',
DATA_SOURCE = 'MyAzureInvoices',
SINGLE_CLOB
) AS DataFile;
Kimlik bilgilerini ve dış veri kaynağını yapılandırma gibi eksiksiz OPENROWSET
örnekleri için bkz. Azure Blob Depolama'nde verilere toplu erişim örnekleri.
G. Azure Blob Depolama'da depolanan bir dosyadan tabloya aktarma
Aşağıdaki örnekte, SAS anahtarını oluşturduğunuz Azure Blob depolama konumundaki bir csv dosyasından veri yüklemek için OPENROWSET
komutunun nasıl kullanılacağı gösterilmektedir. Azure Blob depolama konumu bir dış veri kaynağı olarak yapılandırılır. Bu, kullanıcı veritabanında ana anahtar kullanılarak şifrelenen paylaşılan erişim imzası kullanan veritabanı kapsamlı bir kimlik bilgisi gerektirir.
-- Optional: a MASTER KEY is not required if a DATABASE SCOPED CREDENTIAL is not required because the blob is configured for public (anonymous) access!
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO
-- Optional: a DATABASE SCOPED CREDENTIAL is not required because the blob is configured for public (anonymous) access!
CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=2016-12-29T16:55:34Z***************';
-- Make sure that you don't have a leading ? in the SAS token, and that you
-- have at least read permission on the object that should be loaded srt=o&sp=r,
-- and that expiration period is valid (all dates are in UTC time)
CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://****************.blob.core.windows.net/curriculum',
-- CREDENTIAL is not required if a blob is configured for public (anonymous) access!
CREDENTIAL = MyAzureBlobStorageCredential
);
INSERT INTO achievements
WITH (TABLOCK) (
id,
description
)
SELECT * FROM OPENROWSET(
BULK 'csv/achievements.csv',
DATA_SOURCE = 'MyAzureBlobStorage',
FORMAT = 'CSV',
FORMATFILE = 'csv/achievements-c.xml',
FORMATFILE_DATA_SOURCE = 'MyAzureBlobStorage'
) AS DataFile;
H. Dış kaynak için yönetilen kimlik kullanma
Şunlar için geçerlidir: Azure SQL Yönetilen Örneği ve Azure SQL Veritabanı
Aşağıdaki örnek, yönetilen kimlik kullanarak bir kimlik bilgisi oluşturur, bir dış kaynak oluşturur ve ardından dış kaynakta barındırılan bir CSV'den veri yükler.
İlk olarak kimlik bilgilerini oluşturun ve dış kaynak olarak blob depolamayı belirtin:
CREATE DATABASE SCOPED CREDENTIAL sampletestcred
WITH IDENTITY = 'MANAGED IDENTITY';
CREATE EXTERNAL DATA SOURCE SampleSource
WITH (
LOCATION = 'abs://****************.blob.core.windows.net/curriculum',
CREDENTIAL = sampletestcred
);
Ardından blob depolamada barındırılan CSV dosyasından veri yükleyin:
SELECT * FROM OPENROWSET(
BULK 'Test - Copy.csv',
DATA_SOURCE = 'SampleSource',
SINGLE_CLOB
) as test;
Ben. S3 uyumlu nesne depolamayı kullanarak birkaç Parquet dosyasına erişmek için OPENROWSET kullanma
Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri.
Aşağıdaki örnek, tümü S3 uyumlu nesne depolamada depolanan farklı konumdan birkaç Parquet dosyasına erişim kullanır:
CREATE DATABASE SCOPED CREDENTIAL s3_dsc
WITH IDENTITY = 'S3 Access Key',
SECRET = 'contosoadmin:contosopwd';
GO
CREATE EXTERNAL DATA SOURCE s3_eds
WITH
(
LOCATION = 's3://10.199.40.235:9000/movies',
CREDENTIAL = s3_dsc
);
GO
SELECT * FROM OPENROWSET(
BULK (
'/decades/1950s/*.parquet',
'/decades/1960s/*.parquet',
'/decades/1970s/*.parquet'
),
FORMAT = 'PARQUET',
DATA_SOURCE = 's3_eds'
) AS data;
J. Azure Data Lake 2. Nesil'den birkaç Delta tablosuna erişmek için OPENROWSET kullanma
Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri.
Bu örnekte, veri tablosu kapsayıcısı Contoso
olarak adlandırılır ve bir Azure Data Lake 2. Nesil depolama hesabında bulunur.
CREATE DATABASE SCOPED CREDENTIAL delta_storage_dsc
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<SAS Token>';
CREATE EXTERNAL DATA SOURCE Delta_ED
WITH (
LOCATION = 'adls://<container>@<storage_account>.dfs.core.windows.net',
CREDENTIAL = delta_storage_dsc
);
SELECT *
FROM OPENROWSET(
BULK '/Contoso',
FORMAT = 'DELTA',
DATA_SOURCE = 'Delta_ED'
) AS result;
K. Genel-anonim veri kümesini sorgulamak için OPENROWSET kullanma
Aşağıdaki örnek, genel kullanıma açık NYC sarı taksi yolculuğu kayıtlarının açık veri kümesini kullanır.
Önce veri kaynağını oluşturun:
CREATE EXTERNAL DATA SOURCE NYCTaxiExternalDataSource
WITH (LOCATION = 'abs://nyctlc@azureopendatastorage.blob.core.windows.net');
Ad deseniyle eşleşen klasörlerde .parquet uzantısına sahip tüm dosyaları sorgula:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet'
) AS filerows;
Diğer örnekler
INSERT...SELECT * FROM OPENROWSET(BULK...)
kullanmayı gösteren diğer örnekler için aşağıdaki makalelere bakın:
- XML belgeleri (SQL Server) toplu içeri ve dışarı aktarma örnekleri
- Verileri toplu içeri aktarırken kimlik değerlerini koruma (SQL Server)
- Toplu içeri aktarma (SQL Server) sırasında null veya varsayılan değerleri tutma
- Verileri toplu içeri aktarmak için biçim dosyası kullanma (SQL Server)
- Verileri içeri veya dışarı aktarmak için karakter biçimini kullanma (SQL Server)
- SQL Server'da Bir Tablo Sütununu Atlamak için Biçim Dosyası Kullanma
- Bir veri alanını atlamak için biçim dosyası kullanma (SQL Server)
- Tablo sütunlarını veri dosyası alanlarına (SQL Server) eşlemek için biçim dosyası kullanma
- Azure SQL Yönetilen Örnekleri'nde OPENROWSET kullanarak veri kaynaklarını sorgulama
İlgili içerik
- SİL (Transact-SQL)
- FROM ifadesi artı JOIN, APPLY, PIVOT (Transact-SQL)
- Verileri Toplu İçeri ve Dışarı Aktarma (SQL Server)
- INSERT (Transact-SQL)
- OPENDATASOURCE (Transact-SQL)
- OPENQUERY (Transact-SQL)
- SEÇ (Transact-SQL)
- sp_serveroption (Transact-SQL)
- GÜNCELLEME (Transact-SQL)
- WHERE (Transact-SQL)
Şunlar için geçerlidir:SQL analiz uç noktası ve Microsoft Fabric Ambarı
T-SQL OPENROWSET
işlevi, Azure Data Lake storage'daki bir dosyanın içeriğini okur. Metin/CSV veya Parquet dosya biçimlerini okuyabilirsiniz.
OPENROWSET
işlevi bir dosyadaki verileri okur ve satır kümesi olarak döndürür.
OPENROWSET
işlevine sorgunun FROM
yan tümcesinde tablo adıymış gibi başvurulabilir.
Bu makale yalnızca Microsoft Fabric Warehouse için geçerlidir. Doku Ambarı'ndaki OPENROWSET işlevi ile SQL analiz uç noktası öğeleri arasında işlevsel farklılıklar vardır.
Diğer platformlardaki benzer örneklerin ayrıntıları ve bağlantıları:
- SQL Server söz dizimi için sürüm açılan menüsünde SQL Server sürümünüzü seçin.
- Azure SQL Yönetilen Örneği'ne ilişkin örnekler için bkz. OPENROWSET kullanarak veri kaynaklarını sorgulama.
- Azure SQL Veritabanı yalnızca OPENROWSET BULK (Transact-SQL) destekler.
- Azure Synapse'te sunucusuz SQL havuzlarıyla ilgili bilgi ve örnekler için bkz. Azure Synapse Analytics'te sunucusuz SQL havuzu kullanarak OPENROWSET'i kullanma.
- Azure Synapse'teki ayrılmış SQL havuzları
OPENROWSET
işlevini desteklemez.
Sözdizimi
SELECT <columns>
FROM OPENROWSET(
BULK 'https://<storage>.blob.core.windows.net/path/folder1=*/folder2=*/filename.parquet'
[, FORMAT = ('PARQUET' | 'CSV') ]
-- Text formatting options
[, DATAFILETYPE = {'char' | 'widechar' } ]
[, CODEPAGE = {'ACP' | 'OEM' | 'raw' | '<code_page>' } ]
-- Text/CSV formatting options
[, ROWTERMINATOR = 'row_terminator' ]
[, FIELDTERMINATOR = 'field_terminator' ]
[, FIELDQUOTE = 'string_delimiter' ]
[, ESCAPECHAR = 'escape_char' ]
[, HEADER_ROW = [true|false] ]
[, FIRSTROW = first_row ]
[, LASTROW = last_row ]
-- execution options
[, ROWS_PER_BATCH=number_of_rows]
)
[
WITH ( ( <column_name> <sql_datatype> [ '<column_path>' | <column_ordinal> ] )+ )
]
[ AS <alias> ]
Tartışmalar
BULK 'data_file'
Verileri okunacak ve satır kümesi olarak döndürülecek veri dosyalarının URI'sini. URI, Azure Data Lake storage veya Azure Blob depolamaya başvurabilir.
URI herhangi bir karakter dizisini temsil eden * karakter içerebilir ve OPENROWSET'in URI'yi desenle eşleştirmesini sağlar.
BULK giriş dosyası biçimi seçenekleri
FORMAT = { 'CSV' | 'PARQUET' }
Başvuruda bulunılan dosyanın biçimini belirtir. Yoldaki dosya uzantısı .csv, .parquet veya .parq ile bitiyorsa, seçeneğin FORMAT
belirtilmesi gerekmez. Örneğin:
SELECT *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet'
);
DATAFILETYPE = { 'char' | 'widechar' }
OPENROWSET(BULK)
tek bayt (ASCII, UTF8) veya çok baytlı (UTF16) dosya içeriğini okuması gerektiğini belirtir.
DATAFILETYPE değeri | Temsil edilen tüm veriler: |
---|---|
char (varsayılan) | Karakter biçimi. Daha fazla bilgi için bkz. Veri İçeri veya Dışarı Aktarmak için Karakter Biçimini Kullanma. |
widechar | Unicode karakterler. Daha fazla bilgi için bkz. Verileri İçeri veya Dışarı Aktarmak için Unicode Karakter Biçimini Kullanma. |
CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' }
Veri dosyasındaki verilerin kod sayfasını belirtir.
CODEPAGE
yalnızca veriler karakter değerleri 127'den büyük veya 32'den küçük olan karakter, varcharveya metin sütunları içeriyorsa geçerlidir.
CODEPAGE değeri | Açıklama |
---|---|
ACP |
char, varcharveya metin veri türünün sütunlarını ANSI/Microsoft Windows kod sayfasından (ISO 1252) SQL Server kod sayfasına dönüştürür. |
OEM (varsayılan) |
char, varcharveya metin veri türünün sütunlarını sistem OEM kodu sayfasından SQL Server kod sayfasına dönüştürür. |
RAW |
Bir kod sayfasından diğerine dönüştürme gerçekleşmez. Bu en hızlı seçenektir. |
code_page |
Veri dosyasındaki karakter verilerinin kodlandığı kaynak kod sayfasını gösterir; örneğin, 850. SQL Server 2016 (13.x) öncesi Önemli Sürümleri, 65001 (UTF-8 kodlama) kod sayfasını desteklemez. |
Metin/CSV biçimlendirme seçenekleri
ROWTERMINATOR = 'row_terminator'
char ve widechar veri dosyaları için kullanılacak satır sonlandırıcısını belirtir. Varsayılan satır sonlandırıcısı \r\n
(yeni satır karakteri). Daha fazla bilgi için bkz. Alan ve satır sonlandırıcılarını belirtme.
FIELDTERMINATOR = 'field_terminator'
char ve widechar veri dosyaları için kullanılacak alan sonlandırıcısını belirtir. Varsayılan alan sonlandırıcısı ( ,
virgül). Daha fazla bilgi için bkz. Alan ve satır sonlandırıcılarını belirtme.
FIELDQUOTE = 'field_quote'
CSV dosyasında tırnak karakteri olarak kullanılan bir karakteri belirtir. Belirtilmezse, teklif karakteri ("
) RFC 4180 standardında tanımlandığı gibi tırnak karakteri olarak kullanılır.
ESCAPE_CHAR = 'char'
Dosyada, kendisinden ve dosyadaki tüm sınırlayıcı değerlerden kaçmak için kullanılan karakteri belirtir. Kaçış karakterinin ardından kendisinden farklı bir değer veya sınırlayıcı değerlerden biri gelirse, değer okunduğunda kaçış karakteri atılır.
ESCAPECHAR parametresi, FIELDQUOTE'nin etkin olup olmamasına bakılmaksızın uygulanır. Alıntı karakterinden kaçmak için kullanılmaz. Alıntı karakteri, başka bir alıntı karakteriyle kaçırılmalıdır. Alıntı karakteri, sütun değeri içinde yalnızca değer, alıntı karakterleriyle kapsüllenmişse görünebilir.
HEADER_ROW = { TRUE | FALSE }
CSV dosyasının üst bilgi satırı içerip içermediğini belirtir. Varsayılan değer YANLIŞ'tır. PARSER_VERSION='2.0' içinde desteklenir. TRUE ise, sütun adları FIRSTROW bağımsız değişkenine göre ilk satırdan okunur. TRUE ve şema WITH kullanılarak belirtilirse, sütun adlarının bağlaması sıralı konumlarla değil sütun adıyla yapılır.
FIRSTROW = first_row
Yüklenecek ilk satırın sayısını belirtir. Varsayılan değer 1'dir. Bu, belirtilen veri dosyasındaki ilk satırı gösterir. Satır numaraları, satır sonlandırıcıları sayılarak belirlenir.
FIRSTROW
1 tabanlıdır.
LASTROW = last_row
Yüklenecek son satırın sayısını belirtir. Varsayılan değer 0'dır. Bu, belirtilen veri dosyasındaki son satırı gösterir.
Yürütme seçenekleri
ROWS_PER_BATCH = rows_per_batch
Veri dosyasındaki yaklaşık veri satır sayısını belirtir. Bu değer, gerçek satır sayısıyla aynı sırada olmalıdır.
Varsayılan olarak, ROWS_PER_BATCH
dosya özelliklerine (dosya sayısı, dosya boyutları, döndürülen veri türlerinin boyutu) göre tahmin edilir.
ROWS_PER_BATCH = 0
belirtmek, ROWS_PER_BATCH
atlama ile aynıdır.
WITH Şeması
WITH
şeması, OPENROWSET
işlevinin sonuç kümesini tanımlayan sütunları belirtir. Sonuç olarak döndürülecek her sütun için sütun tanımları içerir ve temel dosya sütunlarını sonuç kümesindeki sütunlara bağlayan eşleme kurallarını özetler.
<column_name>
Sonuç satır kümesinde döndürülecek sütunun adı. Bu sütunun verileri, <column_path>
veya <column_ordinal>
tarafından geçersiz kılınmadığı sürece, temel alınan dosya sütunundan aynı ada sahip okunur.
<column_type>
Sonuç kümesindeki sütunun T-SQL türü. temel alınan dosyadaki değerler, OPENROWSET
sonuçları döndürdüğünde bu türe dönüştürülür.
<column_path>
Parquet gibi karmaşık türlerde iç içe yerleştirilmiş alanlara başvurmak için kullanılan noktalı bir yol (örneğin $.description.location.lat
).
<column_ordinal>
WITH
yan tümcesindeki sütuna eşlenecek sütunun fiziksel dizinini temsil eden bir sayı.
Açıklamalar
Desteklenen özellikler tabloda özetlenmiştir:
Özellik | Destekleniyor | Mevcut değil |
---|---|---|
Dosya biçimleri | Parquet, CSV | Delta, Azure Cosmos DB |
Kimlik Doğrulaması | EntraID geçişi, genel depolama | SAS/SAK, SPN, Yönetilen erişim |
Depolama | Azure Blob Depolama, Azure Veri Gölü Depolama | OneLake |
Seçenekler | Içinde yalnızca tam/mutlak URI OPENROWSET |
içinde OPENROWSET göreli URI yolu DATA_SOURCE |
Bölümleme |
sorguda filepath() işlevini kullanabilirsiniz. |
Örnekler
A. Azure Blob Depolama'dan parquet dosyası okuma
Aşağıdaki örnekte bir Parquet dosyasından 100 satırın nasıl okunabileceğini görebilirsiniz:
SELECT TOP 100 *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet'
);
B. Özel CSV dosyasını okuma
Aşağıdaki örnekte, üst bilgi satırı ve satırları ve alanları ayıran açıkça belirtilen sonlandırıcı karakterleri içeren bir CSV dosyasındaki satırların nasıl okunduğunu görebilirsiniz:
SELECT *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv',
HEADER_ROW = TRUE,
ROW_TERMINATOR = '\n',
FIELD_TERMINATOR = ',');
C. Dosya okurken dosya sütunu şemasını belirtme
Aşağıdaki örnekte, OPENROWSET işlevinin sonucu olarak döndürülecek satırın şemasını açıkça nasıl belirtebileceğinizi görebilirsiniz:
SELECT *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet')
WITH (
updated DATE
,confirmed INT
,deaths INT
,iso2 VARCHAR(8000)
,iso3 VARCHAR(8000)
);
D. Bölümlenmiş veri kümelerini okuma
Aşağıdaki örnekte, eşleşen dosya yolundan URI'nin bölümlerini okumak için filepath()
işlevinin nasıl kullanılacağını görebilirsiniz:
SELECT TOP 10
files.filepath(2) AS area
, files.*
FROM OPENROWSET(
BULK 'https://synapseaisolutionsa.blob.core.windows.net/public/NYC_Property_Sales_Dataset/*_*.csv',
HEADER_ROW = TRUE)
AS files
WHERE files.filepath(1) = '2009';