Wykonywanie zapytań dotyczących plików magazynu przy użyciu bezserwerowej puli SQL
Bezserwerowa pula SQL umożliwia wykonywanie zapytań o dane w usłudze Data Lake. Oferuje ona obszar powierzchni zapytań języka Transact-SQL (T-SQL), który obsługuje częściowo ustrukturyzowane i nieustrukturyzowane zapytania dotyczące danych. W przypadku wykonywania zapytań obsługiwane są następujące aspekty języka T-SQL:
- Pełny obszar powierzchni SELECT , w tym większość funkcji i operatorów SQL.
- FUNKCJA CREATE EXTERNAL TABLE AS SELECT (CETAS) tworzy tabelę zewnętrzną, a następnie eksportuje równolegle wyniki instrukcji T-SQL SELECT do usługi Azure Storage.
Aby uzyskać więcej informacji na temat tego, co jest obecnie obsługiwane, zapoznaj się z omówieniem bezserwerowej puli SQL lub następującymi artykułami:
- Twórz dostęp do magazynu, w którym można odczytywać dane z magazynu przy użyciu tabel zewnętrznych i funkcji OPENROWSET .
- Kontrolowanie dostępu do magazynu, w którym można dowiedzieć się, jak włączyć usługę Synapse SQL w celu uzyskania dostępu do magazynu przy użyciu uwierzytelniania sygnatury dostępu współdzielonego lub tożsamości zarządzanej obszaru roboczego.
Omówienie
Aby zapewnić bezproblemowe środowisko wykonywania zapytań dotyczących danych znajdujących się w plikach usługi Azure Storage, bezserwerowa pula SQL używa funkcji OPENROWSET z większą częścią możliwości:
- Wykonywanie zapytań względem plików PARQUET
- Wykonywanie zapytań dotyczących plików CSV i tekstu rozdzielanego (terminator pól, terminator wierszy, znak ucieczki)
- Format usługi DELTA LAKE zapytań
- Odczytywanie wybranego podzestawu kolumn
- Wnioskowanie schematu
- Wykonywanie zapytań dotyczących wielu plików lub folderów
- Nazwa pliku, funkcja
- Filepath, funkcja
- Praca ze złożonymi typami i zagnieżdżonym lub powtarzającymi się strukturami danych
Wykonywanie zapytań względem plików PARQUET
Aby wysłać zapytanie do danych źródłowych Parquet, użyj polecenia 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
Przykłady użycia można znaleźć w temacie Query Parquet files (Tworzenie zapytań w plikach Parquet).
Wykonywanie zapytań o pliki CSV
Aby wysłać zapytanie do danych źródłowych CSV, użyj polecenia FORMAT = 'CSV'
. Schemat pliku CSV można określić w ramach OPENROWSET
funkcji podczas wykonywania zapytań dotyczących plików CSV:
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
Istnieje kilka dodatkowych opcji, które mogą służyć do dostosowywania reguł analizowania do niestandardowego formatu CSV:
-
ESCAPE_CHAR = 'char'
Określa znak w pliku, który jest używany do ucieczki siebie i wszystkich wartości ograniczników w pliku. Jeśli znak ucieczki następuje po wartości innej niż sama lub którejkolwiek z wartości ograniczników, znak ucieczki zostanie porzucony podczas odczytywania wartości. ParametrESCAPE_CHAR
jest stosowany niezależnie od tego, czyFIELDQUOTE
parametr jest włączony, czy nie jest włączony. Nie służy do ucieczki od znaku cudzysłów. Znak cudzysłów musi zostać uniknięta innym znakiem cudzysłów. Znak cudzysłów może pojawić się w wartości kolumny tylko wtedy, gdy wartość jest hermetyzowana znakami cudzysłów. -
FIELDTERMINATOR ='field_terminator'
Określa terminator pola, który ma być używany. Domyślnym terminatorem pola jest przecinek (,
). -
ROWTERMINATOR ='row_terminator'
Określa terminator wierszy do użycia. Domyślny terminator wierszy jest znakiem nowego wiersza (\r\n
).
Format usługi DELTA LAKE zapytań
Aby wykonywać zapytania dotyczące danych źródłowych usługi Delta Lake, użyj FORMAT = 'DELTA'
folderu głównego zawierającego pliki usługi Delta Lake i odwołaj się do niego.
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
Folder główny musi zawierać podfolder o nazwie _delta_log
. Przykłady użycia można znaleźć w temacie Query Delta Lake (v1) files (Pliki usługi Delta Lake w wersji 1).
Schemat pliku
Język SQL w usłudze Synapse SQL umożliwia zdefiniowanie schematu pliku w ramach OPENROWSET
funkcji i odczytanie wszystkich lub podzestawu kolumn lub próba automatycznego określenia typów kolumn z pliku przy użyciu wnioskowania schematu.
Odczytywanie wybranego podzestawu kolumn
Aby określić kolumny, które chcesz odczytać, możesz podać klauzulę opcjonalną WITH
w instrukcji OPENROWSET
.
- Jeśli istnieją pliki danych CSV, podaj nazwy kolumn i ich typy danych, aby odczytać wszystkie kolumny. Jeśli chcesz, aby podzbiór kolumn używał liczb porządkowych, aby wybrać kolumny z plików danych źródłowych według porządkowych. Kolumny są powiązane z oznaczeniem porządkowym.
- Jeśli istnieją pliki danych Parquet, podaj nazwy kolumn, które pasują do nazw kolumn w plikach danych źródłowych. Kolumny są powiązane według nazwy.
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;
Dla każdej kolumny należy określić nazwę kolumny i typ klauzuli .WITH
Aby zapoznać się z przykładami, zobacz Odczytywanie plików CSV bez określania wszystkich kolumn.
Wnioskowanie schematu
Pomijając klauzulę WITH
z instrukcji OPENROWSET
, możesz poinstruować usługę, aby automatycznie wykryła (wywnioskować) schemat z plików bazowych.
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder/data.parquet', FORMAT = 'PARQUET')
Upewnij się, że odpowiednie typy danych wywnioskowanych są używane w celu uzyskania optymalnej wydajności.
Wykonywanie zapytań dotyczących wielu plików lub folderów
Aby uruchomić zapytanie T-SQL dla zestawu plików w folderze lub zestawie folderów podczas traktowania ich jako pojedynczej jednostki lub zestawu wierszy, podaj ścieżkę do folderu lub wzorca (przy użyciu symboli wieloznacznych) w zestawie plików lub folderów.
Obowiązują następujące zasady:
- Wzorce mogą być wyświetlane w części ścieżki katalogu lub w nazwie pliku.
- Kilka wzorców może być wyświetlanych w tym samym kroku katalogu lub nazwie pliku.
- Jeśli istnieje wiele symboli wieloznacznych, pliki we wszystkich pasujących ścieżkach znajdują się w wynikowym zestawie plików.
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/myroot/*/mysubfolder/*.parquet', FORMAT = 'PARQUET' ) as rows
Przykłady użycia można znaleźć w temacie Query folders and multiple files (Foldery zapytań i wiele plików).
Funkcje metadanych pliku
Nazwa pliku, funkcja
Ta funkcja zwraca nazwę pliku, z którego pochodzi wiersz.
Aby wykonywać zapytania dotyczące określonych plików, przeczytaj sekcję Nazwa pliku w artykule Zapytanie dotyczące plików .
Zwracany typ danych to nvarchar(1024). Aby uzyskać optymalną wydajność, zawsze rzutuj wynik funkcji nazwy pliku do odpowiedniego typu danych. Jeśli używasz typu danych znaków, upewnij się, że jest używana odpowiednia długość.
Filepath, funkcja
Ta funkcja zwraca pełną ścieżkę lub część ścieżki:
- Po wywołaniu bez parametru zwraca pełną ścieżkę pliku, z którego pochodzi wiersz.
- Po wywołaniu z parametrem zwraca część ścieżki, która pasuje do symbolu wieloznakowego na pozycji określonej w parametrze . Na przykład wartość parametru 1 zwróci część ścieżki zgodnej z pierwszym symbolem wieloznacznymi.
Aby uzyskać dodatkowe informacje, przeczytaj sekcję Filepath (Ścieżka pliku) artykułu Query specific files (Zapytanie dotyczące plików ).
Zwracany typ danych to nvarchar(1024). Aby uzyskać optymalną wydajność, zawsze rzutuj wynik funkcji filepath do odpowiedniego typu danych. Jeśli używasz typu danych znaków, upewnij się, że jest używana odpowiednia długość.
Praca ze złożonymi typami i zagnieżdżonym lub powtarzającymi się strukturami danych
Aby umożliwić bezproblemowe korzystanie z danych przechowywanych w zagnieżdżonych lub powtarzających się typach danych, takich jak w plikach Parquet , bezserwerowa pula SQL dodała następujące rozszerzenia.
Zagnieżdżone lub powtarzające się dane projektu
Aby projektować dane, uruchom instrukcję SELECT
w pliku Parquet zawierającym kolumny zagnieżdżonych typów danych. W danych wyjściowych zagnieżdżone wartości są serializowane w formacie JSON i zwracane jako typ danych SQL varchar(8000).
SELECT * FROM
OPENROWSET
( BULK 'unstructured_data_path' ,
FORMAT = 'PARQUET' )
[AS alias]
Aby uzyskać więcej informacji, zobacz sekcję Project nested or repeated data (Projekt zagnieżdżony lub powtarzające się dane) artykułu Query Parquet nested types (Typy zagnieżdżone zapytania).
Uzyskiwanie dostępu do elementów z kolumn zagnieżdżonych
Aby uzyskać dostęp do zagnieżdżonych elementów z zagnieżdżonej kolumny, takiej jak struktura, użyj notacji kropkowej , aby połączyć nazwy pól ze ścieżką. Podaj ścieżkę w column_name
WITH
postaci klauzuli OPENROWSET
funkcji.
Przykład fragmentu składni wygląda następująco:
OPENROWSET
( BULK 'unstructured_data_path' ,
FORMAT = 'PARQUET' )
WITH ('column_name' 'column_type')
[AS alias]
'column_name' ::= '[field_name.] field_name'
Domyślnie OPENROWSET
funkcja pasuje do nazwy pola źródłowego i ścieżki z nazwami kolumn podanymi w klauzuli WITH
. Dostęp do elementów zawartych na różnych poziomach zagnieżdżania w tym samym źródłowym pliku Parquet można uzyskać przy użyciu klauzuli WITH
.
Zwracane wartości
- Funkcja zwraca wartość skalarną, taką jak
int
,decimal
ivarchar
, z określonego elementu, a w określonej ścieżce dla wszystkich typów Parquet, które nie są w grupie Typ zagnieżdżony. - Jeśli ścieżka wskazuje element typu zagnieżdżonego, funkcja zwraca fragment JSON rozpoczynający się od górnego elementu na określonej ścieżce. Fragment JSON jest typu varchar(8000).
- Jeśli nie można odnaleźć właściwości w określonej
column_name
funkcji , funkcja zwróci błąd. - Jeśli nie można odnaleźć właściwości w określonym
column_path
trybie , w zależności od trybu ścieżki funkcja zwraca błąd w trybie ścisłym lub null w trybie lax.
Przykłady zapytań można znaleźć w sekcji Odczyt właściwości z kolumn obiektów zagnieżdżonych w artykule Query Parquet nested types (Typy zagnieżdżone zapytań).
Uzyskiwanie dostępu do elementów z powtarzających się kolumn
Aby uzyskać dostęp do elementów z powtarzającej się kolumny, takiej jak element tablicy lub mapy, użyj funkcji JSON_VALUE dla każdego elementu skalarnego, który należy projektować i udostępniać:
- Zagnieżdżone lub powtarzające się kolumny jako pierwszy parametr
- Ścieżka JSON określająca element lub właściwość dostępu jako drugi parametr
Aby uzyskać dostęp do elementów innych niż elementy z powtarzającej się kolumny, użyj funkcji JSON_QUERY dla każdego elementu innego niż niepodseklarowy, który należy projektować i udostępniać:
- Zagnieżdżone lub powtarzające się kolumny jako pierwszy parametr
- Ścieżka JSON określająca element lub właściwość dostępu jako drugi parametr
Zobacz następujący fragment składni:
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]
Przykłady zapytań umożliwiające uzyskiwanie dostępu do elementów z powtarzających się kolumn można znaleźć w artykule Query Parquet nested types (Typy zagnieżdżone zapytań).
Powiązana zawartość
Aby uzyskać więcej informacji na temat wykonywania zapytań dotyczących różnych typów plików oraz tworzenia i używania widoków, zobacz następujące artykuły: