Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:✅ Magazyn danych w usłudze Microsoft Fabric
Język Transact-SQL oferuje opcje, które pozwalają ładować dane na dużą skalę z istniejących tabel w Lakehouse i magazynie do nowych tabel w magazynie. Te opcje są wygodne, jeśli musisz utworzyć nowe wersje tabeli z zagregowanymi danymi, wersjami tabel z podzbiorem wierszy lub utworzyć tabelę w wyniku złożonego zapytania. Przyjrzyjmy się kilku przykładom.
Tworzenie nowej tabeli z wynikiem zapytania
Magazyn w usłudze Microsoft Fabric umożliwia łatwe tworzenie nowej tabeli na podstawie wyniku zapytania T-SQL przy użyciu następujących instrukcji języka T-SQL:
-
CREATE TABLE AS SELECT(CTAS) polecenie, które umożliwia utworzenie nowej tabeli w magazynie na podstawie danych wyjściowych poleceniaSELECT. -
SELECT INTOklauzula query, która umożliwia wybranie wyników z dowolnego źródła tabeli i przekierowanie wyników do nowej tabeli. Jest to standardowa funkcja w języku T-SQL.
Te dwie instrukcje są podobne, więc poniższe przykłady koncentrują się na instrukcji CTAS.
Instrukcja CTAS uruchamia proces ładowania w nowej tabeli równolegle, dzięki czemu jest wysoce wydajna w przypadku przekształcania danych i tworzenia nowych tabel w środowisku roboczym.
Dla SELECT części instrukcji CTAS można użyć następujących opcji:
- Odczytywanie tabeli magazynu, na przykład tabeli przejściowej.
- Odczytywanie folderu Delta Lake Lakehouse przy użyciu autogenerowanej tabeli w endpointzie analityki SQL dla Lakehouse.
- Odczytywanie plików CSV, Parquet lub JSONL bezpośrednio z usługi Azure Data Lake lub Azure Blob Storage przy użyciu funkcji
OPENROWSET.
Aby załadować przykładowy zestaw danych, wykonaj kroki opisane w temacie Ładowanie danych do swojego magazynu przy użyciu instrukcji COPY, aby załadować przykładowe dane do swojego magazynu.
Tworzenie tabeli na podstawie tabeli magazynu
W pierwszym przykładzie pokazano, jak utworzyć nową tabelę, która jest kopią istniejącej dbo.TaxiTrips tabeli, ale filtrowana tak, aby zawierała tylko dane z roku 2023:
CREATE TABLE dbo.TaxiTrips_2023
AS
SELECT *
FROM dbo.TaxiTrips
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';
Tworzenie tabeli z folderu usługi Delta Lake
Foldery Delta Lake, które są zapisywane w OneLake, są automatycznie reprezentowane jako tabele, jeśli są przechowywane w folderze /Tables w magazynie typu lakehouse. Poniższy kod tworzy nową tabelę TaxiTrips_2023 z folderu Delta Lake /Tables/TaxiTrips w jeziorze danych MyLakehouse:
CREATE TABLE dbo.TaxiTrips_2023
AS
SELECT *
FROM MyLakehouse.dbo.TaxiTrips
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';
Możesz odwołać się do folderu Delta Lake, korzystając z notacji trzyczęściowej, która odnosi się do lakehouse, gdzie są przechowywane pliki. Wszystkie przykłady pokazane w poprzedniej sekcji mają zastosowanie do folderów usługi Delta Lake.
Tworzenie tabeli na podstawie pliku CSV/Parquet/JSONL
Możesz również utworzyć nową tabelę bezpośrednio z pliku zewnętrznego przy użyciu OPENROWSET funkcji . Na przykład poniższy przykładowy kod T-SQL używa symboli zastępczych, aby zademonstrować sposób importowania publicznego pliku Parquet.
CREATE TABLE dbo.<table_name>
AS
SELECT *
FROM OPENROWSET(BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>.parquet') AS data;
Nową tabelę można utworzyć, przekształcając dane z zewnętrznego, publicznie dostępnego pliku CSV:
CREATE TABLE dbo.<table name>
AS
SELECT *
FROM OPENROWSET(BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>.csv') AS data;
Możesz też utworzyć nową tabelę, przekształcając dane z zewnętrznego, publicznie dostępnego pliku JSONL:
CREATE TABLE dbo.<table name>
AS
SELECT *
FROM OPENROWSET(BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>.jsonl') AS data;
- Aby uzyskać więcej informacji i przykładów dotyczących wykonywania zapytań dotyczących danych zewnętrznych, zobacz Query external data lake files by using Fabric Data Warehouse or SQL Analytics endpoint (Wykonywanie zapytań względem zewnętrznych plików typu data lake przy użyciu usługi Fabric Data Warehouse lub punktu końcowego analizy SQL).
- Aby uzyskać więcej przykładów i dokumentacji składni, zobacz CREATE TABLE AS SELECT (Transact-SQL).
Pozyskiwanie danych do istniejących tabel za pomocą zapytań T-SQL
Poprzednie przykłady tworzą nowe tabele na podstawie wyniku zapytania. Aby replikować przykłady na istniejących tabelach, można użyć wzorca INSERT ... SELECT.
Pobierz dane z tabeli magazynowej
Poniższy kod pozyskuje nowe dane z tabeli magazynu do istniejącej tabeli:
INSERT INTO dbo.TaxiTrips_2023
SELECT *
FROM dbo.TaxiTrips
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';
Kryteria zapytania dla SELECT wyrażenia mogą być dowolnym prawidłowym zapytaniem, pod warunkiem że wynikowe typy kolumn zapytania są zgodne z kolumnami w docelowej tabeli. Jeśli nazwy kolumn są określone i zawierają tylko podzbiór kolumn z tabeli docelowej, wszystkie pozostałe kolumny są ładowane jako NULL. Aby uzyskać więcej informacji, zobacz Korzystanie z INSERT INTO...SELECT do zbiorczego importowania danych z minimalnym rejestrowaniem i przy równoległości.
Ingestuj dane z folderu Delta Lake
Foldery Delta Lake, które są przechowywane w OneLake, są automatycznie reprezentowane jako tabele, jeśli są przechowywane w /Tables katalogu w lakehouse.
Poniższy kod wczytuje nowe dane z sekcji folderów Delta Lake /Tables/TaxiTrips w lakehouse MyLakehouse*.
INSERT INTO dbo.TaxiTrips_2023
SELECT *
FROM MyLakehouse.dbo.TaxiTrips
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';
Importowanie danych z pliku CSV/Parquet/JSONL
Możesz użyć funkcji OPENROWSET jako źródła w celu pozyskiwania plików Parquet, CSV lub JSON z magazynu.
INSERT INTO dbo.<table name>
SELECT *
FROM OPENROWSET(BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>') AS data
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';
Wiele plików można odczytać przy użyciu symboli wieloznacznych, takich jak *.parquet, lub przez określanie wartości docelowych dla katalogów podzielonych na partycje, takich jak /year=*/month=*. Aby zoptymalizować wydajność, zastosuj filtry w klauzuli WHERE, aby wyeliminować niepotrzebne wiersze i partycje podczas wykonywania zapytania.
Te przykłady są podobne do tych używanych podczas importowania za pomocą funkcji COPY INTO. Polecenie COPY INTO jest łatwiejsze w użyciu, szczególnie w przypadku prostych obciążeń danych źródłowych do miejsca docelowego. Jeśli jednak musisz przekształcić dane źródłowe (takie jak konwertowanie wartości lub łączenie z innymi tabelami), użycie INSERT ... SELECT zapewnia elastyczność w wykonywaniu przekształceń podczas przyjmowania danych.
Pozyskiwanie danych z usługi OneLake
Możesz użyć funkcji OPENROWSET jako źródła w celu pozyskiwania danych z magazynu Fabric OneLake. Zastąp {workspaceId} i {lakehouseId} odpowiednimi identyfikatorami GUID obszaru roboczego i lakehouse w następującym przykładzie:
INSERT INTO dbo.TaxiTrips_2023
SELECT *
FROM OPENROWSET(BULK 'https://onelake.dfs.fabric.microsoft.com/{workspaceId}/{lakehouseId}/Files/year=*/month=*/*.parquet') AS data
WHERE data.filepath(1) = '2023'
Ten przykład opiera się na poprzednim, który odczytuje dane z usługi Azure Data Lake Storage. Użyj tego podejścia, jeśli zachodzi potrzeba przekształcenia danych źródłowych, na przykład przez przekonwertowanie wartości, dołączenie do innych tabel lub odczytanie określonych partycji. W takich przypadkach użycie INSERT ... SELECT zapewnia elastyczność stosowania przekształceń podczas pozyskiwania danych.
Pobieranie danych z tabel znajdujących się w różnych magazynach danych oraz lakehouse'ach.
W przypadku instrukcji CREATE TABLE AS SELECT i INSERT ... SELECTinstrukcja SELECT może również odwoływać się do tabel w magazynach, które różnią się od magazynu, w którym jest przechowywana tabela docelowa, przy użyciu zapytań między magazynami. Można to osiągnąć za pomocą konwencji nazewnictwa [warehouse_or_lakehouse_name.][schema_name.]table_name trzyczęściowej. Załóżmy na przykład, że masz następujące zasoby obszaru roboczego:
- Lakehouse o nazwie
taxi_lakehousez najnowszymi danymi. - Magazyn o nazwie
reference_warehousez tabelami wykorzystywanymi do danych referencyjnych. - Przechowalnia danych o nazwie
research_warehouse, w której tworzona jest tabela docelowa.
Można utworzyć nową tabelę, która używa trzyczęściowego nazewnictwa do łączenia danych z tabel w tych zasobach obszaru roboczego:
CREATE TABLE research_warehouse.dbo.taxi_trips
AS
SELECT *
FROM taxi_lakehouse.dbo.TaxiTrips AS latest
INNER JOIN reference_warehouse.dbo.TaxiTrips AS reference
ON latest.vendorId_lpep = reference.vendorId_lpep;
Aby dowiedzieć się więcej na temat zapytań między hurtowniami danych, zobacz Jak napisać zapytanie SQL obejmujące wiele baz danych.
Inspekcja i monitorowanie ingestowania kodu T-SQL
Operacje CTAS i INSERT ... SELECT wykonywane za pomocą T-SQL pojawiają się w historii/aktywności zapytań magazynu i mogą być monitorowane wraz z innymi operacjami magazynu.
Opcje pozyskiwania danych
Inne sposoby pozyskiwania danych do magazynu obejmują:
- Pozyskiwanie danych używając instrukcji COPY
- Pozyskiwanie danych przy użyciu potoków
- Pozyskiwanie danych przy użyciu przepływu danych