Wykonywanie zapytań dotyczących plików magazynu za pomocą bezserwerowej puli SQL w usłudze Azure Synapse Analytics
Bezserwerowa pula SQL umożliwia wykonywanie zapytań o dane w usłudze Data Lake. Oferuje ona obszar powierzchni zapytań 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 Transact-SQL SELECT do usługi Azure Storage.
Aby uzyskać więcej informacji na temat tego, co jest w porównaniu z tym, co nie jest obecnie obsługiwane, przeczytaj artykuł Omówienie bezserwerowej puli SQL lub następujące artykuły:
- Opracowywanie dostępu do magazynu, w którym można dowiedzieć się, jak odczytywać dane z magazynu za pomocą funkcji External table i 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ć bezproblemową obsługę wykonywania zapytań dotyczących danych znajdujących się w plikach usługi Azure Storage, bezserwerowa pula SQL używa funkcji OPENROWSET z dodatkowymi możliwościami:
- Wykonywanie zapytań dotyczących wielu plików lub folderów
- Format pliku PARQUET
- Wykonywanie zapytań dotyczących pliku CSV i tekstu rozdzielanego (terminator pól, terminator wierszy, znak ucieczki)
- Format USŁUGI DELTA LAKE
- Odczytywanie wybranego podzestawu kolumn
- Wnioskowanie schematu
- 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 formatu = "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
Zapoznaj się z artykułem Query Parquet files (Pliki Parquet zapytań), aby zapoznać się z przykładami użycia.
Wykonywanie zapytań o pliki CSV
Aby wysłać zapytanie do danych źródłowych CSV, użyj formatu = "CSV". Schemat pliku CSV można określić jako część 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órych można użyć do dostosowania 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. Parametr ESCAPE_CHAR zostanie zastosowany niezależnie od tego, czy parametr FIELDQUOTE jest włączony, czy nie jest włączony. Nie będzie używany do ucieczki 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 do użycia. Domyślny terminator pola to przecinek (",")
- ROWTERMINATOR ='row_terminator' Określa terminator wierszy do użycia. Domyślny terminator wiersza jest znakiem nowego wiersza: \r\n.
Format usługi DELTA LAKE zapytań
Aby wysłać zapytanie do danych źródłowych usługi Delta Lake, użyj formatu = "DELTA" i odwołaj się do folderu głównego zawierającego pliki usługi Delta Lake.
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
.
Zapoznaj się z artykułem dotyczącym formatu usługi Delta Lake, aby zapoznać się z przykładami użycia.
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ć opcjonalną klauzulę WITH w instrukcji OPENROWSET
.
- Jeśli istnieją pliki danych CSV, aby odczytać wszystkie kolumny, podaj nazwy kolumn i ich typy danych. 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 będą 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 będą 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, zapoznaj się z tematem Odczyt plików CSV bez określania wszystkich kolumn.
Wnioskowanie schematu
Pomijając klauzulę WITH z instrukcji OPENROWSET
, możesz poinstruować usługę, aby automatycznie wykrywała (wnioskowanie) schematu 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 zostaną uwzględnione w wynikowym zestawie plików.
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/myroot/*/mysubfolder/*.parquet', FORMAT = 'PARQUET' ) as rows
Zapoznaj się z tematem Query folders and multiple files (Foldery zapytań i wiele plików ), aby zapoznać się z przykładami użycia.
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 będą 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ć bardziej szczegółowe informacje, zapoznaj się z sekcją Project nested or repeated data ( Zagnieżdżone lub powtarzające się dane) artykułu Query Parquet nested types (Zagnieżdżone typy zapytań).
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ę jako column_name w klauzuli OPENROWSET
WITH 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 znajdujących się na różnych poziomach zagnieżdżania w tym samym źródłowym pliku Parquet można uzyskać za pośrednictwem klauzuli WITH.
Zwracane wartości
- Funkcja zwraca wartość skalarną, taką jak int, decimal i varchar, z określonego elementu, a w określonej ścieżce dla wszystkich typów Parquet, które nie są w zagnieżdżonej grupie Typ.
- 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ślonym column_name, funkcja zwraca błąd.
- Jeśli nie można odnaleźć właściwości w określonym column_path, w zależności od trybu ścieżki funkcja zwraca błąd w trybie ścisłym lub null w trybie lax.
Aby zapoznać się z przykładami zapytań, zapoznaj się z sekcją Access elements from nested columns (Elementy programu Access z zagnieżdżonych kolumn) 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ż skalarne z powtarzającej się kolumny, użyj funkcji JSON_QUERY dla każdego elementu nieskalarnego, 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 fragment składni poniżej:
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ń).
Następne kroki
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: