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ış 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.
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
olmadanDATA_SOURCE
, seçenek olarakBULK
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
ileDATA_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
olmadanDATA_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ınDATA_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çindeOPENROWSET
ç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.
- Herhangi bir kullanıcı Azure depolamada genel kullanıma açık dosyaları okumak için kullanmadan
OPENROWSET
ileDATA_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 buDATA 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ımlananEXTERNAL DATA SOURCE
storage_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.
[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.