Aracılığıyla paylaş


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. 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.
  • OPENROWSET olmadan BULK , 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.

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

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 Files okuma
  • 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 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 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_cases iç 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 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, sorumlunun kapsayıcı veya depolama hesabı düzeyinde Depolama Blobu Veri Okuyucusu rolü (veya üzeri) atanmış olması gerekir.

Remarks

  • FROM ile kullanılan bir SELECT yan tümcesi, tam OPENROWSET(BULK...) işlevselliğiyle tablo adı yerine SELECT çağırabilir.

  • 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. Msg 491: "from yan tümcesindeki toplu satır kümesi için bir bağıntı adı belirtilmelidir" hatasında sonuçlar eklenemedi AS <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_alias
    • FROM 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...) deyiminde INSERT kaynak 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 BULK seçeneği bir INSERT deyimiyle kullanıldığında, BULK yan tümcesi 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ç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: