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
Microsoft Fabric'te
SQL analiz uç noktasıMicrosoft Fabric'te
ambarMicrosoft Fabric'te SQL veritabanı
İşlev, OPENROWSET bir veya birden çok dosyadaki verileri okur ve içeriği satır kümesi olarak döndürür. Bir hizmete bağlı olarak, dosya Azure Blob Depolama, Azure Data Lake depolama, şirket içi disk, ağ paylaşımları vb. içinde depolanabilir. Metin/CSV, Parquet veya JSON satırları gibi çeşitli dosya biçimlerini okuyabilirsiniz.
OPENROWSET işlevine sorgunun FROM yan tümcesinde tablo adıymış gibi başvurulabilir. Deyimindeki SELECT verileri okumak veya , UPDATE, , INSERTDELETE, , MERGEveya CTAS deyimlerindeki CETAShedef verileri güncelleştirmek için kullanılabilir.
-
OPENROWSET(BULK), dış veri dosyalarından verileri okumak için tasarlanmıştır. -
OPENROWSETolmadanBULK, başka bir veritabanı altyapısından okumak için tasarlanmıştır. Daha fazla bilgi için bkz. OPENROWSET (Transact-SQL).
Bu makale ve içinde OPENROWSET(BULK) ayarlanan bağımsız değişken platformlar arasında farklılık gösterir.
- Microsoft Fabric söz dizimi için sürüm açılan listesinde Doku'ya tıklayın.
- SQL Server, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği söz dizimi için sürüm açılan listesinden platformunuzu seçin.
Diğer platformlardaki benzer örneklerin ayrıntıları ve bağlantıları:
- Azure SQL Veritabanı hakkında
OPENROWSETdaha fazla bilgi için bkz. Azure SQL Veritabanı ile veri sanallaştırma. - Azure SQL Yönetilen Örneği hakkında
OPENROWSETdaha fazla bilgi için bkz. Azure SQL Yönetilen Örneği ile veri sanallaştırma. - 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ı
OPENROWSETişlevini desteklemez.
Transact-SQL söz dizimi kuralları
Sözdizimi
SQL Server, Azure SQL Database, SQL database in Fabric ve Azure SQL Managed Instance için:
OPENROWSET( BULK 'data_file_path',
<bulk_option> ( , <bulk_option> )*
)
[
WITH ( ( <column_name> <sql_datatype> [ '<column_path>' | <column_ordinal> ] )+ )
]
<bulk_option> ::=
DATA_SOURCE = 'data_source_name' |
-- file format options
CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } |
DATAFILETYPE = { 'char' | 'widechar' } |
FORMAT = <file_format> |
FORMATFILE = 'format_file_path' |
FORMATFILE_DATA_SOURCE = 'data_source_name' |
SINGLE_BLOB |
SINGLE_CLOB |
SINGLE_NCLOB |
-- Text/CSV options
ROWTERMINATOR = 'row_terminator' |
FIELDTERMINATOR = 'field_terminator' |
FIELDQUOTE = 'quote_character' |
-- Error handling options
MAXERRORS = maximum_errors |
ERRORFILE = 'file_name' |
ERRORFILE_DATA_SOURCE = 'data_source_name' |
-- Execution options
FIRSTROW = first_row |
LASTROW = last_row |
ORDER ( { column [ ASC | DESC ] } [ , ...n ] ) [ UNIQUE ] ] |
ROWS_PER_BATCH = rows_per_batch
Doku Veri Ambarı söz dizimi
OPENROWSET( BULK 'data_file_path',
<bulk_option> ( , <bulk_option> )*
)
[
WITH ( ( <column_name> <sql_datatype> [ '<column_path>' | <column_ordinal> ] )+ )
]
<bulk_option> ::=
DATA_SOURCE = 'data_source_name' |
-- file format options
CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } |
DATAFILETYPE = { 'char' | 'widechar' } |
FORMAT = <file_format> |
-- Text/CSV options
ROWTERMINATOR = 'row_terminator' |
FIELDTERMINATOR = 'field_terminator' |
FIELDQUOTE = 'quote_character' |
ESCAPECHAR = 'escape_char' |
HEADER_ROW = [true|false] |
PARSER_VERSION = 'parser_version' |
-- Error handling options
MAXERRORS = maximum_errors |
ERRORFILE = 'file_name' |
-- Execution options
FIRSTROW = first_row |
LASTROW = last_row |
ROWS_PER_BATCH = rows_per_batch
Arguments
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, varchar veya nvarchar türünde tek satırlı, tek sütunlu satır kümesi olarak okunacağını belirtebilirsiniz. Varsayılan davranış, izleyen bağımsız değişken açıklamalarında açıklanmıştır.
seçeneğinin nasıl kullanılacağı BULK hakkında bilgi için bu makalenin devamında yer alan Açıklamalar bölümüne bakın. Seçeneğin gerektirdiği izinler BULK hakkında bilgi için bu makalenin devamındaki İzinler bölümüne bakın.
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_path'
Verileri okunacak ve satır kümesi olarak döndürülecek olan veri dosyalarının yolu veya URI'si.
URI, Azure Data Lake storage veya Azure Blob depolamaya başvurabilir. Verileri okunacak ve satır kümesi olarak döndürülecek veri dosyalarının URI'sini.
Desteklenen yol biçimleri şunlardır:
-
<drive letter>:\<file path>yerel disk üzerindeki dosyalara erişmek için -
\\<network-share\<file path>ağ paylaşımlarında dosyalara erişmek için -
adls://<container>@<storage>.dfs.core.windows.net/<file path>Azure Data Lake Storage'a erişmek için -
abs://<storage>.blob.core.windows.net/<container>/<file path>Azure Blob Depolama'ya erişmek için -
s3://<ip-address>:<port>/<file path>s3 uyumlu depolamaya erişmek için
Note
Bu makale ve desteklenen URI desenleri farklı platformlarda farklılık gösterir. Microsoft Fabric Veri Ambarı'nda bulunan URI desenleri için sürüm açılan listesinde Doku'ya tıklayın.
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.
-
https://<storage>.blob.core.windows.net/<container>/<file path>Azure Blob Depolama'ya veya Azure Data Lake Storage'a erişmek için -
https://<storage>.dfs.core.windows.net/<container>/<file path>Azure Data Lake Storage'a erişmek için -
abfss://<container>@<storage>.dfs.core.windows.net/<file path>Azure Data Lake Storage'a erişmek için -
https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/<file path>- Microsoft Fabric'te OneLake'e erişmek için
Note
Bu makale ve desteklenen URI desenleri farklı platformlarda farklılık gösterir. SQL Server, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği'nde kullanılabilen URI desenleri için sürüm açılan listesinden ürünü seçin.
URI, herhangi bir karakter dizisiyle eşleşecek karakteri içerebilir * ve URI ile desen eşleştirmeye olanak sağlar OPENROWSET . Ayrıca, tüm alt klasörlerde özyinelemeli dolaşmayı etkinleştirmek için ile /** sona erebilir. SQL Server'da bu davranış SQL Server 2022 (16.x) sürümünden itibaren kullanılabilir.
Örneğin:
SELECT TOP 10 *
FROM OPENROWSET(
BULK '<scheme:>//pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/*.parquet'
);
URI tarafından başvurulabilen depolama türleri aşağıdaki tabloda gösterilmiştir:
| Sürüm | On-premises | Azure depolama | Fabric'de OneLake | S3 | Google Cloud (GCS) |
|---|---|---|---|---|---|
| SQL Server 2017 (14.x), SQL Server 2019 (15.x) | Yes | Yes | Hayı | Hayı | Hayı |
| SQL Server 2022 (16.x) | Yes | Yes | Hayı | Yes | Hayı |
| Azure SQL Veritabanı | Hayı | Yes | Hayı | Hayı | Hayı |
| Azure SQL Yönetilen Varlık | Hayı | Yes | Hayı | Hayı | Hayı |
| Azure Synapse Analytics'te sunucusuz SQL havuzu | Hayı | Yes | Yes | Hayı | Hayı |
| Microsoft Fabric Warehouse ve SQL analytics uç noktası | Hayı | Yes | Yes | Evet, OneLake'i Fabric kısayollarında kullanıyorum | Evet, OneLake'i Fabric kısayollarında kullanıyorum |
| Microsoft Fabric'te SQL veritabanı | Hayı | Evet, OneLake'i Fabric kısayollarında kullanıyorum | Yes | Evet, OneLake'i Fabric kısayollarında kullanıyorum | Evet, OneLake'i Fabric kısayollarında kullanıyorum |
Microsoft Fabric'te OneLake'te depolanan dosyalardan, özellikle bir Fabric Lakehouse'un OPENROWSET(BULK) doğrudan veri okumak için kullanabilirsiniz. Bu, dış hazırlama hesaplarına (ADLS 2. Nesil veya Blob Depolama gibi) olan gereksinimi ortadan kaldırır ve Doku izinlerini kullanarak çalışma alanı tarafından yönetilen SaaS yerel alımını etkinleştirir. Bu işlev şu özellikleri destekler:
- Lakehouses'ta klasörlerden
Filesokuma - Aynı kiracı içinde çalışma alanından ambara yükler
- Microsoft Entra Id kullanarak yerel kimlik zorlama
hem hem de için COPY INTO geçerli olan OPENROWSET(BULK) bakın.
DATA_SOURCE
DATA_SOURCE veri dosyası yolunun kök konumunu tanımlar. BULK yolunda göreli yollar kullanmanıza olanak tanır. Veri kaynağı CREATE EXTERNAL DATA SOURCE ile oluşturulur.
Kök konuma ek olarak, bu konumdaki dosyalara erişmek için kullanılabilecek özel kimlik bilgileri tanımlayabilir.
Örneğin:
CREATE EXTERNAL DATA SOURCE root
WITH (LOCATION = '<scheme:>//pandemicdatalake.blob.core.windows.net/public')
GO
SELECT *
FROM OPENROWSET(
BULK '/curated/covid-19/bing_covid-19_data/latest/*.parquet',
DATA_SOURCE = 'root'
);
Dosya biçimi seçenekleri
CODEPAGE
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, varchar veya metin sütunları içeriyorsa geçerlidir. Geçerli değerler :'ACP', 'OEM', 'RAW' veya 'code_page':
| CODEPAGE değeri | Description |
|---|---|
ACP |
ANSI/Microsoft Windows kod sayfasından (ISO 1252) char, varchar veya metin veri türü sütunlarını SQL Server kod sayfasına dönüştürür. |
OEM (varsayılan) |
Karakter, varchar veya metin veri türü sütunlarını sistem OEM kod 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. |
Important
SQL Server 2016 (13.x) öncesi sürümler, 65001 (UTF-8 kodlama) kod sayfasını desteklemez.
CODEPAGE, Linux'ta desteklenen bir seçenek değildir.
Note
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.
DATAFILETYPE
OPENROWSET(BULK) Tek baytlık (ASCII, UTF8) veya çok baytlı (UTF16) dosya içeriğinin okunması gerektiğini belirtir. Geçerli değerler char ve widechar değerleridir:
| 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. |
FORMAT
Başvuruda bulunılan dosyanın biçimini belirtir, örneğin:
SELECT *
FROM OPENROWSET(BULK N'<data-file-path>',
FORMAT='CSV') AS cars;
Geçerli değerler, sürüme bağlı olarak 'CSV' ( RFC 4180 standardıyla uyumlu virgülle ayrılmış değerler dosyası), 'PARQUET', 'DELTA' (sürüm 1.0) ve 'JSONL' değerleridir:
| Sürüm | CSV | PARKE | DELTA | JSONL |
|---|---|---|---|---|
| SQL Server 2017 (14.x), SQL Server 2019 (15.x) | Yes | Hayı | Hayı | Hayı |
| SQL Server 2022 (16.x) ve sonraki sürümleri | Yes | Yes | Yes | Hayı |
| Azure SQL Veritabanı | Yes | Yes | Yes | Hayı |
| Azure SQL Yönetilen Varlık | Yes | Yes | Yes | Hayı |
| Azure Synapse Analytics'te sunucusuz SQL havuzu | Yes | Yes | Yes | Hayı |
| Microsoft Fabric Warehouse ve SQL analytics uç noktası | Yes | Yes | Hayı | Yes |
| Microsoft Fabric'te SQL veritabanı | Yes | Yes | Hayı | Hayı |
Important
İşlev OPENROWSET yalnızca yeni satırla sınırlanmış JSON biçimini okuyabilir.
Yeni satır karakteri JSON belgeleri arasında ayırıcı olarak kullanılmalıdır ve JSON belgesinin ortasına yerleştirilemez.
FORMAT Yoldaki dosya uzantısı , , .csv.tsv.parquet.parqveya .jsonl.ldjsonile .ndjsonbitiyorsa seçeneği belirtilmesi gerekmez. Örneğin işlev, OPENROWSET(BULK) aşağıdaki örnekteki uzantıya göre biçimin parquet olduğunu bilir:
SELECT *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet'
);
Dosya yolu şu uzantılardan biriyle bitmezse, bir FORMATbelirtmeniz gerekir, örneğin:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'abfss://nyctlc@azureopendatastorage.blob.core.windows.net/yellow/**',
FORMAT='PARQUET'
)
FORMATFILE
Biçim dosyasının tam yolunu belirtir. SQL Server iki tür biçim dosyasını destekler: XML ve XML olmayan.
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'D:\XChange\test-csv.csv',
FORMATFILE= 'D:\XChange\test-format-file.xml'
)
Sonuç kümesinde sütun türlerini tanımlamak için bir biçim dosyası gereklidir. Tek özel durum, SINGLE_CLOB, SINGLE_BLOBveya 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.
FORMATFILE_DATA_SOURCE
FORMATFILE_DATA_SOURCE dosya yolunun kök konumunu tanımlar. FORMATFILE seçeneğinde göreli yolları kullanmanızı sağlar.
CREATE EXTERNAL DATA SOURCE root
WITH (LOCATION = '//pandemicdatalake/public/curated')
GO
SELECT *
FROM OPENROWSET(
BULK '//pandemicdatalake/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
FORMATFILE = 'covid-19/bing_covid-19_data/latest/bing_covid-19_data.fmt',
FORMATFILE_DATA_SOURCE = 'root'
);
Dosya veri kaynağı biçimi , CREATE EXTERNAL DATA SOURCE ile oluşturulur. Kök konuma ek olarak, bu konumdaki dosyalara erişmek için kullanılabilecek özel kimlik bilgileri tanımlayabilir.
Metin/CSV seçenekleri
ROWTERMINATOR
Char ve widechar veri dosyaları için kullanılacak satır sonlandırıcısını belirtir, örneğin:
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
ROWTERMINATOR = '\n'
);
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
Char ve widechar veri dosyaları için kullanılacak alan sonlandırıcısını belirtir, örneğin:
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
FIELDTERMINATOR = '\t'
);
Varsayılan alan sonlandırıcısı ( , virgül). Daha fazla bilgi için bkz. Alan ve Satır Sonlandırıcıları Belirtme. Örneğin, bir dosyadan sekmeyle ayrılmış verileri okumak için:
FIELDQUOTE = 'field_quote'
SQL Server 2017'den (14.x) başlayarak, bu bağımsız değişken aşağıdaki New York örneğinde olduğu gibi CSV dosyasında tırnak karakteri olarak kullanılan bir karakteri belirtir:
Empire State Building,40.748817,-73.985428,"20 W 34th St, New York, NY 10118","\icons\sol.png"
Statue of Liberty,40.689247,-74.044502,"Liberty Island, New York, NY 10004","\icons\sol.png"
Bu seçenek için değer olarak yalnızca tek bir karakter belirtilebilir. Belirtilmezse, teklif karakteri ("), RFC 4180 standardında tanımlandığı gibi tırnak karakteri olarak kullanılır. Karakter FIELDTERMINATOR (örneğin, virgül) alan tırnak içine yerleştirilebilir ve karakterlerle FIELDQUOTE sarmalanan hücrede normal bir karakter olarak kabul edilir.
Örneğin, önceki New York örnek CSV veri kümesini okumak için kullanın FIELDQUOTE = '"'. Adres alanının değerleri tek bir değer olarak tutulur, (tırnak işareti) karakterleri içindeki " virgüllerle birden çok değere bölünemez.
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
FIELDQUOTE = '"'
);
PARSER_VERSION = 'parser_version'
Şunlar için geçerlidir: Sadece Fabric Data Warehouse
Dosyaları okurken kullanılacak ayrıştırıcı sürümünü belirtir. Şu anda desteklenen CSV ayrıştırıcı sürümleri 1.0 ve 2.0'dır:
- PARSER_VERSION = '1.0'
- PARSER_VERSION = '2.0'
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'abfss://nyctlc@azureopendatastorage.blob.core.windows.net/yellow/**',
FORMAT='CSV',
PARSER_VERSION = '2.0'
)
CSV ayrıştırıcı sürüm 2.0, performans için optimize edilmiş varsayılan uygulamadır, ancak 1.0 sürümünde mevcut tüm eski seçenekleri ve kodlamaları desteklemez. OPENROWSET kullanıldığında, Fabric Data Warehouse yalnızca o sürümde desteklenen seçenekleri kullanırsanız, sürüm açıkça belirtilmemiş olsa bile otomatik olarak 1.0 sürümüne geri döner. Bazı durumlarda, ayrıştırıcı sürüm 2.0'da bildirilen desteklenmeyen özelliklerden kaynaklanan hataları çözmek için 1.0 sürümünü açıkça belirtmeniz gerekebilir.
CSV ayrıştırıcı sürüm 1.0 özellikleri:
- Aşağıdaki seçenekler desteklenmez: HEADER_ROW.
- Varsayılan sonlandırıcılar ve
\r\n\nşeklindedir\r. - Satır sonlandırıcısı olarak (yeni satır) belirtirseniz
\n, otomatik olarak bir\r(satır başı) karakteri eklenir ve bu da satır sonlandırıcısıyla\r\nsonuçlanır.
CSV ayrıştırıcı sürüm 2.0 özellikleri:
- Tüm veri türleri desteklenmez.
- Karakter sütun uzunluğu üst sınırı 8000'dir.
- Satır boyutu üst sınırı 8 MB'tır.
- Aşağıdaki seçenekler desteklenmez:
DATA_COMPRESSION. - Alıntılanan boş dize ("") boş dize olarak yorumlanır.
- DATEFORMAT SET seçeneği kabul edilmez.
-
Tarih veri türü için desteklenen biçim:
YYYY-MM-DD -
Zaman veri türü için desteklenen biçim:
HH:MM:SS[.fractional seconds] -
datetime2 veri türü için desteklenen biçim:
YYYY-MM-DD HH:MM:SS[.fractional seconds] - Varsayılan sonlandırıcılar ve
\r\nşeklindedir\n.
ESCAPE_CHAR = 'char'
Dosyada, kendisinden kaçmak için kullanılan karakteri ve dosyadaki tüm sınırlayıcı değerleri belirtir, örneğin:
Place,Address,Icon
Empire State Building,20 W 34th St\, New York\, NY 10118,\\icons\\sol.png
Statue of Liberty,Liberty Island\, New York\, NY 10004,\\icons\\sol.png
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 parametresinin etkin olup olmamasına FIELDQUOTE 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 yalnızca değer, alıntı karakterleriyle kapsüllenmişse sütun değeri içinde görüntülenebilir.
Aşağıdaki örnekte virgül (,) ve ters eğik çizgi (\) kaçış karakteriyle ve \,olarak \\ gösterilir:
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
ESCAPECHAR = '\'
);
HEADER_ROW = { DOĞRU | SAHTE }
CSV dosyasının diğer veri satırlarıyla döndürülmemesi gereken üst bilgi satırı içerip içermediğini belirtir. Aşağıdaki örnekte üst bilgi içeren bir CSV dosyası örneği gösterilmiştir:
Place,Latitude,Longitude,Address,Area,State,Zipcode
Empire State Building,40.748817,-73.985428,20 W 34th St,New York,NY,10118
Statue of Liberty,40.689247,-74.044502,Liberty Island,New York,NY,10004
Varsayılan FALSE değeridir. Fabric Data Warehouse'da destekleniyor PARSER_VERSION='2.0' . ise TRUE, sütun adları bağımsız değişkene FIRSTROW göre ilk satırdan okunur. ve şeması kullanılarak TRUEbelirtilirseWITH, sütun adlarının bağlaması sıralı konumlara göre değil, sütun adıyla yapılır.
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
HEADER_ROW = TRUE
);
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.
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
ERRORFILE = '<error-file-path>'
);
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.
HATA_DOSYASI_VERİ_KAYNAĞI
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 konumunu gösteren adlandırılmış bir dış veri kaynağıdır.
CREATE EXTERNAL DATA SOURCE root
WITH (LOCATION = '<root-error-file-path>')
GO
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
ERRORFILE = '<relative-error-file-path>',
ERRORFILE_DATA_SOURCE = 'root'
);
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.
SELECT *
FROM OPENROWSET(
BULK '<data-file-path>',
MAXERRORS = 0
);
maximum_errors için varsayılan değer 10'dur.
Note
MAX_ERRORS sınırlamalar veya CHECKpara ve bigint veri türlerini dönüştürme için geçerli değildir.
Veri işleme seçenekleri
BIRINCI SIRA = 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 bir tahmindir ve gerçek satır sayısının yaklaşık değeri (tek bir büyüklük sırası içinde) 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_BATCHatlama ile aynıdır. Örneğin:
SELECT TOP 10 *
FROM OPENROWSET(
BULK '<data-file-path>',
ROWS_PER_BATCH = 100000
);
ORDER ( { column [ ASC | DESC ] } [ ,... n ] [ BENZERSİz ] )
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
FROMyan tümcesinde satır kümesini kaynak tablo olarak kullanma.
UNIQUE
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, ntext ve görüntü) sütunları belirtilemiyor.
İçerik seçenekleri
SINGLE_BLOB
data_file içeriğini varbinary(max) türünde tek satırlı, tek sütunlu satır kümesi olarak döndürür.
Important
XML verilerini SINGLE_BLOB ve SINGLE_CLOByerine 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
data_file Unicode olarak okuyarak, içeriği geçerli veritabanının harmanlamasını kullanarak nvarchar(max) türünde tek satırlı, tek sütunlu satır kümesi olarak döndürür.
SELECT * FROM OPENROWSET(
BULK N'C:\Text1.txt',
SINGLE_NCLOB
) AS Document;
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.
Aşağıdaki örnekte:
- Sütunda
country_regionvarchar(50) türü var ve aynı ada sahip temel sütuna başvuruda bulunuyor - Sütun
date, farklı bir fiziksel ada sahip bir CSV/Parquet sütununa veya JSONL özelliğine başvuruyor - Sütun
cases, dosyadaki üçüncü sütuna başvuruyor - Sütun
fatal_casesiç içe parquet özelliğine veya JSONL alt nesnesine başvuruyor
SELECT *
FROM OPENROWSET(<...>)
WITH (
country_region varchar(50), --> country_region column has varchar(50) type and referencing the underlying column with the same name
[date] DATE '$.updated', --> date is referencing a CSV/Parquet column or JSONL property with a different physical name
cases INT 3, --> cases is referencing third column in the file
fatal_cases INT '$.statistics.deaths' --> fatal_cases is referencing a nested Parquet property or JSONL sub-object
);
<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. Sütunun adı, sütun adı tanımlayıcıları için kurallara uymalıdır.
<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. Daha fazla bilgi için bkz. Doku Ambarı'ndaki veri türleri.
<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ı.
Permissions
OPENROWSET dış veri kaynaklarıyla aşağıdaki izinleri gerektirir:
-
ADMINISTER DATABASE BULK OPERATIONSveya ADMINISTER BULK OPERATIONS
Aşağıdaki T-SQL örneği bir sorumluya verir ADMINISTER DATABASE BULK OPERATIONS .
GRANT ADMINISTER DATABASE BULK OPERATIONS TO [<principal_name>];
Hedef depolama hesabı özelse, sorumlunun kapsayıcı veya depolama hesabı düzeyinde Depolama Blobu Veri Okuyucusu rolü (veya üzeri) atanmış olması gerekir.
Remarks
FROMile kullanılan birSELECTyan tümcesi, tamOPENROWSET(BULK...)işlevselliğiyle tablo adı yerineSELECTçağırabilir.OPENROWSETseçeneğiyleBULK,FROMyan tümcesinde aralık değişkeni veya diğer ad olarak da bilinen bir bağıntı adı gerektirir. Msg 491: "from yan tümcesindeki toplu satır kümesi için bir bağıntı adı belirtilmelidir" hatasında sonuçlar eklenemediAS <table_alias>.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_aliasFROM OPENROWSET(BULK...) AS table_alias(column_alias,...n)
SELECT...FROM OPENROWSET(BULK...)deyimi, verileri tabloya aktarmadan doğrudan bir dosyadaki verileri sorgular.Deyimi
SELECT...FROM OPENROWSET(BULK...), sütun adlarını ve veri türlerini belirtmek için bir biçim dosyası kullanarak toplu sütun diğer adlarını listeleyebilir.
- Bir veya
OPENROWSET(BULK...)deyimindeINSERTkaynak tablo olarak kullanmakMERGE, verileri bir veri dosyasından tabloya 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 BULKseçeneği birINSERTdeyimiyle kullanıldığında,BULKyan tümcesi tablo ipuçlarını destekler.TABLOCKgibi normal tablo ipuçlarına ek olarak,BULKyan tümcesi şu özel tablo ipuçlarını kabul edebilir:IGNORE_CONSTRAINTS(yalnızcaCHECKveFOREIGN KEYkısıtlamalarını yoksayar),IGNORE_TRIGGERS,KEEPDEFAULTSveKEEPIDENTITY. 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. - Verileri tam kurtarma modeliyle içeri aktarmak için kullanıldığında
OPENROWSET (BULK ...)günlüğü iyileştirmez.
Note
OPENROWSETkullandığı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.
Microsoft Fabric Data Warehouse'da desteklenen özellikler tabloda özetlenmiştir:
| Feature | Supported | Mevcut değil |
|---|---|---|
| Dosya biçimleri | Parket, CSV, JSONL | Delta, Azure Cosmos DB, JSON, ilişkisel veritabanları |
| Authentication | EntraID/SPN geçişi, genel depolama | SAS/SAK, SPN, Yönetilen erişim |
| Storage | Azure Blob Storage, Azure Data Lake Storage, OneLake in Microsoft Fabric | |
| Options | Içinde yalnızca tam/mutlak URI OPENROWSET |
içinde OPENROWSETgöreli URI yolu DATA_SOURCE |
| Partitioning | sorguda filepath() işlevini kullanabilirsiniz. |
SQLCHAR, SQLNCHAR veya SQLBINARY verilerini toplu içeri aktarma
OPENROWSET(BULK...) belirtilmezse en fazla SQLCHAR, SQLNCHARveya SQLBINARY veri uzunluğunun 8.000 bayt'ı aşmadığını varsayar. İçeri aktarılan veriler, 8.000 bayt'ı aşan varchar(max), nvarchar(max)veya varbinary(max) nesneleri içeren bir LOB veri alanındaysa, veri alanı için uzunluk üst sınırını tanımlayan bir XML biçim dosyası kullanmanız gerekir. En fazla uzunluğu belirtmek için biçim dosyasını düzenleyin ve MAX_LENGTH özniteliğini bildirin.
Note
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ü | Effect |
|---|---|
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. |
Dosya meta veri işlevleri
Bazen, hangi dosya veya klasör kaynağının sonuç kümesindeki belirli bir satırla ilişkili olduğunu bilmeniz gerekebilir.
Fonksiyonları filepath ve filename dosya adlarını ve/veya sonuç kümesinde yolu döndürmek için kullanabilirsin. Ya da dosya adı ve/veya klasör yoluna göre verileri filtrelemek için onları kullanabilirsiniz. Aşağıdaki bölümlerde, örnekler ile birlikte kısa açıklamalar bulabilirsiniz.
Dosya adı fonksiyonu
Bu fonksiyon, satırın geldiği dosya adını döndürür.
Dönüş veri tipi nvarchar(1024)'dir. En iyi performans için dosya adı fonksiyonunun sonucunu her zaman uygun veri tipine aktarın. Karakter veri tipi kullanıyorsanız, uygun uzunluk kullandığınızdan emin olun.
Aşağıdaki örnek, 2017 yılının son üç ayına ait NYC Yellow Taxi veri dosyalarını okuyor ve dosya başına yapılan yolculuk sayısını geri döndürüyor. Sorgu OPENROWSET kısmı hangi dosyaların okunacağını belirtir.
SELECT
nyc.filename() AS [filename]
,COUNT_BIG(*) AS [rows]
FROM
OPENROWSET(
BULK 'parquet/taxi/year=2017/month=9/*.parquet',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT='PARQUET'
) nyc
GROUP BY nyc.filename();
Aşağıdaki örnek, okunacak dosyaları filtrelemek için cümlede filename() nasıl WHERE kullanılabileceğini göstermektedir. Sorgu kısmındaki OPENROWSET tüm klasöre erişir ve maddedeki WHERE dosyaları filtreler.
Sonuçlarınız önceki örnekle aynı olacaktır.
SELECT
r.filename() AS [filename]
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'csv/taxi/yellow_tripdata_2017-*.csv',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT = 'CSV',
FIRSTROW = 2)
WITH (C1 varchar(200) ) AS [r]
WHERE
r.filename() IN ('yellow_tripdata_2017-10.csv', 'yellow_tripdata_2017-11.csv', 'yellow_tripdata_2017-12.csv')
GROUP BY
r.filename()
ORDER BY
[filename];
Dosya yolu fonksiyonu
Bu fonksiyon tam bir yol veya yolun bir kısmını döndürür:
- Parametre olmadan çağrıldığında, bir satırın başladığı tam dosya yolunu döndürür.
- Parametre ile çağrıldığında, parametrede belirtilen konumda joker kartla eşleşen yolun bir kısmını döndürür. Örneğin, parametre değeri 1, yolun ilk joker kartla eşleşen bir kısmını döndürür.
Dönüş veri tipi nvarchar(1024)'dir. En iyi performans için her zaman fonksiyonun filepath sonucunu uygun veri tipine aktarın. Karakter veri tipi kullanıyorsanız, uygun uzunluk kullandığınızdan emin olun.
Aşağıdaki örnek, 2017 yılının son üç ayına ait NYC Yellow Taxi veri dosyalarını okumaktadır. Dosya yolu başına gidiş sayısını döndürür. Sorgu OPENROWSET kısmı hangi dosyaların okunacağını belirtir.
SELECT
r.filepath() AS filepath
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'csv/taxi/yellow_tripdata_2017-1*.csv',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT = 'CSV',
FIRSTROW = 2
)
WITH (
vendor_id INT
) AS [r]
GROUP BY
r.filepath()
ORDER BY
filepath;
Aşağıdaki örnek, okunacak dosyaları filtrelemek için cümlede filepath() nasıl WHERE kullanılabileceğini göstermektedir.
Sorgu bölümündeki joker kartları OPENROWSET kullanabilir ve maddedeki WHERE dosyaları filtreleyebilirsiniz. Sonuçlarınız önceki örnekle aynı olacaktır.
SELECT
r.filepath() AS filepath
,r.filepath(1) AS [year]
,r.filepath(2) AS [month]
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'csv/taxi/yellow_tripdata_*-*.csv',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT = 'CSV',
FIRSTROW = 2
)
WITH (
vendor_id INT
) AS [r]
WHERE
r.filepath(1) IN ('2017')
AND r.filepath(2) IN ('10', '11', '12')
GROUP BY
r.filepath()
,r.filepath(1)
,r.filepath(2)
ORDER BY
filepath;
Examples
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 kök dizinde Text1.txt bulunan adlı C: dosyadan dosya verilerini bir 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.fmtbiçim dosyası, values.txtiç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\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'
);
Important
ODBC sürücüsü 64 bit olmalıdır. Bunu doğrulamak için Windows'ta 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;
I. 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ı Contosoolarak 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 uzantılı .parquet tüm dosyaları sorgula:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet'
) AS filerows;
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, işlevin sonucu olarak döndürülecek satırın şemasını açıkça nasıl belirtebileceğinizi OPENROWSET 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://<storage account>.blob.core.windows.net/public/NYC_Property_Sales_Dataset/*_*.csv',
HEADER_ROW = TRUE)
AS files
WHERE files.filepath(1) = '2009';
E. JSONL dosyasını okurken dosya sütunu şemasını belirtme
Aşağıdaki örnekte, işlevin sonucu olarak döndürülecek satırın şemasını açıkça nasıl belirtebileceğinizi OPENROWSET görebilirsiniz:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.dfs.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.jsonl')
WITH (
country_region varchar(50),
date DATE '$.updated',
cases INT '$.confirmed',
fatal_cases INT '$.deaths'
);
JSONL dosyasıysa, sütun adı özelliklerdeki bir sütunun fiziksel adıyla eşleşmiyorsa, JSON yolundaki fiziksel adı tür tanımından sonra belirtebilirsiniz. Birden çok özellik kullanabilirsiniz. Örneğin, $.location.latitude parquet karmaşık türlerinde veya JSON alt nesnelerinde iç içe özelliklere başvurmak için.
Diğer örnekler
A. Bir Fabric Lakehouse'dan CSV dosyasını okumak için OPENROWSET kullanın
Bu örnekte, OPENROWSET Fabric Lakehouse'da bulunan ve klasörün altında customer.csv saklanan Files/Contoso/, adlı bir CSV dosyasını okumak için kullanılacaktır. Veri Kaynağı ve Veritabanı Kapsamlı Kimlik bilgileri sağlanmadığından, Fabric SQL veritabanı kullanıcının Entra ID bağlamıyla doğrulanır.
SELECT * FROM OPENROWSET
( BULK ' abfss://<workspace id>@<tenant>.dfs.fabric.microsoft.com/<lakehouseid>/Files/Contoso/customer.csv'
, FORMAT = 'CSV'
, FIRST_ROW = 2
) WITH
(
CustomerKey INT,
GeoAreaKey INT,
StartDT DATETIME2,
EndDT DATETIME2,
Continent NVARCHAR(50),
Gender NVARCHAR(10),
Title NVARCHAR(10),
GivenName NVARCHAR(100),
MiddleInitial VARCHAR(2),
Surname NVARCHAR(100),
StreetAddress NVARCHAR(200),
City NVARCHAR(100),
State NVARCHAR(100),
StateFull NVARCHAR(100),
ZipCode NVARCHAR(20),
Country_Region NCHAR(2),
CountryFull NVARCHAR(100),
Birthday DATETIME2,
Age INT,
Occupation NVARCHAR(100),
Company NVARCHAR(100),
Vehicle NVARCHAR(100),
Latitude DECIMAL(10,6),
Longitude DECIMAL(10,6) ) AS DATA
B. Fabric Lakehouse'dan dosyayı okumak ve yeni bir tabloya eklemek için OPENROWSET kullanın
Bu örnekte, OPENROWSET önce adlandırılmış bir parke dosyasındanstore.parquet veri okumak için kullanılacaktır. Sonra, INSERT veri yeni bir tabloya alınır.Store Parket dosyası Fabric Lakehouse'da yer alır; DATA_SOURCE ve veritabanı kapsamlı kimlik bilgileri sağlanmadığından, Fabric'teki SQL veritabanı kullanıcının Entra ID bağlamıyla doğrulanır.
SELECT *
FROM OPENROWSET
(BULK 'abfss://<workspace id>@<tenant>.dfs.fabric.microsoft.com/<lakehouseid>/Files/Contoso/store.parquet'
, FORMAT = 'parquet' )
AS dataset;
-- insert into new table
SELECT *
INTO Store
FROM OPENROWSET
(BULK 'abfss://<workspace id>@<tenant>.dfs.fabric.microsoft.com/<lakehouseid>/Files/Contoso/store.parquet'
, FORMAT = 'parquet' )
AS STORE;
Diğer örnekler
OPENROWSET(BULK...)kullanmayı gösteren diğer örnekler için aşağıdaki makalelere bakın:
- Verileri Toplu İçeri ve Dışarı Aktarma (SQL Server)
- 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
- Alan ve satır sonlandırıcılarını belirtme (SQL Server)
İlgili içerik
- SILME (Transact-SQL)
- FROM ifadesi artı JOIN, APPLY, PIVOT (Transact-SQL)
- INSERT (Transact-SQL)
- AÇIK DATASOURCE (Transact-SQL)
- OPENQUERY (Transact-SQL)
- SEÇ (Transact-SQL)
- GÜNCELLEME (Transact-SQL)
- BURADA (Transact-SQL)