Aracılığıyla paylaş


Sunucusuz SQL havuzunu kullanarak depolama dosyalarını sorgulama

Sunucusuz SQL havuzu, veri gölünüzdeki verileri sorgulamanıza olanak tanır. Yarı yapılandırılmış ve yapılandırılmamış veri sorgularını barındıran bir Transact-SQL (T-SQL) sorgu yüzeyi alanı sunar. Sorgulama için aşağıdaki T-SQL özellikleri desteklenir:

Şu anda desteklenen veya desteklenmeyenler hakkında daha fazla bilgi için sunucusuz SQL havuzuna genel bakış sayfasını veya aşağıdaki makaleleri okuyun:

  • Depolamadan veri okumak için Dış tabloları ve OPENROWSET işlevini kullanabileceğiniz depolama erişimi geliştirin.
  • SAS kimlik doğrulamasını veya çalışma alanının Yönetilen Kimliğini kullanarak Synapse SQL'in depolamaya erişmesini nasıl etkinleştirebileceğinizi öğrenebileceğiniz depolama erişimini denetleyin.

Genel bakış

Sunucusuz SQL havuzu, Azure Depolama dosyalarında bulunan verilerin yerinde sorgulanması için sorunsuz bir deneyimi desteklemek için OPENROWSET işlevini daha fazla özellik ile kullanır:

PARQUET dosyalarını sorgulama

Parquet kaynak verilerini sorgulamak için kullanın FORMAT = 'PARQUET':

SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder/data.parquet', FORMAT = 'PARQUET') 
WITH (C1 int, C2 varchar(20), C3 varchar(max)) as rows

Kullanım örnekleri için bkz. Parquet dosyalarını sorgulama.

CSV dosyalarını sorgulama

CSV kaynak verilerini sorgulamak için kullanın FORMAT = 'CSV'. CSV dosyalarını sorgularken işlevin bir parçası olarak CSV dosyasının şemasını OPENROWSET belirtebilirsiniz:

SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder/data.csv', FORMAT = 'CSV', PARSER_VERSION='2.0') 
WITH (C1 int, C2 varchar(20), C3 varchar(max)) as rows

Ayrıştırma kurallarını özel CSV biçimine ayarlamak için kullanılabilecek bazı ek seçenekler vardır:

  • ESCAPE_CHAR = 'char' Dosyada, kendisinden kaçmak için kullanılan karakteri ve dosyadaki tüm sınırlayıcı değerleri belirtir. 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. ESCAPE_CHAR parametresi, FIELDQUOTE etkin olup olmadığı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ılama karakteriyle belirtilmelidir. Alıntı karakteri, sütun değeri içinde yalnızca değer, alıntı karakterleriyle kapsüllenmişse görünebilir.
  • 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. Varsayılan satır sonlandırıcısı yeni satır karakteridir (\r\n).

DELTA LAKE biçimini sorgulama

Delta Lake kaynak verilerini sorgulamak için Delta Lake dosyalarınızı içeren kök klasörü kullanın FORMAT = 'DELTA' ve bu klasöre başvurun.

SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder', FORMAT = 'DELTA') 
WITH (C1 int, C2 varchar(20), C3 varchar(max)) as rows

Kök klasör adlı _delta_logbir alt klasör içermelidir. Kullanım örnekleri için bkz . Delta Lake (v1) dosyalarını sorgulama.

Dosya şeması

Synapse SQL'de SQL dili, işlevin bir parçası OPENROWSET olarak dosyanın şemasını tanımlamanıza ve sütunların tümünü veya alt kümesini okumanıza olanak tanır ya da şema çıkarımı kullanarak dosyadan sütun türlerini otomatik olarak belirlemeye çalışır.

Seçilen sütun alt kümesini okuma

Okumak istediğiniz sütunları belirtmek için deyiminizde isteğe bağlı WITH bir yan tümce sağlayabilirsiniz OPENROWSET .

  • CSV veri dosyaları varsa, 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ı atamaya bağlıdır.
  • Parquet veri dosyaları varsa, orijinal veri dosyalarındaki sütun adlarıyla eşleşen sütun adlarını sağlayın. Sütunlar isimle eşleştirilir.
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder/data.parquet', FORMAT = 'PARQUET') 
WITH (
      C1 int, 
      C2 varchar(20),
      C3 varchar(max)
) as rows;

Her sütun için sütun adını belirtmeniz ve yan tümcesi WITH yazmanız gerekir. Örnekler için bkz . Tüm sütunları belirtmeden CSV dosyalarını okuma.

Şema çıkarımı

OPENROWSET ifadesindeki WITH yan tümceyi çıkartarak, hizmete şemayı temel alınan dosyalardan otomatik olarak algılamasını (çıkarmasını) sağlayabilirsiniz.

SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder/data.parquet', FORMAT = 'PARQUET') 

En iyi performans için uygun çıkarımlı veri türlerinin kullanıldığından emin olun.

Birden çok dosya veya klasör sorgulama

Bir klasör veya klasör kümesi içindeki bir dosya kümesi üzerinde T-SQL sorgusu çalıştırmak ve bunları tek bir varlık veya satır kümesi olarak ele almak için, bir klasöre veya bir dizi dosya veya klasör üzerinden bir desene (joker karakterler kullanarak) bir yol sağlayın.

Geçerli olan kurallar şunlardır:

  • Desenler dizin yolunun bir bölümünde veya dosya adında görünebilir.
  • Aynı dizin adımında veya dosya adında çeşitli desenler görüntülenebilir.
  • Birden çok joker karakter varsa, tüm eşleşen yollardaki dosyalar sonuçta elde edilen dosya kümesine eklenir.
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/myroot/*/mysubfolder/*.parquet', FORMAT = 'PARQUET' ) as rows

Kullanım örnekleri için bkz . Sorgu klasörleri ve birden çok dosya.

Dosya meta veri işlevleri

Dosya adı işlevi

Bu işlev, satırın kaynaklandığı dosya adını döndürür.

Belirli dosyaları sorgulamak için Belirli dosyaları sorgulama makalesindeki Dosya adı bölümünü okuyun.

Dönüş veri türü nvarchar(1024) değeridir. En iyi performans için dosya adı işlevinin sonucunu her zaman uygun veri türüne dönüştürebilirsiniz. Karakter veri türü kullanıyorsanız uygun uzunluğun kullanıldığından emin olun.

Filepath işlevi

Bu işlev tam yolu veya yolun bir bölümünü döndürür:

  • Parametresiz çağrıldığında, bir satırın kaynaklandığı tam dosya yolunu döndürür.
  • parametresiyle çağrıldığında, parametresinde belirtilen konumda joker karakterle eşleşen yolun bir bölümünü döndürür. Örneğin, parametre değeri 1, yolun ilk joker karakterle eşleşen bir bölümünü döndürür.

Ek bilgi için Belirli dosyaları sorgulama makalesinin Dosya yolu bölümünü okuyun.

Dönüş veri türü nvarchar(1024). En iyi performans için dosya yolu işlevinin sonucunu her zaman uygun veri türüne dönüştürebilirsiniz. Karakter veri türü kullanıyorsanız uygun uzunluğun kullanıldığından emin olun.

Karmaşık türler ve iç içe veya yinelenen veri yapıları ile çalışma

Parquet dosyaları gibi iç içe veya yinelenen veri türlerinde depolanan verilerle sorunsuz bir deneyim sağlamak için sunucusuz SQL havuzu aşağıdaki uzantıları eklemiştir.

İç içe veya tekrarlanan verileri projelendir

Verileri projeksiyon yapmak için, iç içe geçmiş veri türlerinin sütunlarını içeren Parquet dosyası üzerinde bir SELECT ifade çalıştırın. Çıktıda iç içe değerler JSON olarak serileştirilir ve varchar(8000) SQL veri türü olarak döndürülür.

    SELECT * FROM
    OPENROWSET
    (   BULK 'unstructured_data_path' ,
        FORMAT = 'PARQUET' )
    [AS alias]

Daha fazla bilgi için Query Parquet iç içe türler makalesinin Proje iç içe veya yinelenen veriler bölümüne bakın.

İç içe sütunlardan öğelere erişme

Yapı gibi iç içe yerleştirilmiş bir sütundan iç içe öğelere erişmek için, alan adlarını yola birleştirmek için noktalı gösterimi kullanın. OPENROWSET işlevinin WITH yan tümcesinde column_name yolunu sağlayın.

Söz dizimi parçası örneği aşağıdaki gibidir:

    OPENROWSET
    (   BULK 'unstructured_data_path' ,
        FORMAT = 'PARQUET' )
    WITH ('column_name' 'column_type')
    [AS alias]
    'column_name' ::= '[field_name.] field_name'

Varsayılan olarak, OPENROWSET işlevi, kaynak alan adı ve yolu, WITH ifadesinde belirtilen sütun adlarıyla eşleştirir. Aynı kaynak Parquet dosyası içinde farklı iç içe yerleştirme düzeylerinde bulunan öğelere yan tümcesi WITH kullanılarak erişilebilir.

Dönüş değerleri

  • Belirtilen öğeden ve belirtilen yoldan, İç İçe Tür grubunda olmayan tüm Parquet türleri için, int, decimal, ve varchar gibi bir skaler değer döndürür.
  • Yol, İç İçe Türündeki bir öğeyi işaret ederse, işlev belirtilen yoldaki en üst öğeden başlayan bir JSON parçası döndürür. JSON parçası varchar(8000) türündedir.
  • Özelliği belirtilen column_namekonumunda bulunamazsa işlev bir hata döndürür.
  • Özellik belirtilen column_path konumda bulunamıyorsa, Yol moduna bağlı olarak, katı moddayken işlev bir hata döndürür, lax modunda ise null döner.

Sorgu örnekleri için Sorgu Parquet iç içe türler makalesinin İç içe nesne sütunlarından özellikleri okuma bölümüne bakın.

Yinelenen sütunlardan öğelere erişme

Dizi veya eşleme öğesi gibi yinelenen bir sütundaki öğelere erişmek için yansıtmanız ve sağlamanız gereken her skaler öğe için JSON_VALUE işlevini kullanın:

Yinelenen bir sütundaki skaler olmayan öğelere erişmek için yansıtmak istediğiniz her bir skaler olmayan öğe için JSON_QUERY işlevini kullanın:

Aşağıdaki söz dizimi parçasına bakın:

    SELECT
       JSON_VALUE (column_name, path_to_sub_element),
       JSON_QUERY (column_name [ , path_to_sub_element ])
    FROM
    OPENROWSET
    (   BULK 'unstructured_data_path' ,
        FORMAT = 'PARQUET' )
    [AS alias]

Yinelenen sütunlardan öğelere erişmek için sorgu örneklerini Sorgu Parquet iç içe türler makalesinde bulabilirsiniz.

Farklı dosya türlerini sorgulama ve görünümleri oluşturma ve kullanma hakkında daha fazla bilgi için aşağıdaki makalelere bakın: