OPENROWSET BULK (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft 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. Hizmete bağlı olarak, dosya Azure Blob Depolama, Azure Data Lake storage, on-premises disk, ağ paylaşımları ve daha fazlasında saklanabilir. Metin/CSV, Parquet veya JSON hatları gibi çeşitli dosya formatlarını okuyabilirsiniz.

Bir sorgu maddesindeki fonksiyona OPENROWSETFROM bir tablo adı gibi referans verebilirsiniz. Bir SELECT ifadedeki verileri okumak veya , INSERT, DELETE, MERGE, CTAS, veya CETAS ifadelerdeki UPDATEhedef verileri güncellemek için kullanın.

  • Harici veri dosyalarından veri okumak için kullanılır OPENROWSET(BULK) .
  • Başka bir veritabanı motorundan okumak için without BULK kullanınOPENROWSET. Daha fazla bilgi için bkz. OPENROWSET (Transact-SQL).

Tip

Bu makale ve sözdizimiOPENROWSET(BULK), SQL Database Engine'in farklı platformlarında farklılık gösterir.

Microsoft Fabric Data Warehouse sözdizimi için sürüm açılır menüsünden Fabric Data Warehouse seçin.

Diğer platformlardaki benzer örneklerin ayrıntıları ve bağlantıları:

Transact-SQL söz dizimi kuralları

Sözdizimi

SQL Server, Azure SQL Veritabanı, SQL database in Fabric ve Azure SQL Yönetilen Örneği 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

Bazı OPENROWSET seçenekler biçime özgüyken diğerleri evrenseldir. Örneğin, satır ve alan sınırlayıcıları yalnızca sınırlandırılmış metin (CSV/TSV) için anlamlıyken, DATA_SOURCE ve MAXERRORS gibi seçenekler tüm biçimlere uygulanır. Aşağıdaki tablo, en yaygın formatlar için hangi seçeneklerin desteklendiğini özetlemektedir.

Options CSV(1.0) CSV(2.0) PARKE JSONL
DATA_SOURCE, ROWS_PER_BATCH, MAXERRORS Supported Supported Supported Supported
ERRORFILE, ERRORFILE_DATA_SOURCE, FORMATFILE, FORMATFILE_DATA_SOURCE Supported Supported Desteklenmez Supported
KOD SAYFASI, VERI DOSYASI TÜRÜ Supported Supported Desteklenmez Supported
İLK SIRA Supported Supported Desteklenmez Supported
ROWTERMINATOR, FIELDTERMINATOR, FIELDQUOTE, ESCAPECHAR Supported Supported Desteklenmez Desteklenmez
PARSER_VERSION Supported Supported Desteklenmez Desteklenmez
LASTROW Supported Desteklenmez Desteklenmez Desteklenmez
HEADER_ROW Desteklenmez Supported Desteklenmez Desteklenmez
SINGLE_BLOB, SINGLE_CLOB, SINGLE_NCLOB Desteklenmez Desteklenmez Desteklenmez Desteklenmez

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 BULK gerektirdiği izinler hakkında bilgi için bu makalenin ilerleyen bölümlerinde İzinler bölümüne bakınız.

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.

YIĞIN

Veri dosyalarının bir OPENROWSET satır kümesi olarak okuyup geri dönen 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 Data Warehouse'de mevcut olan URI desenleri için, sürüm açılır menüsünden Fabric Data Warehouse seçin.

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

Azure Data Lake Storage 2. Nesil'de depolanan verilere erişirken, blob uç noktası yerine veya abfss://<container>@<storage>.dfs.core.windows.net/<file path> URI formatlarını kullanınhttps://<storage>.dfs.core.windows.net/<container>/<file path>. Her ikisi de dizin semantisi, optimize edilmiş dosya işlemleri ve POSIX tarzı erişim kontrol listeleri (ACL) sağlayan hiyerarşik isim alanını (HNS) tam destekler.

Buna karşılık, uç blob nokta hiyerarşik isim alanı özelliklerini ortaya çıkarmaz ve tüm yolları düz nesne anahtarları olarak kabul eder. Bu durum, performansın azalmasına, dizin davranışının sınırlı olmasına ve Azure Data Lake Storage 2. Nesil dosya sistemi semantiği bekleyen motorlarla uyumsuzluğa yol açabilir.

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, karakteri herhangi bir karakter dizisine eşlik edecek şekilde dahil * edebilir, böylece OPENROWSET URI ile desen eşleştirebilir. Ayrıca, URI tüm alt klasörlerde özyinelemeli geçişi etkinleştirmek için sonlayabilir /** . 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'
);

Aşağıdaki tablo, URI'nin referans verebileceği depolama türlerini göstermektedir:

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'te Microsoft Fabric Ambarı ve Microsoft Fabric'te SQL analiz 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 Files klasöründen doğrudan veri okuyabilirsinizOPENROWSET(BULK). Bu özellik, harici aşamalama hesaplarına (örneğin ADLS Gen2 veya Blob Depolama) olan ihtiyacı ortadan kaldırır ve Fabric izinleri kullanılarak çalışma alanı tarafından yönetilen, SaaS tabanlı alım imkanı sağlar. Bu işlev şu özellikleri destekler:

  • Lakehouses'ta klasörlerden Files okuma
  • Aynı kiracı içinde çalışma alanından ambara yükler
  • Microsoft Entra Id kullanarak yerel kimlik zorlama

Her ikisi COPY INTO için geçerli olan sınırlamalara bakın.OPENROWSET(BULK)

DATA_SOURCE

DATA_SOURCE veri dosyası yolunun kök konumunu tanımlar. Bu sayede göreceli BULK yolları kullanmanızı sağlar. Veri kaynağını ile CREATE EXTERNAL DATA SOURCEoluşturun.

Kök konumuna ek olarak, o konumdaki dosyalara erişmek için özel bir kimlik tanımı da tanımlanabilir.

Ö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 belirli bir kod sayfasıdır:

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

Tek baytlı (ASCII, UTF8) veya çok baytlı (UTF16) dosya içeriğini OPENROWSET(BULK) okuması gerektiğini belirtir. Geçerli değerler char ve widechar değerleridir:

DATAFILETYPE Değer 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'te Microsoft Fabric Ambarı ve Microsoft Fabric'te SQL analiz 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.

Yolun .csvdosya uzantısı , .tsv, .parquet, .jsonl.parq.ldjsonveya .ndjsonile biterse seçeneği FORMAT belirtmenize gerek yoktur. Örneğin, OPENROWSET(BULK) fonksiyon aşağıdaki örnekteki uzantı temelinde formatın parket 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 tiplerini tanımlamak için bir format dosyasına ihtiyacınız var. Tek istisna, SINGLE_CLOB, SINGLE_BLOB, veya SINGLE_NCLOB; belirttiğinizde bu durumda format dosyasına ihtiyacınız yoktur.

Format dosyaları hakkında daha fazla bilgi için bkz. Veri toplu aktarma için bir format dosyası kullanın (SQL Server).

SQL Server 2017 (14.x) ile 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. Bu veri kaynağını kullanarak, seçenekteki FORMATFILE göreceli yolları kullanabilirsiniz.

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

Formatlı dosya veri kaynağını oluşturun.CREATE EXTERNAL DATA SOURCE Kök konumuna ek olarak, o konumdaki dosyalara erişmek için özel bir kimlik tanımı da tanımlanabilir.

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:

ALAN ALATI

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

Ş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çenek kabul edilmiyor.
  • 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

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

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

HATA DOSYASI

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ıya .ERROR.txt sahip bir kontrol 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

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

İLK SIRA

Yüklenecek ilk satırın sayısını belirtir. Varsayılan değer 1'dir. Bu değer, 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

Yüklenecek son satırın sayısını belirtir. Varsayılan değer 0'dır. Bu değer, belirtilen veri dosyasındaki son satırı gösterir.

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 FROM yan 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 sizin belirttiğiniz sırayla sıralanmamışsa veya ipucu ve çoğaltma anahtarlarının bulunduğunu belirtirseniz UNIQUE , hata döner.

Sütun ORDERtakma adları kullanılırken gereklidir. Sütun alias listesi, maddenin BULK eriştiği türedilen tabloya referans vermelidir. Maddede belirttiğiniz ORDER sütun adları bu sütun takma ad listesine atıfta bulunur. Büyük değer türleri (varchar(max), nvarchar(max), varbinary(max) ve xml) ve büyük nesne (LOB) tipleri (metin, ntext ve resim) sütunları belirtemezsiniz.

İç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 verisini yalnızca SINGLE_BLOBSINGLE_CLOBSINGLE_NCLOBve yerine seçeneği kullanarak içe aktarabilirsiniz çünkü sadece SINGLE_BLOB tüm Windows kodlama dönüşümlerini destekler.

SINGLE_CLOB

data_file ASCII olarak okurur ve içeriği mevcut veritabanının derlemesi kullanılarak varchar(max) tipinde tek satırlı, tek sütunlu bir satır seti olarak döndürür.

SINGLE_NCLOB

data_file Unicode olarak okunur ve içeriği mevcut veritabanının derlemesi kullanılarak nvarchar(max) tipinde tek satırlı, tek sütunlu bir sıra seti olarak döndürür.

SELECT * FROM OPENROWSET(
    BULK N'C:\Text1.txt',
    SINGLE_NCLOB
) AS Document;

WITH şema

WITH şeması, OPENROWSET işlevinin sonuç kümesini tanımlayan sütunları belirtir. Her sütun için sütun tanımlarını içerir; bu OPENROWSET tanımlar, alt sayfa sütunlarını sonuç kümesindeki sütunlara bağlayan eşleme kurallarını ortaya koyar.

Aşağıdaki örnekte:

  • Sütunun country_regiontipi varchar(50) ve aynı isimli alttaki sütuna referans verir.
  • Sütun date , farklı fiziksel isimlere sahip bir CSV veya Parquet sütunu veya JSONL mülküne atıfta bulunur.
  • Sütun cases , dosyadaki üçüncü sütuna atıfta bulunur.
  • Sütun, fatal_cases iç içe Parquet özelliğine veya JSONL alt nesnesine referans verir.
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önen sütunun OPENROWSET adı. OPENROWSETBu sütun için veriyi aynı isimli alt dosya sütunundan okur, ancak veya <column_ordinal>kullanarak <column_path> geçersiz kalırsa. Sütun adı, sütun adı tanımlayıcıları için gereken kuralları takip etmelidir.

<column_type>

Sonuç kümesindeki sütunun T-SQL türü. OPENROWSET sonuçları döndürdüğünde temel dosyadan bu türe değerleri dönüştürü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>

Sütunun fiziksel indeksini temsil eden ve cümledeki WITH sütunla eşleşen bir sayı.

Permissions

Harici veri kaynaklarıyla kullanmak OPENROWSET için aşağıdaki izinlere ihtiyacınız vardır:

  • ADMINISTER DATABASE BULK OPERATIONS veya
  • 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, Depolama Blobu Veri Okuyucu rolünde (veya daha yüksek) bir üyelik de konteyner veya depolama hesabı seviyesinde ana kişiye atamanız gerekir.

Remarks

  • Kullandığınız SELECT bir FROM cümle, tam işlevsellikle tablo adı SELECT yerine çağrı OPENROWSET(BULK...) yapabilir.

  • OPENROWSET seçeneğiyle BULK, FROM yan tümcesinde aralık değişkeni veya diğer ad olarak da bilinen bir bağıntı adı gerektirir. Eğer , AS <table_alias>eklemezseniz, 491 numaralı hata mesajı alırsınız: "from cümlesinde toplu satır kümesi için bir korelasyon adı belirtilmeli."

  • Sütun takma adını belirtebilirsiniz. Eğer bir sütun takma adı listesi belirtmiyorsanız, format dosyasında sütun adları olmalı. Sütun takma adını belirtmek, format 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)
  • SELECT...FROM OPENROWSET(BULK...) deyimi, verileri tabloya aktarmadan doğrudan bir dosyadaki verileri sorgular.

  • Bir SELECT...FROM OPENROWSET(BULK...) ifade, sütun adlarını ve veri tiplerini belirtmek için format dosyası kullanarak toplu sütun aliaslarını listeleyebilir.

  • Bir INSERT or MERGE ifadesinde kaynak tablo olarak kullanarakOPENROWSET(BULK...), veri dosyasından bir tabloya toplu şekilde aktarılır. Daha fazla bilgi için bkz.: SQL Server’a veri aktarmak için BULK INSERT veya OPENROWSET(BULK...) kullanma.
  • Seçeneği OPENROWSET BULK bir INSERT ifadeyle kullandığınızda, madde BULK tablo ipuçlarını destekler. TABLOCKgibi normal tablo ipuçlarına ek olarak, BULK yan tümcesi şu özel tablo ipuçlarını kabul edebilir: IGNORE_CONSTRAINTS (yalnızca CHECK ve FOREIGN KEY kısıtlamalarını yoksayar), IGNORE_TRIGGERS, KEEPDEFAULTSve KEEPIDENTITY. 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çe aktarma işlemlerinin işlem günlüğüne ne zaman kaydedildiğine dair bilgi için Toplu ithalatta minimum kayıt için ön koşullar bölümünü inceleyebilirsiniz.
  • OPENROWSET (BULK ...) Tam kurtarma modeliyle veri içe aktardığınızda, loging optimize edilmiyor.

Note

OPENROWSETkullandığınızda, SQL Server'ın kimliğe bürünmeyi nasıl işlediğini anlamak önemlidir. Güvenlik konuları hakkında bilgi için, verileri SQL Server'a aktarmak için Use BULK INSERT veya OPENROWSET(BULK...) bölümlerine bakınız.

Microsoft Fabric Data Warehouse yılında aşağıdaki tablo desteklenen özellikleri özetliyor:

Feature Supported Mevcut değil
Dosya biçimleri Parket, CSV, JSONL Delta, Azure Cosmos DB, JSON, ilişkisel veritabanları
Authentication Entra ID/SPN passthrough, public storage SAS/SAK, SPN, Yönetilen erişim
Storage Microsoft Fabric'te Azure Blob Depolama, Azure Data Lake Storage, OneLake
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...)aksi belirtmezseniz, veya SQLBINARY verinin SQLCHARSQLNCHARmaksimum uzunluğunun 8.000 baytı geçmediğini varsayar. Eğer 8.000 baytı aşan herhangi bir varchar(max), nvarchar(max) veya varbinary(max) nesnesi içeren bir LOB veri alanında veri içe aktarıyorsanız, veri alanının maksimum uzunluğunu tanımlayan bir XML formatlı dosya kullanmalısınız. Maksimum uzunluğu belirtmek için format dosyasını düzenleyin ve özniteliği MAX_LENGTH ilan edin.

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 sonucu setindeki yolu döndürmek için kullanabilirsin. Ya da dosya adı ve klasör yoluna göre verileri filtrelemek için onları kullanabilirsiniz. Aşağıdaki bölümlerde kısa açıklamalar ve örnekler bulabilirsiniz.

Dosya adı fonksiyonu

Bu fonksiyon, satırın 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 bir veri türüne gönderin. Bir 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, dosyaları filtrelemek için cümlede WHERE nasıl kullanılacağını filename() 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ı.

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 parçasını döndürür:

  • Parametresiz fonksiyonu filepath çağırdığınızda, bir satırın başladığı tam dosya yolunu döndürür.
  • Parametreli fonksiyonu filepath çağırdığınızda, parametrede belirtilen konumda joker kartla eşleşen yolun kısmını döndürür. Örneğin, 1 parametre değeri, yolun ilk joker kartla eşleşen kısmını döndürür.

Fonksiyonun filepath dönüş veri tipi nvarchar(1024)'tür. En iyi performans için, fonksiyonun filepath sonucunu her zaman uygun veri türüne dökebilirsiniz. Bir 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, dosyaları filtrelemek için cümlede WHERE nasıl kullanılacağını filepath() göstermektedir.

Sorgu bölümünde joker OPENROWSET kartlar kullanabilirsiniz ve maddedeki dosyaları WHERE 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 BULK INSERT veriyi varbinary(max) bir sütuna dosyalayın

Ş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. 32-bit Microsoft Text Driver (*.txt, *.csv) ise 64-bit sqlservr.exesürümüyle çalışmaz.

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 örnek, SAS anahtarını oluşturduğunuz Azure Blob depolama konumundaki bir CSV dosyasından veri yüklemek için komutun nasıl kullanılacağını OPENROWSET gösterir. Azure Blob depolama konumunu harici bir veri kaynağı olarak yapılandırıyorsunuz. Bu süreç, kullanıcı veritabanındaki ana anahtarla şifrelenen paylaşılan erişim imzası (SAS) 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 bir kimlik kullanarak bir kimlik oluşturur, harici bir kaynak oluşturur ve ardından harici 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, S3 uyumlu nesne depolamasında depolanan farklı konumlardan birkaç Parquet dosyasına erişir:

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, bir CSV dosyasından satır okumanın başlık satırı ve satırlar ile alanları ayıran açıkça belirtilmiş terminatör karakterleri olduğ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, fonksiyonun OPENROWSET döndürdüğü satırın şemasını belirtirsiniz:

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 parçalarını okumak için fonksiyon kullanılır filepath() :

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, bir Fabric Lakehouse'da bir CSV dosyasını okumak için kullanılırOPENROWSET. Dosya isimlendirilir customer.csv ve klasörde Files/Contoso/ saklanır. Veri kaynağı veya veritabanı kapsamlı kimlik bilgileri sağlamadığınız için, Fabric SQL veritabanı doğrulama için Entra ID bağlamınızı kullanı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. OPENROWSET kullanarak bir Fabric Lakehouse'dan bir dosya okuyun ve yeni bir tabloya veri ekleyin

Bu örnekte, OPENROWSET Parquet adlı store.parquetbir dosyadan veri okumak için kullanılır. Sonra, INSERT veriyi yeni bir tabloya ekliyorsunuz Store. Parquet dosyası ise bir Fabric Lakehouse'da yer almaktadır. Veri kaynağı veya veritabanı kapsamlı kimlik bilgileri sağlamadığınız için, Fabric'teki SQL veritabanı doğrulama için Entra ID bağlamınızı kullanı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: