Aracılığıyla paylaş


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.

Sorgunun FROM yan tümcesinde OPENROWSET işlevine, tablo adı OPENROWSET gibi 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.

Veri kaynağı

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 OPENROWSET işlevinde açıkça referans alınabilir veya okumak istediğiniz dosyaların URL'sinden dinamik olarak çıkarılabilir. İşlev, isteğe bağlı olarak dosyaları içeren veri kaynağını belirtmek amacıyla bir DATA_SOURCE parametresi 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ı, ADMINISTER BULK OPERATIONS işlevini kullanabilmek için OPENROWSET iznine sahip olmalıdır.

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 OPENROWSET içinde DATA_SOURCE çağıran türüne bağlıdır.
    • Herhangi bir kullanıcı, DATA_SOURCE kullanmadan OPENROWSET'yi Azure depolamada genel kullanıma açık dosyaları okumak için kullanabilir.
    • Azure depolama, Microsoft Entra kullanıcısının temel dosyalara erişmesine izin veriyorsa (örneğin, çağıranın Azure depolama izni varsa) Microsoft Entra oturum açma bilgileri kendi Storage Reader kullanarak korumalı dosyalara erişebilir.
    • SQL oturum açma bilgileri, OPENROWSET ilk kullanmadan DATA_SOURCE, 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 de kullanılabilir. 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, genel kullanıma açık depolamaya erişebilmenizi ya da SAS belirteci, çalışma alanının Yönetilen Kimliği veya çağıranın Microsoft Entra kimliği (eğer çağıran Microsoft Entra sorumlusuyse) kullanarak depolamaya erişebilmenizi sağlar. Genel olmayan bir Azure depolamasına DATA_SOURCE başvuruyorsanız, depolama dosyalarına erişime izin vermek için veritabanı kapsamlı kimlik bilgileri oluşturmanız ve bu bilgileri DATA SOURCE içinde referans vermeniz 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'
}  

Tartışmalar

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'de olduğu gibi FIELDTERMINATOR = tab şeklinde, alan ayırıcı olarak kullanılabilir.

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

  • 'DELTA' - Delta Lake biçiminde önizleme için düzenlenmiş bir 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_veri_yolu'

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.
  • DATA_SOURCE parametresi ile kullanılması gereken <storage_path> biçimindeki göreli yol, <storage_account_path> konumunda tanımlanan dosya desenini EXTERNAL DATA SOURCE 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 Depolama wasb[s] <container>@<storage_account.blob.core.windows.net/path/file>
Azure Veri Gölü Deposu 1. Nesil http[s] < >storage_account.azuredatalakestore.net/webhdfs/v1
Azure Data Lake Storage Nesil 2 http[s] < >storage_account.dfs.core.windows.net/path/file
Azure Data Lake Store İkinci Nesil abfs[s] < >file_system@<account_name.dfs.core.windows.net/path/file>

'<depolama_yolu>'

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. Birbirinden bağımsız birden çok joker karakter kullanılabilir. 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ıra numaralandırması ile bağlanacaktı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 isimlerine göre eşleştirilir ve büyük/küçük harfe duyarlıdır. WITH ifadesi 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. Eğer dosyalardaki sütun adıyla farklı bir büyük/küçük harf biçimde sütun adı belirtirseniz, bu sütun için NULL değerleri 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. json_path bağımsız değişkeninin davranışını 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 = JSON yol ifadesi sütuna veya iç içe geçmiş özelliğe. Varsayılan yol modu gevşektir.

Not

Katı modda sorgu, belirtilen yol mevcut değilse hata verir. Lax modunda sorgu başarılı olur ve JSON yol ifadesi NULL olarak değerlendirilir.

<toplu_seçenekler>

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ı karakteri, başka bir alıntı karakteriyle kaçırılmalıdır. Alıntı karakteri, sütun değeri içinde yalnızca değer, alıntı karakterleriyle kapsüllenmişse görünebilir.

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 = 'veri_sıkıştırma_yöntemi'

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" adında bir alt dizin oluşturulur. "" karakteri, konum parametresinde açıkça belirtilmediği sürece dizinin diğer veri işleme süreçlerinden hariç tutulması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). Sorguyu oluşturduğu klasör ile ilişkilendirmek için ifade 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 reddedilme nedeni.
Satır Dosyadaki reddedilen satır sıra numarası.
Sütun Reddedilen sütunun 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ılan ve zengin özelliklere sahipken; ayrıştırıcı sürüm 2.0, performans için oluşturulmuştur. Ayrıştırıcı 2.0'daki performans iyileştirmesi, gelişmiş ayrıştırma tekniklerinden ve çoklu iş parçacığından kaynaklanır. 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 şemayı belirtmeden Parquet dosyalarını okuma örneklerini kontrol edin.

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.

Dosya sayısını aynı anda okuyorsanız, şemanın depolama hizmetinin depodan aldığı ilk dosyadan belirleneceğini 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 ifadesini 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. Performans üzerinde ek yük oluşturur ve varchar(8000) olarak varsayı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 bir parça
BINARY / BYTE_ARRAY varbinary
ÇİFT kayan noktalı sayı
yüzen nesne gerçek
INT32 int
INT64 bigint
INT96 datetime2
sabit uzunlukta bayt dizisi ikili
İKİLİ UTF8 varchar *(UTF8 harmanlama)
İKİLİ DİZGİ varchar *(UTF8 harmanlama)
İKİLİ ENUM varchar *(UTF8 harmanlama)
Sabit_Uzunluklu_Bayt_Dizisi UUID benzersiz tanımlayıcı
İKİLİ ONDALIK ondalık
İKİLİ JSON varchar(8000) *(UTF8 harmanlama)
İKİLİ BSON Desteklenmez
FIXED_LEN_BYTE_ARRAY ONDALIK ondalık
BYTE_DİZİSİ ARALIK Desteklenmez
INT32 INT(8, true) (8 bitlik tam sayı, doğru) 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 TARİH tarih
INT32 ONDALIK ondalık
INT32 ZAMAN (Milisaniye) zaman
INT64 INT(64, doğru) bigint
INT64 INT(64, yanlış) ondalık(20,0)
INT64 ondalık ondalık
INT64 ZAMAN (MICROS) time
INT64 ZAMAN (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 bigint değerini saat dilimi farkıyla açıkça ayarladığınızdan emin olun.
INT64 ZAMAN DAMGASI (NANO SANİYE) 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, sorgu veri depolama hızlı başlangıç belgesine bakın ve OPENROWSET'i kullanarak CSV, PARQUET, DELTA LAKE ve JSON dosya biçimlerini nasıl okuyacağınızı öğrenin. 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.