Azure Synapse Analytics'te sunucusuz SQL havuzunu kullanarak OPENROWSET kullanma

işlevi, OPENROWSET(BULK...) Azure Depolama'daki dosyalara erişmenizi sağlar. OPENROWSET işlevi, uzak veri kaynağının (örneğin dosya) içeriğini okur ve içeriği bir satır kümesi olarak döndürür. Sunucusuz SQL havuzu kaynağında OPENROWSET toplu satır kümesi sağlayıcısına OPENROWSET işlevi çağrılarak ve BULK seçeneği belirtilerek erişilir.

İşleve OPENROWSET sorgunun FROM yan tümcesinde tablo adıymış OPENROWSETgibi başvurulabilir. Bir dosyadaki verilerin okunmasını ve satır kümesi olarak döndürülmasını sağlayan yerleşik bir BULK sağlayıcısı aracılığıyla toplu işlemleri destekler.

Not

OPENROWSET işlevi ayrılmış SQL havuzunda desteklenmez.

Data source

Synapse SQL'deki OPENROWSET işlevi, bir veri kaynağından dosyaların içeriğini okur. Veri kaynağı bir Azure depolama hesabıdır ve işlevde OPENROWSET açıkça başvurabilir veya okumak istediğiniz dosyaların URL'sinden dinamik olarak çıkarılabilir. İşlev isteğe OPENROWSET bağlı olarak dosyaları içeren veri kaynağını belirtmek için bir DATA_SOURCE parametre içerebilir.

  • OPENROWSET olmadan DATA_SOURCE , seçenek olarak BULK belirtilen URL konumundan dosyaların içeriğini doğrudan okumak için kullanılabilir:

    SELECT *
    FROM OPENROWSET(BULK 'http://<storage account>.dfs.core.windows.net/container/folder/*.parquet',
                    FORMAT = 'PARQUET') AS [file]
    

Bu, dosyaların içeriğini önceden yapılandırmadan okumanın hızlı ve kolay bir yoludur. Bu seçenek, depolama alanına erişmek için temel kimlik doğrulama seçeneğini kullanmanıza olanak tanır (Microsoft Entra oturum açma işlemleri için Microsoft Entra geçişi ve SQL oturum açma işlemleri için SAS belirteci).

  • OPENROWSET ile DATA_SOURCE belirtilen depolama hesabındaki dosyalara erişmek için kullanılabilir:

    SELECT *
    FROM OPENROWSET(BULK '/folder/*.parquet',
                    DATA_SOURCE='storage', --> Root URL is in LOCATION of DATA SOURCE
                    FORMAT = 'PARQUET') AS [file]
    

    Bu seçenek, veri kaynağındaki depolama hesabının konumunu yapılandırmanızı ve depolamaya erişmek için kullanılacak kimlik doğrulama yöntemini belirtmenizi sağlar.

    Önemli

    OPENROWSET olmadan DATA_SOURCE , depolama dosyalarına erişmek için hızlı ve kolay bir yol sağlar, ancak sınırlı kimlik doğrulama seçenekleri sunar. Örneğin, Microsoft Entra sorumluları dosyalara yalnızca Microsoft Entra kimliklerini veya genel kullanıma açık dosyalarını kullanarak erişebilir. Daha güçlü kimlik doğrulama seçeneklerine ihtiyacınız varsa seçeneğini kullanın DATA_SOURCE ve depolamaya erişmek için kullanmak istediğiniz kimlik bilgilerini tanımlayın.

Güvenlik

Veritabanı kullanıcısının OPENROWSET işlevi kullanma izni olmalıdırADMINISTER BULK OPERATIONS.

Depolama yöneticisi, geçerli SAS belirteci sağlayarak veya Microsoft Entra sorumlusunun depolama dosyalarına erişmesini sağlayarak kullanıcının dosyalara erişmesini de etkinleştirmelidir. Bu makalede depolama erişim denetimi hakkında daha fazla bilgi edinin.

OPENROWSET depolamada kimlik doğrulamasının nasıl yapılacağını belirlemek için aşağıdaki kuralları kullanın:

  • Kimlik doğrulama mekanizması olmadan DATA_SOURCE içinde OPENROWSET çağıran türüne bağlıdır.
    • Herhangi bir kullanıcı Azure depolamada genel kullanıma açık dosyaları okumak için kullanmadan DATA_SOURCE kullanabilirOPENROWSET.
    • Azure depolama, Microsoft Entra kullanıcısının temel dosyalara erişmesine izin veriyorsa (örneğin, çağıranın Storage Reader Azure depolama izni varsa) Microsoft Entra oturum açma bilgileri kendi Microsoft Entra kimliklerini kullanarak korumalı dosyalara erişebilir.
    • SQL oturum açma bilgileri genel kullanıma açık dosyalara, SAS belirteci kullanılarak korunan dosyalara veya Synapse çalışma alanının Yönetilen Kimliğine erişmek için olmadan DATA_SOURCE da kullanılabilirOPENROWSET. Depolama dosyalarına erişime izin vermek için sunucu kapsamlı kimlik bilgileri oluşturmanız gerekir.
  • OPENROWSET ile DATA_SOURCE kimlik doğrulama mekanizması, başvuruda bulunan veri kaynağına atanan veritabanı kapsamlı kimlik bilgileri içinde tanımlanır. Bu seçenek, sas belirteci, çalışma alanının Yönetilen Kimliği veya çağıranın Microsoft Entra kimliği (arayan Microsoft Entra sorumlusu ise) kullanarak genel kullanıma açık depolamaya veya depolamaya erişmenizi sağlar. Genel olmayan Azure depolamaya başvuruda bulunursaDATA_SOURCE, depolama dosyalarına erişime izin vermek için veritabanı kapsamlı kimlik bilgileri oluşturmanız ve bu DATA SOURCE kimlik bilgilerine başvurmanız gerekir.

Çağıranın, depolamada kimlik doğrulaması yapmak için kimlik bilgileri üzerinde izni olmalıdır REFERENCES .

Söz dizimi

--OPENROWSET syntax for reading Parquet or Delta Lake files
OPENROWSET  
( { BULK 'unstructured_data_path' , [DATA_SOURCE = <data source name>, ]
    FORMAT= ['PARQUET' | 'DELTA'] }  
)  
[WITH ( {'column_name' 'column_type' }) ]
[AS] table_alias(column_alias,...n)

--OPENROWSET syntax for reading delimited text files
OPENROWSET  
( { BULK 'unstructured_data_path' , [DATA_SOURCE = <data source name>, ] 
    FORMAT = 'CSV'
    [ <bulk_options> ]
    [ , <reject_options> ] }  
)  
WITH ( {'column_name' 'column_type' [ 'column_ordinal' | 'json_path'] })  
[AS] table_alias(column_alias,...n)
 
<bulk_options> ::=  
[ , FIELDTERMINATOR = 'char' ]    
[ , ROWTERMINATOR = 'char' ] 
[ , ESCAPECHAR = 'char' ] 
[ , FIRSTROW = 'first_row' ]     
[ , FIELDQUOTE = 'quote_characters' ]
[ , DATA_COMPRESSION = 'data_compression_method' ]
[ , PARSER_VERSION = 'parser_version' ]
[ , HEADER_ROW = { TRUE | FALSE } ]
[ , DATAFILETYPE = { 'char' | 'widechar' } ]
[ , CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]
[ , ROWSET_OPTIONS = '{"READ_OPTIONS":["ALLOW_INCONSISTENT_READS"]}' ]

<reject_options> ::=  
{  
    | MAXERRORS = reject_value,  
    | ERRORFILE_DATA_SOURCE = <data source name>,
    | ERRORFILE_LOCATION = '/REJECT_Directory'
}  

Bağımsız değişkenler

Sorgulama için hedef verileri içeren giriş dosyaları için üç seçeneğiniz vardır. Geçerli değerler:

  • 'CSV' - Satır/sütun ayırıcıları olan sınırlandırılmış metin dosyalarını içerir. Herhangi bir karakter, TSV: FIELDTERMINATOR = sekme gibi bir alan ayırıcısı olarak kullanılabilir.

  • 'PARQUET' - Parquet biçiminde ikili dosya.

  • 'DELTA' - Delta Lake (önizleme) biçiminde düzenlenmiş parquet dosyaları kümesi.

Boş alan içeren değerler geçerli değil. Örneğin, 'CSV' geçerli bir değer değildir.

'unstructured_data_path'

Verilerin yolunu oluşturan unstructured_data_path mutlak veya göreli bir yol olabilir:

  • Biçimindeki \<prefix>://\<storage_account_path>/\<storage_path> mutlak yol, kullanıcının dosyaları doğrudan okumasına olanak tanır.
  • parametresiyle kullanılması gereken biçimdeki <storage_path> DATA_SOURCE göreli yol ve içinde tanımlanan EXTERNAL DATA SOURCEstorage_account_path> konumundaki dosya desenini <açıklar.

Aşağıda, belirli bir dış veri kaynağınıza bağlanacak ilgili <depolama hesabı yol> değerlerini bulabilirsiniz.

Dış Veri Kaynağı Önek Depolama hesabı yolu
Azure Blob Storage http[s] <>storage_account.blob.core.windows.net/path/file
Azure Blob Storage wasb[s] <container>@<storage_account.blob.core.windows.net/path/file>
Azure Data Lake Storage 1. Nesil http[s] <>storage_account.azuredatalakestore.net/webhdfs/v1
Azure Data Lake Storage 2. Nesil http[s] <>storage_account.dfs.core.windows.net/path/file
Azure Data Lake Storage 2. Nesil abfs[s] <>file_system@<account_name.dfs.core.windows.net/path/file>

'<storage_path>'

Depolama alanınızda okumak istediğiniz klasöre veya dosyaya işaret eden bir yol belirtir. Yol bir kapsayıcıyı veya klasörü işaret ederse, tüm dosyalar söz konusu kapsayıcıdan veya klasörden okunur. Alt klasörlerdeki dosyalar dahil edilmeyecektir.

Birden çok dosya veya klasörü hedeflemek için joker karakterler kullanabilirsiniz. Birden çok bağımsız joker karakter kullanımına izin verilir. Aşağıda, /csv/population ile başlayan tüm klasörlerdeki popülasyon ile başlayan tüm csv dosyalarını okuyan bir örnek verilmiştir:
https://sqlondemandstorage.blob.core.windows.net/csv/population*/population*.csv

Klasör olarak unstructured_data_path belirtirseniz sunucusuz sql havuzu sorgusu bu klasörden dosya alır.

Sunucusuz SQL havuzuna yol sonunda /* belirterek klasörlerde geçiş yapma talimatı vererek, örneğin: https://sqlondemandstorage.blob.core.windows.net/csv/population/**

Not

Hadoop ve PolyBase'in aksine sunucusuz SQL havuzu, yolun sonunda /** belirtmediğiniz sürece alt klasörler döndürmez. Hadoop ve PolyBase gibi, dosya adının altı çizili (_) veya nokta (.) ile başladığı dosyaları döndürmez.

Aşağıdaki örnekte, unstructured_data_path=https://mystorageaccount.dfs.core.windows.net/webdata/ ise sunucusuz bir SQL havuzu sorgusu mydata.txt satırları döndürür. Bir alt klasörde bulunduğundan mydata2.txt ve mydata3.txt döndürmez.

Dış tablolar için özyinelemeli veriler

[WITH ( {'column_name' 'column_type' [ 'column_ordinal'] }) ]

WITH yan tümcesi, dosyalardan okumak istediğiniz sütunları belirtmenize olanak tanır.

  • CSV veri dosyalarında tüm sütunları okumak için sütun adlarını ve bunların veri türlerini sağlayın. Sütunların bir alt kümesini istiyorsanız, sıralı sayıları kullanarak kaynak veri dosyalarındaki sütunları sıralı olarak seçin. Sütunlar sıralı atamayla bağlanır. HEADER_ROW = DOĞRU kullanılırsa, sütun bağlama sıralı konum yerine sütun adıyla yapılır.

    İpucu

    CSV dosyaları için WITH yan tümcesini de atlayabilirsiniz. Veri türleri dosya içeriğinden otomatik olarak çıkarılır. HEADER_ROW bağımsız değişkenini kullanarak üst bilgi satırının varlığını ve bu durumda sütun adlarının üst bilgi satırından okunacağını belirtebilirsiniz. Ayrıntılar için otomatik şema bulmayı denetleyin.

  • Parquet veya Delta Lake dosyaları için, kaynak veri dosyalarındaki sütun adlarla eşleşen sütun adları sağlayın. Sütunlar ada göre bağlanır ve büyük/küçük harfe duyarlıdır. WITH yan tümcesi atlanırsa, Parquet dosyalarındaki tüm sütunlar döndürülür.

    Önemli

    Parquet ve Delta Lake dosyalarındaki sütun adları büyük/küçük harfe duyarlıdır. Dosyalarda sütun adı büyük/küçük harflerinden farklı büyük/küçük harfle sütun adı belirtirseniz, NULL bu sütun için değerler döndürülür.

column_name = Çıkış sütunu için ad. Sağlanırsa, bu ad kaynak dosyadaki sütun adını ve varsa JSON yolunda sağlanan sütun adını geçersiz kılar. json_path sağlanmazsa otomatik olarak '$.column_name' olarak eklenir. Davranış json_path bağımsız değişkenlerini denetleyin.

column_type = Çıkış sütunu için veri türü. Örtük veri türü dönüştürme işlemi burada gerçekleşir.

column_ordinal = Kaynak dosyalarda sütunun sıra numarası. Bağlama ada göre yapıldığından parquet dosyaları için bu bağımsız değişken yoksayılır. Aşağıdaki örnek yalnızca CSV dosyasından ikinci bir sütun döndürür:

WITH (
    --[country_code] VARCHAR (5) COLLATE Latin1_General_BIN2,
    [country_name] VARCHAR (100) COLLATE Latin1_General_BIN2 2
    --[year] smallint,
    --[population] bigint
)

json_path = sütuna veya iç içe özelliğine JSON yol ifadesi . Varsayılan yol modu gevşektir.

Not

Katı modda sorgu, sağlanan yol yoksa hatayla başarısız olur. Lax modunda sorgu başarılı olur ve JSON yol ifadesi NULL olarak değerlendirilir.

<bulk_options>

FIELDTERMINATOR ='field_terminator'

Kullanılacak alan sonlandırıcısını belirtir. Varsayılan alan sonlandırıcısı virgüldür (",").

ROWTERMINATOR ='row_terminator''

Kullanılacak satır sonlandırıcısını belirtir. Satır sonlandırıcı belirtilmezse, varsayılan sonlandırıcılardan biri kullanılır. PARSER_VERSION = '1.0' için varsayılan sonlandırıcılar \r\n, \n ve \r'dır. PARSER_VERSION = '2.0' için varsayılan sonlandırıcılar \r\n ve \n'tir.

Not

PARSER_VERSION='1.0' kullanıp satır sonlandırıcısı olarak \n (yeni satır) belirttiğinizde, otomatik olarak bir \r (satır başı) karakteri eklenir ve bu da \r\n satır sonlandırıcısıyla sonuçlanır.

ESCAPE_CHAR = 'char'

Dosyada, kendisinden ve dosyadaki tüm sınırlayıcı değerlerden kaçmak için kullanılan karakteri belirtir. Kaçış karakterinin ardından kendi dışında bir değer veya sınırlayıcı değerlerden biri gelirse, değer okunurken kaçış karakteri bırakılır.

ESCAPECHAR parametresi, FIELDQUOTE'nin etkin olup olmamasına bakılmaksızın uygulanır. Alıntı karakterinden kaçmak için kullanılmaz. Alıntılama karakteri başka bir alıntı karakteriyle kaçış karakteri olmalıdır. Alıntı karakteri, sütun değeri içinde yalnızca değer, alıntı karakterleriyle kapsüllenmişse görünebilir.

FIRSTROW = 'first_row'

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

FIELDQUOTE = 'field_quote'

CSV dosyasında tırnak karakteri olarak kullanılacak bir karakter belirtir. Belirtilmezse, tırnak karakteri (") kullanılır.

DATA_COMPRESSION = 'data_compression_method'

Sıkıştırma yöntemini belirtir. Yalnızca PARSER_VERSION='1.0' içinde desteklenir. Aşağıdaki sıkıştırma yöntemi desteklenir:

  • GZIP

PARSER_VERSION = 'parser_version'

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'

CSV ayrıştırıcısı sürüm 1.0 varsayılandır ve zengin özelliklere sahiptir. Sürüm 2.0 performans için oluşturulmuş olup tüm seçenekleri ve kodlamaları desteklemez.

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 \r\n, \n ve \r'dır.
  • Satır sonlandırıcısı olarak \n (yeni satır) belirtirseniz, buna otomatik olarak bir \r (satır başı) karakteri eklenir ve bu da \r\n satır sonlandırıcısıyla sonuç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.
  • DATE veri türü için desteklenen biçim: YYYY-AA-GG
  • TIME veri türü için desteklenen biçim: HH:MM:SS[.fractional seconds]
  • DATETIME2 veri türü için desteklenen biçim: YYYY-AA-GG SS:DD:SS[.kesirli saniye]
  • Varsayılan sonlandırıcılar \r\n ve \n'tir.

HEADER_ROW = { TRUE | FALSE }

CSV dosyasının üst bilgi satırı içerip içermediğini belirtir. Varsayılan değer PARSER_VERSION FALSE. ='2.0' içinde desteklenir. TRUE ise, sütun adları FIRSTROW bağımsız değişkenine göre ilk satırdan okunur. TRUE ve şema WITH kullanılarak belirtilirse, sütun adlarının bağlaması sıralı konumlarla değil sütun adıyla yapılır.

DATAFILETYPE = { 'char' | 'widechar' }

Kodlamayı belirtir: char UTF8 için kullanılır, widechar UTF16 dosyaları için kullanılır.

CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' }

Veri dosyasındaki verilerin kod sayfasını belirtir. Varsayılan değer 65001'dir (UTF-8 kodlaması). Bu seçenek hakkında daha fazla ayrıntı için buraya bakın.

ROWSET_OPTIONS = '{"READ_OPTIONS":["ALLOW_INCONSISTENT_READS"]}'

Bu seçenek, sorgu yürütme sırasında dosya değişikliği denetimini devre dışı bırakır ve sorgu çalışırken güncelleştirilen dosyaları okur. Bu seçenek, sorgu çalışırken eklenen yalnızca ekleme dosyalarını okumanız gerektiğinde kullanışlıdır. Eklenebilir dosyalara mevcut içerik güncelleştirilmez ve yalnızca yeni satırlar eklenir. Bu nedenle, güncelleştirilebilir dosyalara kıyasla yanlış sonuç olasılığı en aza indirilir. Bu seçenek, hataları işlemeden sık eklenen dosyaları okumanızı sağlayabilir. Eklenebilir CSV dosyalarını sorgulama bölümünde daha fazla bilgi bulabilirsiniz.

Reddetme Seçenekleri

Not

Reddedilen satırlar özelliği Genel Önizleme'dedir. Reddedilen satırlar özelliğinin sınırlandırılmış metin dosyaları ve PARSER_VERSION 1.0 için çalıştığını lütfen unutmayın.

Hizmetin dış veri kaynağından alan kirli kayıtları nasıl işleyeceklerini belirleyen reddetme parametreleri belirtebilirsiniz. Gerçek veri türleri dış tablonun sütun tanımlarıyla eşleşmiyorsa veri kaydı 'kirli' olarak kabul edilir.

Reddetme seçeneklerini belirtmediğinizde veya değiştirmediğinizde, hizmet varsayılan değerleri kullanır. Hizmet, gerçek sorgu başarısız olmadan önce reddedilebilen satır sayısını belirlemek için reddetme seçeneklerini kullanır. Reddetme eşiği aşılana kadar sorgu (kısmi) sonuçlar döndürür. Ardından uygun hata iletisiyle başarısız olur.

MAXERRORS = reject_value

Sorgu başarısız olmadan önce reddedilebilen satır sayısını belirtir. MAXERRORS, 0 ile 2.147.483.647 arasında bir tamsayı olmalıdır.

ERRORFILE_DATA_SOURCE = veri kaynağı

Reddedilen satırların ve ilgili hata dosyasının yazılacağı veri kaynağını belirtir.

ERRORFILE_LOCATION = Dizin Konumu

reddedilen satırların ve ilgili hata dosyasının yazılması gerektiğini DATA_SOURCE içindeki dizini veya belirtilirse ERROR_FILE_DATASOURCE belirtir. Belirtilen yol yoksa, hizmet sizin adınıza bir yol oluşturur. "rejectedrows" adlı bir alt dizin oluşturulur. "" karakteri, konum parametresinde açıkça adlandırılmadığı sürece dizinin diğer veri işleme için kaçış olmasını sağlar. Bu dizinde, YearMonthDay_HourMinuteSecond_StatementID biçiminde yük gönderme süresine göre oluşturulmuş bir klasör vardır (Ör. 20180330-173205-559EE7D2-196D-400A-806D-3BF5D007F891). Klasörü oluşturan sorguyla ilişkilendirmek için deyim kimliğini kullanabilirsiniz. Bu klasörde iki dosya yazılır: error.json dosyası ve veri dosyası.

error.json dosyası, reddedilen satırlarla ilgili hatalarla karşılaşılan json dizisini içerir. Hatayı temsil eden her öğe aşağıdaki öznitelikleri içerir:

Öznitelik Açıklama
Hata Satırın reddedilmesine neden olan neden.
Satır Dosyadaki reddedilen satır sıra numarası.
Sütun Reddedilen sütun sıra numarası.
Değer Reddedilen sütun değeri. Değer 100 karakterden büyükse yalnızca ilk 100 karakter görüntülenir.
Dosya Bu satırın ait olduğu dosyanın yolu.

Hızlı sınırlandırılmış metin ayrıştırma

Kullanabileceğiniz iki sınırlandırılmış metin ayrıştırıcı sürümü vardır. CSV ayrıştırıcı sürüm 1.0 varsayılandır ve performans için ayrıştırıcı sürüm 2.0 oluşturulurken zengin özelliklere sahiptir. Ayrıştırıcı 2.0'daki performans iyileştirmesi, gelişmiş ayrıştırma tekniklerinden ve çok iş parçacığından gelir. Dosya boyutu büyüdükçe hız farkı daha büyük olacaktır.

Otomatik şema bulma

WITH yan tümcesini atlayarak şemayı bilmeden veya belirtmeden hem CSV hem de Parquet dosyalarını kolayca sorgulayabilirsiniz. Sütun adları ve veri türleri dosyalardan çıkarılır.

Parquet dosyaları okunacak olan sütun meta verilerini içerir. Parquet için tür eşlemelerinde tür eşlemeleri bulunabilir. Örnekler için şema belirtmeden Parquet dosyalarını okumayı denetleyin.

CSV dosyaları için sütun adları üst bilgi satırından okunabilir. HEADER_ROW bağımsız değişkeni kullanarak üst bilgi satırının var olup olmadığını belirtebilirsiniz. HEADER_ROW = YANLIŞ ise genel sütun adları kullanılır: C1, C2, ... Cn burada n, dosyadaki sütun sayısıdır. Veri türleri ilk 100 veri satırı arasından çıkarılır. Örnekler için şema belirtmeden CSV dosyalarını okumayı denetleyin.

Aynı anda dosya sayısını okuyorsanız, şemanın depolama alanından alınan ilk dosya hizmetinden çıkarılacağını unutmayın. Bu, beklenen bazı sütunların atlanacağı anlamına gelebilir, çünkü şemayı tanımlamak için hizmet tarafından kullanılan dosya bu sütunları içermiyordu. Bu durumda OPENROWSET WITH yan tümcesini kullanın.

Önemli

Bilgi eksikliği nedeniyle uygun veri türünün çıkarılamadığı ve bunun yerine daha büyük veri türünün kullanılacağı durumlar vardır. Bu, performans ek yükü getirir ve varchar(8000) olarak çıkarılacak karakter sütunları için özellikle önemlidir. En iyi performans için, çıkarsanan veri türlerini denetleyin ve uygun veri türlerini kullanın.

Parquet için tür eşlemesi

Parquet ve Delta Lake dosyaları her sütun için tür açıklamaları içerir. Aşağıdaki tabloda Parquet türlerinin SQL yerel türlerine nasıl eşlendiği açıklanmaktadır.

Parquet türü Parquet mantıksal türü (ek açıklama) SQL veri türü
BOOLEAN bit
İkiLI / BYTE_ARRAY varbinary
ÇİFT kayan noktalı sayı
FLOAT real
INT32 int
INT64 bigint
INT96 datetime2
FIXED_LEN_BYTE_ARRAY ikili
İKİLİ UTF8 varchar *(UTF8 harmanlama)
İKİLİ DİZGİ varchar *(UTF8 harmanlama)
İKİLİ SABIT LISTESI varchar *(UTF8 harmanlama)
FIXED_LEN_BYTE_ARRAY UUID uniqueidentifier
İKİLİ ON -DA -LIK ondalık
İKİLİ JSON varchar(8000) *(UTF8 harmanlama)
İKİLİ BSON Desteklenmez
FIXED_LEN_BYTE_ARRAY ON -DA -LIK ondalık
BYTE_ARRAY ARA Desteklenmez
INT32 INT(8, true) smallint
INT32 INT(16, true) smallint
INT32 INT(32, true) int
INT32 INT(8, false) tinyint
INT32 INT(16, false) int
INT32 INT(32, false) bigint
INT32 DATE tarih
INT32 ON -DA -LIK ondalık
INT32 ZAMAN (MILLIS) time
INT64 INT(64, true) bigint
INT64 INT(64, false) ondalık(20,0)
INT64 ON -DA -LIK ondalık
INT64 ZAMAN (MICROS) time
INT64 TIME (NANOS) Desteklenmez
INT64 TIMESTAMP (utc olarak normalleştirilmiş) (MILLIS / MICROS) datetime2
INT64 TIMESTAMP (utc'ye normalleştirilmemiş) (MILLIS / MICROS) bigint - bir tarih saat değerine dönüştürmeden önce saat dilimi uzaklığıyla değeri açıkça ayarladığınızdan bigint emin olun.
INT64 ZAMAN DAMGASı (NANO'LAR) Desteklenmez
Karmaşık tür LİSTE varchar(8000), JSON olarak serileştirilmiş
Karmaşık tür HARİTA varchar(8000), JSON olarak serileştirilmiş

Örnekler

Şema belirtmeden CSV dosyalarını okuma

Aşağıdaki örnek, sütun adlarını ve veri türlerini belirtmeden üst bilgi satırı içeren CSV dosyasını okur:

SELECT 
    *
FROM OPENROWSET(
    BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.csv',
    FORMAT = 'CSV',
    PARSER_VERSION = '2.0',
    HEADER_ROW = TRUE) as [r]

Aşağıdaki örnek, sütun adlarını ve veri türlerini belirtmeden üst bilgi satırı içermeyen CSV dosyasını okur:

SELECT 
    *
FROM OPENROWSET(
    BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.csv',
    FORMAT = 'CSV',
    PARSER_VERSION = '2.0') as [r]

Şema belirtmeden Parquet dosyalarını okuma

Aşağıdaki örnek, sayım veri kümesindeki ilk satırın tüm sütunlarını Parquet biçiminde ve sütun adları ve veri türleri belirtmeden döndürür:

SELECT 
    TOP 1 *
FROM  
    OPENROWSET(
        BULK 'https://azureopendatastorage.blob.core.windows.net/censusdatacontainer/release/us_population_county/year=20*/*.parquet',
        FORMAT='PARQUET'
    ) AS [r]

Şema belirtmeden Delta Lake dosyalarını okuma

Aşağıdaki örnek, delta lake biçiminde ve sütun adlarını ve veri türlerini belirtmeden sayım veri kümesindeki ilk satırın tüm sütunlarını döndürür:

SELECT 
    TOP 1 *
FROM  
    OPENROWSET(
        BULK 'https://azureopendatastorage.blob.core.windows.net/censusdatacontainer/release/us_population_county/year=20*/*.parquet',
        FORMAT='DELTA'
    ) AS [r]

CSV dosyasından belirli sütunları okuma

Aşağıdaki örnek, population*.csv dosyalarından yalnızca 1 ve 4 sıralı sayılar içeren iki sütun döndürür. Dosyalarda üst bilgi satırı olmadığından ilk satırdan okumaya başlar:

SELECT 
    * 
FROM OPENROWSET(
        BULK 'https://sqlondemandstorage.blob.core.windows.net/csv/population/population*.csv',
        FORMAT = 'CSV',
        FIRSTROW = 1
    )
WITH (
    [country_code] VARCHAR (5) COLLATE Latin1_General_BIN2 1,
    [population] bigint 4
) AS [r]

Parquet dosyasından belirli sütunları okuma

Aşağıdaki örnek, sayım veri kümesindeki ilk satırın yalnızca iki sütununu Parquet biçiminde döndürür:

SELECT 
    TOP 1 *
FROM  
    OPENROWSET(
        BULK 'https://azureopendatastorage.blob.core.windows.net/censusdatacontainer/release/us_population_county/year=20*/*.parquet',
        FORMAT='PARQUET'
    )
WITH (
    [stateName] VARCHAR (50),
    [population] bigint
) AS [r]

JSON yollarını kullanarak sütunları belirtme

Aşağıdaki örnek, WITH yan tümcesinde JSON yol ifadelerini nasıl kullanabileceğinizi gösterir ve katı ve lax yol modları arasındaki farkı gösterir:

SELECT 
    TOP 1 *
FROM  
    OPENROWSET(
        BULK 'https://azureopendatastorage.blob.core.windows.net/censusdatacontainer/release/us_population_county/year=20*/*.parquet',
        FORMAT='PARQUET'
    )
WITH (
    --lax path mode samples
    [stateName] VARCHAR (50), -- this one works as column name casing is valid - it targets the same column as the next one
    [stateName_explicit_path] VARCHAR (50) '$.stateName', -- this one works as column name casing is valid
    [COUNTYNAME] VARCHAR (50), -- STATEname column will contain NULLs only because of wrong casing - it targets the same column as the next one
    [countyName_explicit_path] VARCHAR (50) '$.COUNTYNAME', -- STATEname column will contain NULLS only because of wrong casing and default path mode being lax

    --strict path mode samples
    [population] bigint 'strict $.population' -- this one works as column name casing is valid
    --,[population2] bigint 'strict $.POPULATION' -- this one fails because of wrong casing and strict path mode
)
AS [r]

BULK yolunda birden çok dosya/klasör belirtme

Aşağıdaki örnekte BULK parametresinde birden çok dosya/klasör yolunu nasıl kullanabileceğiniz gösterilmektedir:

SELECT 
    TOP 10 *
FROM  
    OPENROWSET(
        BULK (
            'https://azureopendatastorage.blob.core.windows.net/censusdatacontainer/release/us_population_county/year=2000/*.parquet',
            'https://azureopendatastorage.blob.core.windows.net/censusdatacontainer/release/us_population_county/year=2010/*.parquet'
        ),
        FORMAT='PARQUET'
    )
AS [r]

Sonraki adımlar

Daha fazla örnek için CSV, PARQUET, DELTA LAKE ve JSON dosya biçimlerini okumak için kullanmayı OPENROWSET öğrenmek için sorgu veri depolama hızlı başlangıcına bakın. En iyi performansı elde etmek için en iyi yöntemleri denetleyin. Ayrıca CETAS kullanarak sorgunuzun sonuçlarını Azure Depolama'ya kaydetmeyi de öğrenebilirsiniz.