Udostępnij za pośrednictwem


Szybki start: Używanie puli SQL bez użycia serwera

Bezserwerowa pula SQL usługi Synapse to bezserwerowa usługa zapytań, która umożliwia uruchamianie zapytań SQL dotyczących plików umieszczonych w usłudze Azure Storage. Z tego przewodnika Szybki start dowiesz się, jak wykonywać zapytania dotyczące różnych typów plików przy użyciu bezserwerowej puli SQL. Aby uzyskać listę obsługiwanych formatów, zobacz OPENROWSET.

W tym przewodniku Szybki start pokazano, jak wykonywać zapytania dotyczące plików CSV, Apache Parquet i JSON.

Wymagania wstępne

Wybierz klienta SQL na potrzeby wykonywania zapytań:

  • Azure Synapse Studio to narzędzie internetowe, za pomocą którego można przeglądać pliki w magazynie i tworzyć zapytania SQL.
  • Program Visual Studio Code z rozszerzeniem mssql to międzyplatformowe lekkie narzędzie deweloperskie i narzędzie do obsługi danych, które umożliwia uruchamianie zapytań SQL i notesów w bazie danych na żądanie.
  • SQL Server Management Studio to narzędzie klienckie, które umożliwia uruchamianie zapytań SQL w bazie danych na żądanie.

W tym przewodniku Szybki start są używane następujące parametry:

Parametr Opis
Adres punktu końcowego usługi bezserwerowej puli SQL Używana jako nazwa serwera
Bezserwerowy region punktu końcowego usługi puli SQL Służy do określania magazynu do użycia w przykładach
Nazwa użytkownika i hasło dostępu do punktu końcowego Służy do uzyskiwania dostępu do punktu końcowego
Baza danych używana do tworzenia widoków Baza danych używana jako punkt początkowy w przykładach

Konfiguracja po raz pierwszy

Przed użyciem przykładów:

  • Utwórz bazę danych dla widoków (w przypadku, gdy chcesz użyć widoków).
  • Utwórz poświadczenia do użycia przez bezserwerową pulę SQL w celu uzyskania dostępu do plików w magazynie.

Tworzenie bazy danych

Utwórz własną bazę danych do celów demonstracyjnych. Ta baza danych umożliwia tworzenie widoków i przykładowych zapytań w tym artykule.

Uwaga

Bazy danych są używane tylko do wyświetlania metadanych, a nie dla rzeczywistych danych. Zapisz nazwę bazy danych do użycia w dalszej części przewodnika Szybki start.

Użyj następującego polecenia języka T-SQL, zmieniając <mydbname> na wybraną nazwę:

CREATE DATABASE <mydbname>

Tworzenie źródła danych

Aby uruchamiać zapytania przy użyciu bezserwerowej puli SQL, utwórz źródło danych, za pomocą którego bezserwerowa pula SQL może uzyskiwać dostęp do plików w magazynie. Wykonaj poniższy fragment kodu, aby utworzyć źródło danych używane w przykładach w tej sekcji. Zastąp <strong-password-here> ciąg wybranym silnym hasłem.

-- create master key that will protect the credentials:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong-password-here>'

-- create credentials for containers in our demo storage account
CREATE DATABASE SCOPED CREDENTIAL sqlondemand
WITH IDENTITY='SHARED ACCESS SIGNATURE',  
SECRET = 'sv=2022-11-02&ss=b&srt=co&sp=rl&se=2042-11-26T17:40:55Z&st=2024-11-24T09:40:55Z&spr=https&sig=DKZDuSeZhuCWP9IytWLQwu9shcI5pTJ%2Fw5Crw6fD%2BC8%3D'
GO
CREATE EXTERNAL DATA SOURCE SqlOnDemandDemo WITH (
    LOCATION = 'https://sqlondemandstorage.blob.core.windows.net',
    CREDENTIAL = sqlondemand
);

Wykonywanie zapytań o pliki CSV

Na poniższej ilustracji przedstawiono podgląd pliku do odpytowania:

Zrzut ekranu przedstawiający pierwsze 10 wierszy pliku CSV bez nagłówka, nowy wiersz stylu systemu Windows.

Poniższe zapytanie pokazuje, jak odczytać plik CSV, który nie zawiera wiersza nagłówka, z nowym wierszem w stylu systemu Windows i kolumnami rozdzielanymi przecinkami:

SELECT TOP 10 *
FROM OPENROWSET
  (
      BULK 'csv/population/*.csv',
      DATA_SOURCE = 'SqlOnDemandDemo',
      FORMAT = 'CSV', PARSER_VERSION = '2.0'
  )
WITH
  (
      country_code VARCHAR (5)
    , country_name VARCHAR (100)
    , year smallint
    , population bigint
  ) AS r
WHERE
  country_name = 'Luxembourg' AND year = 2017

Schemat można określić w czasie kompilacji zapytania. Aby uzyskać więcej przykładów, zobacz jak wykonywać zapytania dotyczące plików CSV.

Wykonywanie zapytań względem plików Parquet

Poniższy przykład przedstawia możliwości automatycznego wnioskowania schematu na potrzeby wykonywania zapytań dotyczących plików Parquet. Zwraca liczbę wierszy we wrześniu 2017 r. bez określania schematu.

Uwaga

Podczas odczytywania plików Parquet nie trzeba określać kolumn w OPENROWSET WITH klauzuli . W takim przypadku bezserwerowa pula SQL korzysta z metadanych w pliku Parquet i wiąże kolumny według nazwy.

SELECT COUNT_BIG(*)
FROM OPENROWSET
  (
      BULK 'parquet/taxi/year=2017/month=9/*.parquet',
      DATA_SOURCE = 'SqlOnDemandDemo',
      FORMAT='PARQUET'
  ) AS nyc

Aby uzyskać więcej informacji, zobacz Query Parquet files using serverless SQL pool (Wykonywanie zapytań dotyczących plików Parquet przy użyciu bezserwerowej puli SQL).

Wykonywanie zapytań względem plików JSON

Przykładowy plik JSON

Pliki są przechowywane w kontenerze json, przy użyciu książek folderów i zawierają pojedynczy wpis książki z następującą strukturą:

{  
   "_id":"ahokw88",
   "type":"Book",
   "title":"The AWK Programming Language",
   "year":"1988",
   "publisher":"Addison-Wesley",
   "authors":[  
      "Alfred V. Aho",
      "Brian W. Kernighan",
      "Peter J. Weinberger"
   ],
   "source":"DBLP"
}

Przykładowe zapytanie

Poniższe zapytanie pokazuje, jak używać JSON_VALUE do pobierania wartości skalarnych (tytuł, wydawca) z książki z tytułem Probabilistic and Statistical Methods in Cryptology( Wprowadzenie):

SELECT
    JSON_VALUE(jsonContent, '$.title') AS title
  , JSON_VALUE(jsonContent, '$.publisher') as publisher
  , jsonContent
FROM OPENROWSET
  (
      BULK 'json/books/*.json',
      DATA_SOURCE = 'SqlOnDemandDemo'
    , FORMAT='CSV'
    , FIELDTERMINATOR ='0x0b'
    , FIELDQUOTE = '0x0b'
    , ROWTERMINATOR = '0x0b'
  )
WITH
  ( jsonContent varchar(8000) ) AS [r]
WHERE
  JSON_VALUE(jsonContent, '$.title') = 'Probabilistic and Statistical Methods in Cryptology, An Introduction'

Ważne

Odczytujemy cały plik JSON jako pojedynczy wiersz lub kolumnę. Dlatego FIELDTERMINATORparametr , i ROWTERMINATOR jest ustawiony na 0x0b wartość , FIELDQUOTEponieważ nie spodziewamy się znalezienia go w pliku.