Łączenie, wykonywanie zapytań i eksportowanie danych za pomocą technologii PolyBase

Dotyczy do: SQL Server 2016 (13.x) i nowsze wersje Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

Wirtualizacja danych umożliwia uruchamianie zapytań Transact-SQL (T-SQL) na danych zewnętrznych bez ładowania ich do bazy danych. Zdefiniujesz zewnętrzne źródło danych, opcjonalny format pliku i tabelę zewnętrzną, a następnie wykonasz zapytanie względem tabeli zewnętrznej, tak SELECT jak każda inna tabela.

Ten przewodnik ułatwia:

  • Dowiedz się, które funkcje PolyBase są obsługiwane przez Twoją platformę SQL i wersję.
  • Wybierz między OPENROWSET, tabelami zewnętrznymi lub BULK INSERT na potrzeby wykonywania zapytań lub pozyskiwania danych.
  • Postępuj krok po kroku, używając dostępnych linków w typowych scenariuszach.
  • Zapoznaj się z wydajnością, rozwiązywaniem problemów i najlepszymi rozwiązaniami dotyczącymi obciążeń produkcyjnych.

Obsługa platformy

Typowe przypadki użycia

W poniższej tabeli opisano możliwe scenariusze użycia.

Scenario Użyj
Eksploracja plików ad hoc OPENROWSET(BULK ...)
Wielokrotne odpytywanie plików na potrzeby BI i raportowania Tabele zewnętrzne nad plikami
Wykonywanie zapytań między bazami danych (SQL Server, Oracle, Teradata, MongoDB, ODBC) Łączniki polyBase z tabelami zewnętrznymi
Eksportowanie wyników zapytania do plików CREATE EXTERNAL TABLE AS SELECT (CETAS)
Zbiorczy import do tabel BULK INSERT lub OPENROWSET(BULK ...) z INSERT ... SELECT
  • Do doraźnego przeglądania plików użyj OPENROWSET(BULK ...), aby sprawdzać pliki bez tworzenia tabeli wielokrotnego użytku.
  • Do ponownego użytku zapytań plików w BI lub scenariuszy raportowania używaj tabel zewnętrznych zamiast plików, aby utrzymywać schemat i dzielić się wynikami między zapytaniami.
  • Do zapytań międzybazowych używaj konektorów PolyBase z zewnętrznymi tabelami, aby uzyskać dostęp do źródeł SQL Server, Oracle, Teradata, MongoDB lub ODBC.
  • Do eksportowania wyników zapytań do plików użyj CREATE EXTERNAL TABLE AS SELECT (CETAS), aby zapisywać dane wyjściowe w formacie Parquet lub CSV poza bazą.
  • Do zbiorczego importu do tabel użyj BULK INSERT lub OPENROWSET(BULK ...) z INSERT ... SELECT, aby załadować dane z plików do tabel bazy danych.

W jakich miejscach są dostępne funkcje?

Poniższa tabela pokazuje, które kluczowe funkcje PolyBase i wirtualizacji danych są dostępne na każdej platformie SQL, począwszy od SQL Server 2019. Aby dowiedzieć się o dostępności funkcji w SQL Server 2016 i SQL Server 2017 na Windows, zobacz funkcje i ograniczenia PolyBase. Użyj tej tabeli, aby określić, co można zrobić na platformie przed użyciem szczegółowych przewodników.

Funkcja SQL Server 2019 SQL Server 2022 SQL Server 2025 Azure SQL Database Azure SQL Managed Instance Baza danych SQL w usłudze Microsoft Fabric
Tabele zewnętrzne Yes Yes Yes Yes Yes Yes
OPENROWSET (ZBIORCZO) Tak 1 Yes Yes Yes Yes Yes
CETAS (eksport) Nie. Yes Yes Nie. Yes Nie.
Pliki CSV/pliki rozdzielane separatorem Tak 2 Yes Yes Yes Yes Yes
Pliki Parquet Nie. Yes Yes Yes Yes Yes
Tabele Delta Lake Nie. Yes Yes Nie. Nie. Nie.
Nawiązywanie połączenia z innym programem SQL Server Yes Yes Yes Nie. Nie. Nie.
Nawiązywanie połączenia z usługą Azure SQL Database lub usługą Azure SQL Managed Instance Tak 3 Tak 3 Tak 3 Nie. Nie. Nie.
Nawiązywanie połączenia z bazą danych Oracle/Teradata/MongoDB Yes Yes Yes Nie. Nie. Nie.
Nawiązywanie połączenia z usługą Azure Blob Storage Yes Yes Yes Yes Yes Nie.
Nawiązywanie połączenia z usługą ADLS Gen2 Tak 5 Yes Yes Yes Yes Nie.
Połącz się z magazynem zgodnym z usługą S3 Nie. Yes Yes Nie. Nie. Nie.
Nawiązywanie połączenia z usługą OneLake (Fabric) Nie. Nie. Nie. Nie. Nie. Yes
Obliczenia wypychane Yes Yes Yes Nie. Nie. Nie.
Uwierzytelnianie za pomocą tożsamości zarządzanej Nie. Nie. Tak 4 Yes Yes Nie.

Program SQL Server 2019 (15.x) obsługuje OPENROWSET(BULK...) ścieżki plików lokalnych i sieciowych. W programie SQL Server 2022 (16.x) i nowszych wersjach OPENROWSET(BULK...) obsługuje również odczyt z magazynu w chmurze za pomocą systemów FORMAT = 'PARQUET', FORMAT = DELTAi FORMAT = 'CSV'.

Obsługa CSV w programie SQL Server 2019 (15.x) wymagała usługi Hadoop. W programie SQL Server 2022 (16.x) i nowszych wersjach wolumin CSV jest natywnie obsługiwany bez usługi Hadoop.

3 Używa łącznika programu SQL Server (sqlserver://). Poświadczenie w zakresie bazy danych jest przeznaczone dla punktu końcowego SQL. Stosuj te same kroki, co przy łączeniu z inną instancją SQL Server.

4 Uwierzytelnianie tożsamości zarządzanej jest obsługiwane w przypadku nawiązywania połączenia z usługami Azure Blob Storage (ABS) i ADLS Gen2. Wymaga ona programu SQL Server z obsługą usługi Azure Arc lub programu SQL Server na maszynie wirtualnej platformy Azure dla lokalnego programu SQL Server. Jest ona natywnie dostępna w usługach Azure SQL Database i Azure SQL Managed Instance.

5 SQL Server 2019 CU11 i późniejsze wersje obsługują Azure Data Lake Storage Gen2 z prefiksem abfs orabfss. W wersjach SQL Server 2022 i nowszych używaj prefiksuadls.

  • Zewnętrzne tabele są obsługiwane w SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance oraz bazie danych SQL w Microsoft Fabric.
  • OPENROWSET (BULK)jest obsługiwany w SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance oraz bazie danych SQL w Microsoft Fabric. SQL Server 2019 obsługuje lokalne i sieciowe ścieżki plików, a wersje SQL Server 2022 i nowsze obsługują również odczyt z magazynu w chmurze przy użyciu FORMAT = 'PARQUET', FORMAT = DELTA i FORMAT = 'CSV'.
  • Eksport CETAS nie jest obsługiwany w SQL Server 2019, Azure SQL Database ani w bazie danych SQL w Microsoft Fabric. Eksport CETAS jest obsługiwany w SQL Server 2022, SQL Server 2025 oraz Azure SQL Managed Instance.
  • CSV i pliki ograniczone są obsługiwane w SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance oraz bazie danych SQL w Microsoft Fabric. SQL Server 2019 wymaga Hadoop do obsługi CSV, podczas gdy SQL Server 2022 i późniejsze wersje natywnie obsługują CSV bez Hadoop.
  • Pliki Parquet nie są obsługiwane w SQL Server 2019. Pliki Parquet są obsługiwane w SQL Server 2022, SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance oraz bazie danych SQL w Microsoft Fabric.
  • Tabele Delta Lake nie są obsługiwane w SQL Server 2019, Azure SQL Database, Azure SQL Managed Instance ani bazie danych SQL w Microsoft Fabric. Tabele Delta Lake są obsługiwane w SQL Server 2022 oraz SQL Server 2025.
  • Łączenie się z inną instancją SQL Server jest obsługiwane w SQL Server 2019, SQL Server 2022 oraz SQL Server 2025. Łączenie się z inną instancją SQL Server nie jest obsługiwane przez Azure SQL Database, Azure SQL Managed Instance ani bazę danych SQL w Microsoft Fabric.
  • Łączenie z Azure SQL Database lub Azure SQL Managed Instance jest obsługiwane przez SQL Server 2019, SQL Server 2022 oraz SQL Server 2025 za pomocą konektora SQL Server. Poświadczenie o zakresie bazy danych wskazuje punkt końcowy usługi Azure SQL Database lub Azure SQL Managed Instance, a kroki konfiguracji są takie same jak w przypadku łączenia z inną instancją programu SQL Server. Te połączenia nie są obsługiwane w Azure SQL Database, Azure SQL Managed Instance ani w bazie danych SQL w Microsoft Fabric.
  • Łączenie z Oracle, Teradata lub MongoDB jest obsługiwane w SQL Server 2019, SQL Server 2022 oraz SQL Server 2025. Te połączenia nie są obsługiwane w Azure SQL Database, Azure SQL Managed Instance ani w bazie danych SQL w Microsoft Fabric.
  • Łączenie z Azure Blob Storage jest obsługiwane przez SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database oraz Azure SQL Managed Instance. Nawiązywanie połączenia z usługą Azure Blob Storage z poziomu bazy danych SQL w usłudze Microsoft Fabric nie jest obsługiwane.
  • Łączenie się z ADLS Gen2 nie jest wspierane w wersjach SQL Server 2019 sprzed CU11 ani z bazy danych SQL w Microsoft Fabric. Łączenie z ADLS Gen2 jest obsługiwane od SQL Server 2019 CU11, a także w SQL Server 2022, SQL Server 2025, Azure SQL Database oraz Azure SQL Managed Instance.
  • Łączenie się z pamięcią kompatybilną z S3 nie jest obsługiwane przez SQL Server 2019, Azure SQL Database, Azure SQL Managed Instance ani bazy danych SQL w Microsoft Fabric. Łączenie z pamięcią kompatybilną z S3 jest obsługiwane w SQL Server 2022 i SQL Server 2025.
  • Łączenie z OneLake jest obsługiwane z bazy danych SQL w Microsoft Fabric. Łączenie z OneLake nie jest obsługiwane w SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database ani Azure SQL Managed Instance.
  • Obliczenia pushdown są obsługiwane w SQL Server 2019, SQL Server 2022 oraz SQL Server 2025. Obliczenia typu pushdown nie są obsługiwane w Azure SQL Database, Azure SQL Managed Instance ani w bazie danych SQL w Microsoft Fabric.
  • Uwierzytelnianie tożsamości zarządzanej nie jest obsługiwane w SQL Server 2019 ani SQL Server 2022. Uwierzytelnianie za pomocą tożsamości zarządzanej jest obsługiwane w SQL Server 2025 w przypadku połączeń z usługami Azure Blob Storage i ADLS Gen2 i wymaga SQL Server z obsługą Azure Arc lub SQL Server na maszynie wirtualnej platformy Azure. Uwierzytelnianie Managed Identity jest również obsługiwane w Azure SQL Database oraz Azure SQL Managed Instance, ale nie jest obsługiwane w bazie danych SQL w Microsoft Fabric.

Uwaga / Notatka

Począwszy od programu SQL Server 2025 (17.x), wykonywanie zapytań dotyczących plików danych (CSV, Parquet i Delta) w Azure Blob Storage, ADLS Gen2 lub składowaniu zgodnym z S3 jest natywną funkcją aparatu i nie wymaga już instalowania ani uruchamiania usług PolyBase. Łączniki RDBMS (SQL Server, Oracle, Teradata, MongoDB, ODBC) nadal wymagają zainstalowania i uruchomienia usług PolyBase. Program SQL Server 2025 (17.x) dodaje również obsługę systemu Linux dla tych łączników, które były wcześniej dostępne tylko w systemie Windows.

Wykonywanie zapytań o dane zewnętrzne

Przed wybraniem konkretnego scenariusza zapoznaj się z trzema sposobami wykonywania zapytań dotyczących danych zewnętrznych:

Metoda Składnia Użyj, gdy Uwierzytelnianie Wymagana instalacja PolyBase
OLE DB zapytania ad hoc OPENROWSET(provider, connection, query) Potrzebujesz szybkiego jednorazowego zapytania bez obiektów trwałych lub potrzebujesz uwierzytelniania identyfikatora Entra firmy Microsoft Uwierzytelnianie SQL, uwierzytelnianie systemu Windows, Microsoft Entra ID (MSOLEDBSQL) Nie.
Zapytania ad hoc do plików OPENROWSET(BULK ...) Chcesz szybko eksplorować dane plików lub testować schematy przed utworzeniem tabeli Token SAS, klucz dostępu, tożsamość zarządzana, Microsoft Entra ID SQL Server 2022: Tak 1

SQL Server 2025 i nowsze wersje: Nie

Azure SQL Database, Azure SQL Managed Instance oraz baza danych SQL w usłudze Fabric: Wbudowane
Trwałe łączniki danych CREATE EXTERNAL TABLE z sqlserver://, oracle://, teradata://, itp. Potrzebujesz powtarzającego się dostępu, zarządzania, statystyk i obliczeń przesuwanych na niższy poziom dla środowiska produkcyjnego Tylko uwierzytelnianie SQL Yes

1 Aby uzyskać dostęp do plików w chmurze w SQL Server 2022 (16.x), musisz zainstalować funkcję PolyBase, ale złącza pamięci masowej kompatybilne z Azure Blob Storage, ADLS Gen2 i S3 nie zależą od usług PolyBase. SQL Server 2025 (17.x) i nowsze wersje mają natywne wsparcie dla CSV, Parquet i Delta bez konieczności instalowania lub uruchamiania usług PolyBase.

  • Zapytania ad hoc w OLE DB służą OPENROWSET(provider, connection, query) do szybkiego jednorazowego dostępu do zdalnego źródła danych bez tworzenia trwałych obiektów. Mogą korzystać z uwierzytelniania SQL, uwierzytelniania systemu Windows lub Microsoft Entra ID z MSOLEDBSQL. Ten scenariusz nie wymaga instalacji PolyBase.
  • Zapytania ad hoc dotyczące plików służą OPENROWSET(BULK ...) do szybkiego eksplorowania danych plików lub testowania schematu przed utworzeniem tabeli. Mogą używać tokenów SAS, kluczy dostępu, Managed Identity lub Microsoft Entra ID. SQL Server 2022 wymaga instalacji funkcji PolyBase dla plików w chmurze, ale nie wymaga usług PolyBase. SQL Server 2025 i nowsze wersje nie wymagają PolyBase do plików w chmurze. Doraźne zapytania dotyczące plików są wbudowaną funkcją usługi Azure SQL Database, Azure SQL Managed Instance oraz bazy danych SQL w usłudze Fabric.
  • Trwałe złącza danych wykorzystują CREATE EXTERNAL TABLEoracle://sqlserver://, , teradata://, i podobne lokalizacje do powtarzającego się dostępu, zarządzania, statystyki oraz obliczeń pushdown w obciążeniach produkcyjnych. Wymagają uwierzytelniania SQL i usług PolyBase.

Przewodnik po decyzjach

Scenario Zalecenie
Potrzebujesz uwierzytelniania Microsoft Entra ID do zdalnego SQL lub chcesz unikać usług PolyBase. Użycie OPENROWSET(MSOLEDBSQL, ...) (ad hoc, brak trwałych obiektów).
Potrzebujesz trwałych tabel, statystyk lub przeniesienia obliczeń do zdalnych baz danych. Używaj CREATE EXTERNAL TABLE z łącznikami programu PolyBase (sqlserver://, oracle://, teradata://, mongodb://, odbc://). OPENROWSET Nie obsługuje złączy.
Eksplorujesz nowy plik lub testujesz schemat. Zastosowanie OPENROWSET(BULK ...) (szybka iteracja, brak trwałych obiektów).
Importujesz dane z pliku do tabeli z zastosowaniem transformacji. Użyj INSERT ... SELECT z OPENROWSET(BULK ...).
Potrzebujesz zarządzania lub współudostępniania dla wielu użytkowników lub aplikacji. Użyj, CREATE EXTERNAL TABLE aby uprawnienia i metadane były scentralizowane.
Pracujesz w bazie danych SQL w Fabric. Użyj OPENROWSET(BULK ...) do doraźnych zapytań OneLake lub tabel zewnętrznych, aby zapewnić dostęp wielokrotnego użytku; w przypadku magazynu zewnętrznego użyj skrótów OneLake.
  • Jeśli potrzebujesz uwierzytelniania Microsoft Entra ID na potrzeby zdalnego SQL lub chcesz uniknąć usług PolyBase, użyj OPENROWSET(MSOLEDBSQL, ...) do wykonywania doraźnych zapytań zdalnych bez trwałych obiektów.
  • Jeśli potrzebujesz trwałych tabel, statystyk lub obliczeń pushdown do zdalnych baz danych, użyj CREATE EXTERNAL TABLE z konektorami PolyBase, takimi jak sqlserver://, oracle://, teradata://, mongodb://, i odbc://. OPENROWSET nie obsługuje tych złączy.
  • Jeśli eksplorujesz nowy plik lub testujesz schemat, użyj go OPENROWSET(BULK ...) do szybkiej iteracji i bez trwałych obiektów.
  • Jeśli pozyskujesz dane z pliku do tabeli z zastosowaniem transformacji, użyj INSERT ... SELECT z OPENROWSET(BULK ...).
  • Jeśli potrzebujesz zarządzania lub współdzielonego dostępu dla wielu użytkowników lub aplikacji, użyj CREATE EXTERNAL TABLE tak, aby uprawnienia i metadane były scentralizowane.
  • Jeśli pracujesz w bazie danych SQL na platformie Fabric, używaj OPENROWSET(BULK ...) w przypadku doraźnych zapytań do OneLake lub tabel zewnętrznych do wielokrotnego użytku, a do magazynu zewnętrznego używaj skrótów OneLake.

Wybieranie scenariusza

Teraz, gdy znasz trzy podejścia, użyj jednego z poniższych przewodników, aby zaimplementować konkretny przypadek użycia.

Pliki zapytań (Parquet, CSV lub Delta)

Jeśli dane są w plikach Parquet, CSV lub Delta w usłudze Azure Blob Storage, usłudze ADLS Gen2, magazynie zgodnym z usługą S3 lub oneLake, postępuj zgodnie z jednym z następujących przewodników:

Scenario Zalecany przewodnik Platformy
Szybkie zapytanie ad hoc dotyczące pliku Parquet lub CSV Użyj OPENROWSET. Brak wymaganej tabeli zewnętrznej SQL Server 2022 (16.x) i nowsze wersje, Azure SQL Database, Azure SQL Managed Instance, SQL Database in Fabric
Powtarzające się zapytania dotyczące plików Parquet ze schematem trwałym Tworzenie tabeli zewnętrznej w formacie Parquet SQL Server 2022 (16.x) i nowsze wersje, Azure SQL Database, Azure SQL Managed Instance, SQL Database in Fabric
Wykonywanie zapytań dotyczących plików CSV przy użyciu tabeli zewnętrznej Tworzenie tabeli zewnętrznej z formatem pliku dla tekstu rozdzielanego SQL Server 2019 (15.x) i nowsze wersje, Azure SQL Database, Azure SQL Managed Instance, SQL Database in Fabric
Wykonywanie zapytań względem tabel Delta Lake Tworzenie tabeli zewnętrznej za pomocą polecenia FILE_FORMAT = DeltaLakeFileFormat SQL Server 2022 (16.x) i nowsze wersje
Eksportowanie wyników zapytania do plików Parquet lub CSV (CETAS) Użyj CREATE EXTERNAL TABLE AS SELECT SQL Server 2022 (16.x) i nowsze wersje, Azure SQL Managed Instance
  • Aby szybko wykonać zapytanie ad hoc dotyczące pliku Parquet lub CSV, użyj OPENROWSET. Ta metoda nie wymaga zewnętrznej tabeli. SQL Server 2022 (16.x) oraz nowsze wersje, Azure SQL Database, Azure SQL Managed Instance oraz SQL database in Fabric wspierają ten schemat.
  • W przypadku powtarzających się zapytań dotyczących plików Parquet o stałym schemacie używaj tabeli zewnętrznej opartej na Parquet. SQL Server 2022 (16.x) oraz nowsze wersje, Azure SQL Database, Azure SQL Managed Instance oraz SQL database in Fabric wspierają ten schemat.
  • Do wykonywania zapytań na plikach CSV użyj tabeli zewnętrznej z formatem pliku dla tekstu rozdzielanego separatorami. SQL Server 2019 (15.x) oraz nowsze wersje, Azure SQL Database, Azure SQL Managed Instance oraz SQL database in Fabric wspierają ten wzorzec.
  • Aby wykonać zapytanie dotyczące tabel Delta Lake, użyj tabeli zewnętrznej z FILE_FORMAT = DeltaLakeFileFormat. SQL Server 2022 (16.x) i nowsze wersje wspierają ten wzorzec.
  • Do eksportu wyników zapytań do plików Parquet lub CSV użyj CREATE EXTERNAL TABLE AS SELECT. SQL Server 2022 (16.x) i nowsze wersje oraz Azure SQL Managed Instance wspierają ten wzorzec.

Możesz również wykonać jeden z tych samouczków krok po kroku.

Tutorial Opis
Wprowadzenie do technologii PolyBase w programie SQL Server 2022 Obejmuje nawigację OPENROWSET między plikami Parquet i CSV, tabelami zewnętrznymi i folderami.
Wirtualizuj plik Parquet w magazynie zgodnym z S3 za pomocą technologii PolyBase Samouczek dotyczący programu SQL Server 2022 (16.x) i nowszych wersji.
Wirtualizacja pliku CSV za pomocą technologii PolyBase Samouczek dotyczący programu SQL Server 2022 (16.x) i nowszych wersji.
Wirtualizacja tabeli różnicowej za pomocą technologii PolyBase Samouczek dotyczący programu SQL Server 2022 (16.x) i nowszych wersji.
Wirtualizacja danych za pomocą usługi Azure SQL Database (wersja zapoznawcza) Przewodnik usługi Azure SQL Database dotyczący plików Parquet i CSV.
Wirtualizacja danych za pomocą usługi Azure SQL Managed Instance Przewodnik po usłudze Azure SQL Managed Instance dla usług Parquet, CSV i CETAS.
Wirtualizacja danych w bazie danych SQL w Fabric Przewodnik dotyczący bazy danych SQL w usłudze Fabric dla plików OneLake.

Połącz się z innym wystąpieniem SQL Server, bazą danych Azure SQL lub zarządzanym wystąpieniem SQL

W programie SQL Server 2019 (15.x) i nowszych wersjach program PolyBase może wykonywać zapytania o tabele w innym wystąpieniu programu SQL Server, usłudze Azure SQL Database lub usłudze Azure SQL Managed Instance bez używania serwerów połączonych.

Ważna

Łącznik sqlserver:// nie jest obsługiwany w bazie danych SQL w Fabric. Łączniki PolyBase RDBMS używają uwierzytelniania SQL za pośrednictwem CREATE DATABASE SCOPED CREDENTIAL i nie obsługują uwierzytelniania Microsoft Entra ID, tożsamości zarządzanej ani głównego obiektu zabezpieczeń. Ponieważ baza danych SQL w platformie Fabric wymaga uwierzytelniania Microsoft Entra, nie można nawiązać z nią połączenia przy użyciu PolyBase.

Krok Co zrobić
1. Zainstaluj program PolyBase Instalowanie programu PolyBase w systemie Windows lub instalowanie programu PolyBase w systemie Linux
2. Tworzenie poświadczeń CREATE DATABASE SCOPED CREDENTIAL z nazwą logowania docelowego
3. Tworzenie zewnętrznego źródła danych CREATE EXTERNAL DATA SOURCE ... WITH (LOCATION = 'sqlserver://<server>')
4. Tworzenie tabeli zewnętrznej CREATE EXTERNAL TABLE ... WITH (LOCATION = '<db>.<schema>.<table>')
5. Zapytanie (Kwerenda) SELECT * FROM <external_table>
    1. Zainstaluj PolyBase na Windows lub Linux, używając opcji Install PolyBase na Windows lub Install PolyBase na Linuksie, zanim skonfigurujesz dostęp do zewnętrznych danych SQL.
    1. Utwórz poświadczenie na poziomie bazy danych dla docelowego loginu, używając CREATE DATABASE SCOPED CREDENTIAL, aby aparat bazy danych mógł uwierzytelnić się na serwerze zdalnym.
    1. Utworzenie zewnętrznego źródła danych dla zdalnego SQL Server, używając CREATE EXTERNAL DATA SOURCE ... WITH (LOCATION = 'sqlserver://<server>').
    1. Utwórz tabelę zewnętrzną, używając elementu CREATE EXTERNAL TABLE ... WITH (LOCATION = '<db>.<schema>.<table>') do reprezentowania tabeli zdalnej.
    1. Zapytaj zewnętrzną tabelę, używając SELECT * FROM <external_table>.

Wskazówka

Łącznik programu SQL Server (sqlserver://) działa również dla usług Azure SQL Database i Azure SQL Managed Instance. Użyj tych samych kroków i ustaw LOCATION na punkt końcowy usługi Azure SQL Database lub Azure SQL Managed Instance (na przykład sqlserver://myserver.database.windows.net).

Aby uzyskać szczegółowy przewodnik, zobacz Configure PolyBase to access external data in SQL Server (Konfigurowanie programu PolyBase w celu uzyskania dostępu do danych zewnętrznych w programie SQL Server).

Nawiązywanie połączenia z bazą danych Oracle, Teradata lub MongoDB

Program SQL Server 2019 (15.x) i nowsze wersje mogą wykonywać zapytania do Oracle, Teradata, MongoDB i Cosmos DB za pomocą łączników ODBC PolyBase.

Źródło danych Przewodnik Wymagania
Oracle Konfigurowanie programu PolyBase w celu uzyskiwania dostępu do danych zewnętrznych w programie Oracle SQL Server 2019 (15.x) i nowsze wersje, sterowniki klienta Oracle
Teradata Konfigurowanie programu PolyBase w celu uzyskiwania dostępu do danych zewnętrznych w usłudze Teradata SQL Server 2019 (15.x) i nowsze wersje, sterownik Teradata ODBC
MongoDB / Cosmos DB Konfigurowanie programu PolyBase w celu uzyskiwania dostępu do danych zewnętrznych w bazie danych MongoDB SQL Server 2019 (15.x) i nowsze wersje, sterownik OdBC bazy danych MongoDB
Dowolne źródło ODBC Konfigurowanie programu PolyBase w celu uzyskiwania dostępu do danych zewnętrznych przy użyciu typów ogólnych ODBC SQL Server 2019 (15.x) i nowsze wersje (Windows)

(System Linux rozpoczynający się od programu SQL Server 2025 (17.x))

Nawiązywanie połączenia z usługą Azure Blob Storage lub ADLS Gen2

Platforma SQL Opcje uwierzytelniania Przewodnik
SQL Server 2022 (16.x) i nowsze wersje Token SAS, klucz dostępu, tożsamość zarządzana (począwszy od programu SQL Server 2025 (17.x)) Konfigurowanie programu PolyBase w celu uzyskiwania dostępu do danych zewnętrznych w usłudze Azure Blob Storage
SQL Server 2019 (15.x) Klucz dostępu (za pośrednictwem łącznika usługi Hadoop) Konfigurowanie programu PolyBase w celu uzyskiwania dostępu do danych zewnętrznych w usłudze Azure Blob Storage
Azure SQL Database Token SAS, zarządzana tożsamość, przekazywanie bezpośrednie w Microsoft Entra Wirtualizacja danych za pomocą usługi Azure SQL Database (wersja zapoznawcza)
Azure SQL Managed Instance Token SAS, zarządzana tożsamość Wirtualizacja danych za pomocą usługi Azure SQL Managed Instance

W programie SQL Server 2022 (16.x) zmieniono prefiksy identyfikatora URI. Podczas migracji z programu SQL Server 2019 (15.x) lub starszych wersji:

  • Azure Blob Storage: zmień wasb[s]:// na abs://
  • ADLS Gen2: zmiana abfs[s]:// na adls://

Aby uzyskać więcej informacji, zobacz Configure PolyBase to access external data in Azure Blob Storage (Konfigurowanie technologii PolyBase w celu uzyskania dostępu do danych zewnętrznych w usłudze Azure Blob Storage).

Nawiązywanie połączenia z magazynem obiektów zgodnym ze standardem S3

Program SQL Server 2022 (16.x) i nowsze wersje obsługują magazyn zgodny z protokołem S3, takie jak Amazon S3, MinIO i Ceph.

Aby uzyskać więcej informacji, zobacz Configure PolyBase to access external data in S3-compatible object storage (Konfigurowanie programu PolyBase w celu uzyskania dostępu do danych zewnętrznych w magazynie obiektów zgodnym z programem S3).

Eksportowanie danych za pomocą CREATE EXTERNAL TABLE AS SELECT (CETAS)

Funkcja CETAS eksportuje wyniki zapytania do plików zewnętrznych (Parquet lub CSV) w usłudze Azure Blob Storage, usłudze ADLS Gen2 lub magazynie zgodnym z usługą S3.

Platforma SQL Wsparte Formaty eksportu Notatki
SQL Server 2022 (16.x) i nowsze wersje. Eksport do ADLS Gen2 z CETAS wymaga wersji SQL Server 2022 CU5 lub nowszej. Yes Parquet, CSV Wymaga konfiguracji serwera: pozwól na eksport polibazy.
Azure SQL Managed Instance Yes Parquet, CSV Domyślnie wyłączone
Azure SQL Database Nie. Żadne Niedostępne
Baza danych SQL na platformie Fabric Nie. Żadne Niedostępne
  • SQL Server 2022 i późniejsze wersje obsługują CETAS oraz eksport plików Parquet i CSV. Konfiguracja serwera: wymagana jest opcja eksportu polibazy. Eksport CETAS do ADLS Gen2 nie jest dostępny w wersjach SQL Server 2022 przed CU5.
  • Azure SQL Managed Instance obsługuje CETAS i eksportuje pliki Parquet oraz CSV. Wskazówka Wyłączone domyślnie opisuje jego stan domyślny.
  • Azure SQL Database nie obsługuje CETAS.
  • Baza danych SQL w Fabric nie obsługuje CETAS.

Aby uzyskać informacje na temat Transact-SQL, zobacz CREATE EXTERNAL TABLE AS SELECT (CETAS).

Przykłady szybkiego startu

Przykład 1: Zapytanie ad hoc w pliku Parquet (OPENROWSET)

Nie jest wymagana tabela zewnętrzna. Działa w programie SQL Server 2022 (16.x) i nowszych wersjach, usługach Azure SQL Database, Azure SQL Managed Instance i SQL Database w usłudze Fabric.

SELECT TOP 10 *
FROM OPENROWSET (
    BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet',
    FORMAT = 'PARQUET'
) AS [result];

Przykład 2: Tabela zewnętrzna oparta na CSV w Azure Blob Storage

Ten przykład działa na wszystkich platformach SQL obsługujących zewnętrzne tabele zamiast plików CSV.

  • Krok 1. Tworzenie klucza głównego bazy danych (DMK). Ten krok jest wymagany, ponieważ magazyn poświadczeń przechowuje sekret tokenu SAS. Możesz jednak pominąć ten krok, jeśli korzystasz z uwierzytelniania Managed Identity lub Microsoft Entra.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
    
  • Krok 2. Tworzenie poświadczeń przy użyciu tokenu SAS. Pomiń początkowe ?.

    CREATE DATABASE SCOPED CREDENTIAL MyStorageCred
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
         SECRET = '<your_SAS_token>'; -- omit the leading '?'
    
  • Krok 3. Tworzenie zewnętrznego źródła danych.

    CREATE EXTERNAL DATA SOURCE MyAzureStorage
    WITH (
        LOCATION = 'abs://mycontainer@mystorageaccount.blob.core.windows.net',
        CREDENTIAL = MyStorageCred
    );
    
  • Krok 4. Tworzenie formatu pliku dla pliku CSV.

    CREATE EXTERNAL FILE FORMAT CsvFormat
    WITH (
        FORMAT_TYPE = DELIMITEDTEXT,
        FORMAT_OPTIONS (
            FIELD_TERMINATOR = ',',
            STRING_DELIMITER = '"',
            FIRST_ROW = 2
        )
    );
    
  • Krok 5. Tworzenie tabeli zewnętrznej.

    CREATE EXTERNAL TABLE dbo.SalesExternal
    (
        OrderId INT,
        OrderDate DATE,
        Amount DECIMAL (18, 2),
        Customer NVARCHAR (100)
    )
    WITH (
        DATA_SOURCE = MyAzureStorage,
        LOCATION = '/data/sales/',
        FILE_FORMAT = CsvFormat
    );
    
  • Krok 6. Wykonywanie zapytań względem tabeli zewnętrznej.

    SELECT *
    FROM dbo.SalesExternal
    WHERE OrderDate >= '2025-01-01';
    

Przykład 3. Wykonywanie zapytań względem tabeli w innym programie SQL Server

Ten przykład działa w programie SQL Server 2019 (15.x) i nowszych wersjach.

  • Krok 1. Utworzenie klucza głównego bazy danych (wymagane, ponieważ poświadczenia przechowują hasło).

    CREATE MASTER KEY ENCRYPTION
    BY PASSWORD = '<password>';
    
  • Krok 2: Utwórz poświadczenie dla zdalnego wystąpienia programu SQL Server.

    CREATE DATABASE SCOPED CREDENTIAL RemoteSqlCred
    WITH IDENTITY = 'remote_user',
         SECRET = '<password>';
    
  • Krok 3. Tworzenie zewnętrznego źródła danych.

    CREATE EXTERNAL DATA SOURCE RemoteSqlServer
    WITH (
        LOCATION = 'sqlserver://remote-server.contoso.com',
        PUSHDOWN = ON,
        CREDENTIAL = RemoteSqlCred
    );
    
  • Krok 4. Utworzenie tabeli zewnętrznej (trzyczęściowa nazwa w pliku LOCATION).

    CREATE EXTERNAL TABLE dbo.RemoteCustomers
    (
        CustomerId INT,
        CustomerName NVARCHAR (200)
            COLLATE SQL_Latin1_General_CP1_CI_AS
    )
    WITH (
        DATA_SOURCE = RemoteSqlServer,
        LOCATION = 'SalesDB.dbo.Customers'
    );
    
  • Krok 5. Wykonywanie zapytań względem serwerów.

    SELECT c.CustomerName,
           s.Amount
    FROM dbo.RemoteCustomers AS c
         INNER JOIN dbo.LocalSales AS s
             ON c.CustomerId = s.CustomerId;
    

Przykład 4. Eksportowanie wyników do Parquet poprzez CETAS

Działa w programie SQL Server 2022 (16.x) i nowszych wersjach usługi Azure SQL Managed Instance.

  • Krok 1: Włącz CETAS (tylko w SQL Server).

    EXECUTE sp_configure 'allow polybase export', 1;
    RECONFIGURE;
    
  • Krok 2. Tworzenie poświadczeń i źródła danych (ponowne użycie z wcześniejszych przykładów).

  • Krok 3. Tworzenie formatu pliku dla eksportu Parquet.

    CREATE EXTERNAL FILE FORMAT ParquetFormat
    WITH (
        FORMAT_TYPE = PARQUET
    );
    
  • Krok 4. Eksportowanie wyników zapytania.

    CREATE EXTERNAL TABLE dbo.Sales2025Export
    WITH (
        DATA_SOURCE = MyAzureStorage,
        LOCATION = '/exports/sales_2025.parquet',
        FILE_FORMAT = ParquetFormat
    ) AS
    SELECT *
    FROM Sales.Orders
    WHERE OrderDate >= '2025-01-01';
    

Bloki konstrukcyjne języka T-SQL dla technologii PolyBase

Przed zaimplementowaniem dowolnego scenariusza zapoznaj się z podstawowymi obiektami języka T-SQL używanymi przez program PolyBase i sposobem ich dopasowania do siebie:

Diagram przedstawiający obiekty Transact-SQL polyBase i ich relacje.

Diagram przedstawiający obiekty T-SQL technologii PolyBase i ich relacje — od uwierzytelniania (klucz główny bazy danych, poświadczenia), przez źródła danych i formaty plików, po metody wykonywania zapytań (External Table, OPENROWSET, BULK INSERT, CETAS).

Aby uzyskać pełną dokumentację Transact-SQL dla wszystkich obiektów, zobacz Dokumentacja Transact-SQL technologii PolyBase.

Ważna

Sprawdź mapowanie typów danych dla formatu pliku zewnętrznego. Podczas tworzenia formatu pliku zewnętrznego lub wykonywania zapytań dotyczących plików przy użyciu programu OPENROWSETPolyBase automatycznie mapuje typy danych źródłowych (Parquet, CSV, Delta, Oracle, Teradata, MongoDB) na typy danych programu SQL Server. Niezgodne typy mogą powodować ciche obcinanie, utratę precyzji lub błędy zapytań. Na przykład Parquet DECIMAL(38,18) mapuje na DECIMAL(18,0). Przed zdefiniowaniem kolumn tabeli zewnętrznej lub klauzuli WITH przejrzyj tabele mapowania. Aby uzyskać pełną dokumentację, zobacz Mapowanie typów za pomocą technologii PolyBase.

Kiedy potrzebujesz CREATE MASTER KEY?

Klucz główny bazy danych (DMK) jest tworzony przy użyciu CREATE MASTER KEY składni. DMK szyfruje sekrety przechowywane w ramach poświadczeń bazodanowych. Jest to wymagane tylko wtedy, gdy poświadczenie zawiera wartość wpisu tajnego, czyli w przypadku przechowywania hasła, tokenu lub klucza dostępu.

  • Klucz DMK jest wymagany (poświadczenia przechowują tajne informacje):

    Typ uwierzytelniania IDENTITY wartość Posiada tajemnicę DMK
    token SAS 'SHARED ACCESS SIGNATURE' Yes Wymagane
    Klucz dostępu S3 'S3 ACCESS KEY' Yes Wymagane
    Logowanie SQL / uwierzytelnianie podstawowe '<username>' Yes Wymagane
    Klucz dostępu do konta przechowywania '<storage_account_name>' Yes Wymagane
    • Dane uwierzytelniające tokena SAS używają IDENTITY = 'SHARED ACCESS SIGNATURE' i przechowują wartość sekretu, więc wymagają klucza głównego bazy danych.
    • Dane dostępu S3 używają IDENTITY = 'S3 ACCESS KEY' i przechowują wartość tajną, więc wymagają klucza głównego bazy danych.
      • Logowanie SQL lub podstawowe uwierzytelnianie wykorzystuje IDENTITY = '<username>' i przechowuje wartość tajną, więc wymaga klucza głównego bazy danych.
    • Dane dostępu do konta pamięci masowej używają IDENTITY = '<storage_account_name>' i przechowują wartość tajemniczą, więc wymagają klucza głównego bazy danych.
  • DMK nie jest wymagany (żaden sekret nie jest przechowywany):

    Typ uwierzytelniania IDENTITY wartość Posiada tajemnicę DMK
    Zarządzana Tożsamość 'Managed Identity' Nie. Niewymagane
    Microsoft Entra ID 'User Identity' lub 'Managed Identity' Nie. Niewymagane
    • Poświadczenie tożsamości zarządzanej używa elementu IDENTITY = 'Managed Identity' i nie przechowuje żadnych wpisów tajnych, więc nie wymaga klucza głównego bazy danych.
    • Poświadczenie Microsoft Entra ID używa IDENTITY = 'User Identity' lub IDENTITY = 'Managed Identity' i nie przechowuje wpisu tajnego, więc nie wymaga klucza głównego bazy danych.

Wskazówka

Jeśli twoje CREATE DATABASE SCOPED CREDENTIAL oświadczenie nie zawiera sekretu, nie potrzebujesz DMK. Zarządzana tożsamość i uwierzytelnianie Microsoft Entra ID przekazuje zaufanie do platformy. Baza danych nie przechowuje haseł ani tokenów.

Przykłady:

W tym przykładowym zapytaniu wymagany jest DMK (poświadczenie zawiera token SAS).

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

CREATE DATABASE SCOPED CREDENTIAL SasCred
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
     SECRET = '<your_SAS_token>';

W tym przykładowym zapytaniu klucz DMK nie jest wymagany (tożsamość zarządzana, bez hasła).

CREATE DATABASE SCOPED CREDENTIAL ManagedIdentityCred
WITH IDENTITY = 'Managed Identity';

W tym przykładowym zapytaniu klucz DMK nie jest wymagany (przekazywanie w usłudze Microsoft Entra, bez konieczności podawania hasła).

CREATE DATABASE SCOPED CREDENTIAL EntraIdCred
WITH IDENTITY = 'User Identity';

Zdalny dostęp do danych za pomocą zestawu OPENROWSET i tabel zewnętrznych

Program SQL Server oferuje trzy odrębne podejścia do wykonywania zapytań dotyczących danych zdalnych. Możesz wybrać odpowiednie podejście, gdy rozumiesz różnice w składni, uwierzytelnianiu i architekturze.

Metoda Składnia Nawiązuje połączenie z Uwierzytelnianie Usługi PolyBase Platformy
Zapytania OLE DB OPENROWSET(provider, connection, query) Dowolne źródło OLE DB za pośrednictwem bazy danych MSOLEDBSQL, SQLOLEDB lub innych dostawców Uwierzytelnianie SQL, uwierzytelnianie systemu Windows, Microsoft Entra ID (MSOLEDBSQL) Nie. SQL Server (wszystkie obsługiwane wersje)
Zapytania plików w SQL Server 2022 (16.x) oraz SQL Server 2019 (15.x) OPENROWSET(BULK ...) Pliki na dysku lokalnym, sieci lub w chmurze (Azure Blob, ADLS, S3, OneLake) Token SAS, klucz dostępu, tożsamość zarządzana, Microsoft Entra ID Tak dla chmury 1; Nie dla lokalnej SQL Server 2022 (16.x) oraz SQL Server 2019 (15.x)
Zapytania plikowe w SQL Server 2025 (17.x) i późniejszych wersjach OPENROWSET(BULK ...) Pliki na dysku lokalnym, sieci lub w chmurze (Azure Blob, ADLS, S3, OneLake) Token SAS, klucz dostępu, tożsamość zarządzana, Microsoft Entra ID Nie. SQL Server 2022 (16.x) i nowsze wersje, Azure SQL Database, Azure SQL Managed Instance, SQL Database in Fabric
Łączniki programu PolyBase CREATE EXTERNAL TABLEz użyciem CREATE EXTERNAL DATA SOURCE , sqlserver://, oracle://, teradata://, , mongodb://odbc:// Zdalne źródła programu SQL Server, Oracle, Teradata, MongoDB, ODBC Tylko uwierzytelnianie SQL Yes SQL Server 2019 (15.x) i nowsze wersje (Windows); SQL Server 2025 (17.x) i nowsze wersje (Linux)

1 Aby uzyskać dostęp do plików w chmurze w SQL Server 2022 (16.x), funkcja PolyBase musi być zainstalowana.

  • Zapytania OLE DB używają elementu OPENROWSET(provider, connection, query), aby łączyć się z dowolnym źródłem OLE DB za pośrednictwem MSOLEDBSQL, SQLOLEDB lub innego dostawcy we wszystkich obsługiwanych wersjach programu SQL Server. Obsługują uwierzytelnianie SQL, Windows authentication oraz Microsoft Entra ID z MSOLEDBSQL, a także nie wymagają instalacji usług PolyBase.
  • W zapytaniach dotyczących plików znacznik OPENROWSET(BULK ...) służy do odczytywania plików z dysku lokalnego, udziałów sieciowych lub magazynów w chmurze, takich jak Azure Blob Storage, ADLS, S3 czy OneLake, przy użyciu tokenu SAS, klucza dostępu, Managed Identity lub Microsoft Entra ID. Są obsługiwane dla plików lokalnych i sieciowych w wersjach SQL Server 2005 i nowszych, dla plików w chmurze w wersjach SQL Server 2022 (16.x) i nowszych, a także w Azure SQL Database, Azure SQL Managed Instance oraz bazie danych SQL w Fabric. Zapytania plików nie wymagają usług PolyBase dla plików lokalnych ani dla plików chmurowych w wersjach SQL Server 2022 (16.x) i nowszych.
  • Konektory PolyBase służą do łączenia ze zdalnymi źródłami danych SQL Server, Oracle, Teradata, MongoDB lub ODBC przy użyciu CREATE EXTERNAL TABLE z CREATE EXTERNAL DATA SOURCE oraz lokalizacji typu sqlserver://, oracle://, teradata://, mongodb:// lub odbc://. Wymagają uwierzytelniania SQL i usług PolyBase w SQL Server 2019 (15.x) oraz nowszych wersjach na Windows i SQL Server 2025 (17.x) oraz w późniejszych wersjach na Linuksie. Aby uzyskać więcej informacji, zobacz CREATE EXTERNAL DATA SOURCE (Transact-SQL).

Kiedy należy używać każdego podejścia

Użyj OLE DB OPENROWSET dla:

  • Używaj OLE DB OPENROWSET do szybkich, jednorazowych ad hoc zapytań bez tworzenia trwałych obiektów.
  • Użyj OLE DB OPENROWSET na potrzeby uwierzytelniania przy użyciu Microsoft Entra ID lub tożsamości zarządzanej za pomocą MSOLEDBSQL.
  • Użyj OLE DB OPENROWSET , aby uniknąć zależności usług PolyBase.
  • Użyj OLE DB OPENROWSET , aby połączyć się z dowolnym źródłem danych, które mają dostawcę OLE DB.

Użyj pliku OPENROWSET(BULK) dla:

  • Używaj pliku OPENROWSET(BULK ...) do ad hoc eksploracji plików i odkrywania schematów.
  • Użyj pliku OPENROWSET(BULK ...) do szybkich transformacji i podglądów, zanim zdecydujesz się na definicję tabeli.
  • Użyj pliku OPENROWSET(BULK ...) do elastycznych transformacji kolumn w linii, takich jak casting, filtrowanie i obliczane kolumny.
  • Użyj pliku OPENROWSET(BULK ...) dla danych, które nie zmieniają się często i nie wymagają trwałych metadanych.

Użyj konektorów PolyBase z CREATE EXTERNAL TABLE do:

  • Używaj łączników PolyBase z CREATE EXTERNAL TABLE do tworzenia trwałych definicji tabel wielokrotnego użytku, używanych przez wielu użytkowników lub wiele aplikacji.
  • Używaj łączników PolyBase z CREATE EXTERNAL TABLE dla obciążeń produkcyjnych, które wymagają statystyk i optymalizacji planu zapytań.
  • Używaj konektorów PolyBase z CREATE EXTERNAL TABLE do wypychania przetwarzania do źródeł zdalnych, takich jak Oracle i SQL Server.
  • Używaj łączników PolyBase z CREATE EXTERNAL TABLE na potrzeby wspólnego zarządzania i zabezpieczeń; po utworzeniu tabeli użytkownicy potrzebują tylko uprawnienia SELECT.
  • Używaj konektorów PolyBase z CREATE EXTERNAL TABLE, gdy dla źródła zdalnego jest dostępne uwierzytelnianie SQL.

OPENROWSET (OLE DB) — zapytania zdalne ad hoc (brak wymaganych usług PolyBase)

Formularz OPENROWSET OLE DB łączy się ze zdalnym źródłem danych za pośrednictwem dostawcy OLE DB, wykonuje zapytanie przekazywane i zwraca wyniki jako zestaw wierszy. Jest to jednorazowa alternatywa ad hoc dla serwera połączonego. Nie są tworzone trwałe metadane. Ta składnia nie wymaga usług PolyBase i nie obsługuje plików w chmurze ani zewnętrznych źródeł danych.

To przykładowe zapytanie łączy się ze zdalnym programem SQL Server za pośrednictwem ole DB (a nie z technologią PolyBase).

SELECT *
FROM OPENROWSET (
    'MSOLEDBSQL',
    'Server=remote-server;Database=AdventureWorks;Trusted_Connection=yes;',
    'SELECT TOP 10 * FROM AdventureWorks.Sales.SalesOrderHeader'
);

OPENROWSET(BULK) — zapytania oparte na plikach (PolyBase)

Forma BULKOPENROWSET odczytuje dane bezpośrednio z plików. W programie SQL Server 2019 (15.x) i starszych wersjach jest odczytywany ze ścieżek plików lokalnych lub UNC i wymaga pliku formatu. W programie SQL Server 2022 (16.x) i nowszych wersjach można odczytywać z magazynu w chmurze przy użyciu parametrów DATA_SOURCE i FORMAT. To podejście jest zintegrowaną z technologią PolyBase wersją używaną do wirtualizacji danych.

W kontekście technologii PolyBase i wirtualizacji danych, gdy ten przewodnik odwołuje się do OPENROWSET, oznacza to składnię OPENROWSET(BULK ...) z klauzulą FORMAT do zapytań dotyczących plików zewnętrznych.

Przykłady:

To przykładowe zapytanie odczytuje plik Parquet z usługi Azure Blob Storage (SQL Server 2022 i nowsze wersje).

SELECT TOP 10 *
FROM OPENROWSET (
    BULK 'data/sales/*.parquet',
    DATA_SOURCE = 'MyAzureStorage',
    FORMAT = 'PARQUET'
) AS [result];

To przykładowe zapytanie odczytuje plik Parquet ze ścieżką śródliniową (Azure SQL Database, Azure SQL Managed Instance).

SELECT TOP 10 *
FROM OPENROWSET (
    BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet',
    FORMAT = 'PARQUET'
) AS [result];

Kiedy należy używać tabel OPENROWSET czy tabel zewnętrznych

Zarówno OPENROWSET(BULK ...), jak i zewnętrzne tabele umożliwiają wykonywanie zapytań dotyczących danych zewnętrznych przy użyciu języka T-SQL, ale są zaprojektowane do różnych przypadków użycia. W poniższej tabeli podsumowano kluczowe różnice, które pomogą Ci zdecydować, które podejście pasuje do danego scenariusza.

Zdolność OPENROWSET(BULK ...) Tabela zewnętrzna
Przeznaczenie Eksploracja ad hoc i jednorazowe zapytania Trwała, wielokrotnego użytku definicja tabeli
Metadane przechowywane w bazie danych Nie. Nic nie jest zapisywane po uruchomieniu zapytania Tak. Definicja tabeli, źródło danych i format pliku są przechowywane jako obiekty bazy danych
Definicja schematu Wnioskowane automatycznie z pliku (Parquet) lub określone w tekście z klauzulą WITH Zdefiniowano jawnie w oświadczeniu CREATE EXTERNAL TABLE
Uprawnienia Wymaga ADMINISTER BULK OPERATIONS lub ADMINISTER DATABASE BULK OPERATIONS Standardowe SELECT uprawnienie do tabeli jest wystarczające po utworzeniu.
Obliczone kolumny Tak. Dodaj wyrażenia i obliczone kolumny na SELECT liście; funkcje metadanych, takie jak filename() i filepath() są dostępne tylko tutaj. Nie. Stała lista kolumn; wykonywanie przekształceń w widoku lub w zapytaniu, które odczytuje tabelę zewnętrzną
Statystyki Azure SQL Managed Instance: ręcznie tworzone statystyki dla pojedynczej kolumny za pomocą sys.sp_create_openrowset_statistics. Zobacz statystyki ręczne OPENROWSET.

SQL Server 2022 (16.x) i nowsze, Azure SQL Database, baza danych SQL w usłudze Fabric: automatyczne tworzenie statystyk dla predykatów. Statystyki ręczne OPENROWSET nie są obsługiwane w SQL Server.
Pełna CREATE STATISTICS obsługa na wszystkich platformach oraz automatyczne tworzenie w programie SQL Server 2022 (16.x) i nowszych wersjach. Zobacz Tworzenie ręcznych statystyk tabeli zewnętrznej.
Wypychanie Ograniczona obsługa. Silnik może przesyłać filtry do skanowania plików, ale nie dokonuje przesyłania do zdalnych źródeł RDBMS Tak. Obsługuje obliczenia typu pushdown dla konektorów RDBMS (SQL Server, Oracle, Teradata, MongoDB)
Najlepsze dla Eksploracja danych, odnajdywanie schematów, tworzenie prototypów zapytań, jednorazowe ładowanie danych, elastyczne przekształcenia Obciążenia produkcyjne, powtarzające się zapytania, dostęp współdzielony przez użytkowników, dashboardy i raporty
  • OPENROWSET(BULK ...) jest najlepszy do ad hoc eksploracji i jednorazowych zapytań, natomiast zewnętrzna tabela jest lepsza do trwałych, wielokrotnego użytku definicji tabel.
  • OPENROWSET(BULK ...) nie przechowuje metadanych w bazie danych po uruchomieniu zapytania, podczas gdy zewnętrzna tabela przechowuje definicję tabeli, źródło danych i format pliku jako obiekty bazy danych.
  • OPENROWSET(BULK ...) automatycznie określa schemat na podstawie pliku Parquet lub definiuje go bezpośrednio za pomocą klauzuli WITH, natomiast tabela zewnętrzna jawnie definiuje schemat w instrukcji CREATE EXTERNAL TABLE.
  • OPENROWSET(BULK ...) wymaga ADMINISTER BULK OPERATIONS lub ADMINISTER DATABASE BULK OPERATIONS, podczas gdy tabela zewnętrzna może być odpytywana przez użytkowników, którzy potrzebują jedynie standardowego uprawnienia SELECT, gdy tabela już istnieje.
  • OPENROWSET(BULK ...) obsługuje obliczane kolumny w funkcjach zapytania i metadanych, takie jak filename() i filepath(), podczas gdy tabela zewnętrzna ma stałą listę kolumn i wymaga transformacji w widoku lub w zapytaniu odczytującym tę zewnętrzną tabelę.
  • OPENROWSET(BULK ...) ma ograniczoną obsługę statystyk: Azure SQL Managed Instance może używać sys.sp_create_openrowset_statistics do tworzenia statystyk jednokolumnowych, ale SQL Server 2022 (16.x) i nowsze wersje, Azure SQL Database oraz baza danych SQL w usłudze Fabric automatycznie tworzą statystyki dla predykatów. Statystyki ręczne OPENROWSET nie są obsługiwane w SQL Server, Azure SQL Database ani bazie SQL w Fabric. Tabela zewnętrzna obsługuje pełną funkcjonalność CREATE STATISTICS na wszystkich platformach oraz automatyczne statystyki w programie SQL Server 2022 (16.x) i nowszych wersjach, usłudze Azure SQL Database oraz bazie danych SQL na platformie Fabric. Zobacz statystyki ręczne dla OPENROWSET oraz Tworzenie ręcznych statystyk dla tabeli zewnętrznej.
  • OPENROWSET(BULK ...) ma ograniczone możliwości przenoszenia przetwarzania do źródła danych i nie obsługuje takiego przenoszenia do zdalnych źródeł RDBMS, podczas gdy tabela zewnętrzna obsługuje przenoszenie obliczeń dla łączników RDBMS.
  • OPENROWSET(BULK ...), lepiej nadaje się do eksploracji danych, poznawania schematu, prototypowania, jednorazowego ładowania danych i elastycznych transformacji, natomiast tabela zewnętrzna lepiej nadaje się do obciążeń produkcyjnych, powtarzalnych zapytań, współdzielonego dostępu, pulpitów nawigacyjnych i raportowania.

Użyj OPENROWSET, gdy wymagasz elastyczności

Służy OPENROWSET do eksplorowania pliku, testowania różnych schematów lub dodawania obliczonych kolumn i przekształceń bez tworzenia obiektów trwałych. Można na przykład wyodrębnić ścieżkę pliku jako kolumnę, rzutować typy danych w tekście lub filtrować wyrażenia obliczone w jednym zapytaniu.

To przykładowe zapytanie zawiera obliczone kolumny i przekształcenia:

SELECT result.filename() AS [FileName],
       result.filepath(1) AS [Year],
       result.filepath(2) AS [Month],
       CAST (OrderDate AS DATE) AS OrderDate,
       Amount,
       OrderDate
FROM OPENROWSET (
    BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*/*/*/*.parquet',
    FORMAT = 'PARQUET'
) AS result
WHERE result.filepath(1) = '2025';

Wskazówka

Funkcje filepath() i filename() są dostępne w usługach Azure SQL Database, Azure SQL Managed Instance i SQL Server 2022 (16.x) i nowszych wersjach. Umożliwiają one filtrowanie części ścieżki pliku (eliminacja partycji) i uwidocznienie nazwy pliku źródłowego jako kolumny, która nie jest bezpośrednio możliwa w przypadku tabel zewnętrznych.

Używanie tabel zewnętrznych, gdy potrzebujesz trwałości i ładu

Użyj tabel zewnętrznych, gdy wielu użytkowników lub aplikacji musi wielokrotnie wykonywać zapytania dotyczące tych samych danych zewnętrznych. Należy zdefiniować schemat, źródło danych i poświadczenia raz i zapisać je w bazie danych. Konsumenci potrzebują tylko SELECT uprawnień w tabeli.

Tabele zewnętrzne obsługują również statystyki, których optymalizator zapytań używa do tworzenia lepszych planów wykonywania. Statystyki można utworzyć ręcznie lub zezwolić aparatowi na automatyczne tworzenie (SQL Server 2022 (16.x) i nowszych wersjach.

To przykładowe zapytanie tworzy statystyki dotyczące tabeli zewnętrznej w celu uzyskania lepszych planów zapytań.

CREATE STATISTICS Stats_OrderDate
ON dbo.SalesExternal(OrderDate)
WITH FULLSCAN;

Aby uzyskać więcej informacji na temat statystyk obu podejść, zobacz Zagadnienia dotyczące wydajności technologii PolyBase — Statystyki.

BULK INSERT vs. OPENROWSET(BULK): Którego należy użyć?

Zarówno BULK INSERT, jak i OPENROWSET(BULK ...) importują dane z plików do programu SQL Server z użyciem tej samej podstawowej mechaniki ładowania zbiorczego. Różnią się one jednak składnią, elastycznością i tym, co można zrobić z wynikami. Poniższa tabela zawiera podsumowanie kluczowych różnic:

Uwaga / Notatka

Samodzielna instrukcja BULK INSERT nie jest obsługiwana w bazie danych SQL usługi Fabric. Aby pobrać dane, użyj INSERT ... SELECT przeciwko OPENROWSET(BULK ...) OneLake.

Zdolność BULK INSERT OPENROWSET(BULK ...)
Podstawowy cel Ładuje dane z pliku bezpośrednio do tabeli docelowej Zwraca zestaw wierszy, który używasz w instrukcji SELECT lub INSERT ... SELECT
Wzorzec użycia Autonomiczne wyrażenie: BULK INSERT <table> FROM '<file>' Należy użyć wewnątrz zapytania: SELECT * FROM OPENROWSET(BULK ...) lub INSERT INTO <table> SELECT * FROM OPENROWSET(BULK ...)
Wymaga tabeli docelowej? Tak. Zawsze zapisuje dane bezpośrednio w tabeli Nie. Można to SELECT używać bez potrzeby wstawiania, lub wstawić do dowolnej tabeli albo tabeli tymczasowej.
Przekształcenia kolumn podczas ładowania Ograniczona obsługa. Dane przepływa z pliku do tabeli as-is (mapowanie kontrolowane przez format pliku lub kolejność kolumn) Pełna obsługa. Możesz dodawać wyrażenia, CASTWHERE filtry, JOIN inne tabele i obliczone kolumny w otaczającym środowiskuSELECT
Wskazówki dotyczące tabeli Klauzula zawiera obsługę WITH, BATCHSIZE, CHECK_CONSTRAINTS, FIRE_TRIGGERS, KEEPIDENTITY, KEEPNULLS, TABLOCK i więcej Obsługuje podpowiedzi tabeli za pomocą składni INSERT ... SELECT * FROM OPENROWSET(BULK ...) WITH (TABLOCK, IGNORE_CONSTRAINTS, ...)
Importowanie pojedynczej wartości dużego obiektu (LOB) Niewspierane Tak. Obsługuje SINGLE_BLOB, SINGLE_CLOB, SINGLE_NCLOB w celu zaimportowania całego pliku jako jedną wartość varbinary(max), varchar(max) lub nvarchar(max)
Formatowanie plików Tak. Obsługiwane za pośrednictwem (XML i nie-XML) Tak. Obsługiwane (XML i inne niż XML)
Dostęp do plików w chmurze DATA_SOURCE obsługuje usługę Azure Blob Storage w programie SQL Server 2017 (14.x) i nowszych wersjach, Azure SQL Database oraz Azure SQL Managed Instance. SQL Server 2019 CU11 i późniejsze aktualizacje również wspierają ADLS Gen2. Nie jest obsługiwana pamięć kompatybilna z S3. DATA_SOURCE obsługuje usługę Azure Blob Storage w programie SQL Server 2017 (14.x) i nowszych wersjach, usługę ADLS Gen2 w programie SQL Server 2019 CU11 i nowszych wersjach oraz magazyn obiektów zgodny z S3 w programie SQL Server 2022 (16.x) i nowszych wersjach. Azure SQL Database i Azure SQL Managed Instance obsługują Azure Blob Storage i ADLS Gen2. Baza danych SQL w Fabric obsługuje OneLake oraz zewnętrzną pamięć za pomocą skrótów OneLake.
Pliki Parquet lub Delta Niewspierane. Tylko format CSV lub tekst oddzielany Tak. Programy SQL Server 2022 (16.x) i nowsze wersje, Azure SQL Managed Instance oraz Azure SQL Database obsługują FORMAT = 'PARQUET' i FORMAT = 'DELTA'; baza danych SQL w usłudze Fabric obsługuje FORMAT = 'PARQUET', ale nie DELTA. Aby uzyskać więcej informacji, zobacz OPENROWSET BULK (Transact-SQL).
Wymagane uprawnienie ADMINISTER BULK OPERATIONS lub ADMINISTER DATABASE BULK OPERATIONS, plus INSERT w tabeli docelowej ADMINISTER BULK OPERATIONS lub ADMINISTER DATABASE BULK OPERATIONS
Minimalne logowanie Tak. Obsługiwane w ramach prostych lub zbiorczych modeli odzyskiwania za pomocą TABLOCK Tak. Obsługiwane przy użyciu INSERT ... SELECT i TABLOCK
  • BULK INSERT ładuje dane z pliku bezpośrednio do tabeli docelowej, a OPENROWSET(BULK ...) zwraca zbiór wierszy, którego można użyć w instrukcji SELECT lub INSERT ... SELECT.
  • BULK INSERT jest zdaniem samodzielnym, natomiast OPENROWSET(BULK ...) musi być użyte wewnątrz zapytania takiego jak SELECT * FROM OPENROWSET(BULK ...) lub INSERT INTO <table> SELECT * FROM OPENROWSET(BULK ...).
  • BULK INSERT zawsze zapisuje bezpośrednio do tabeli docelowej, natomiast OPENROWSET(BULK ...) może SELECT z pliku bez wstawiania danych gdziekolwiek albo wstawiać je do dowolnej tabeli lub tabeli tymczasowej.
  • BULK INSERT ma ograniczone wsparcie dla transformacji kolumn, ponieważ dane przepływają z pliku do tabeli as-is, a mapowanie jest kontrolowane przez format pliku lub kolejność kolumn. OPENROWSET(BULK ...) obsługuje wyrażenia, CAST, filtry WHERE, elementy JOIN oraz kolumny obliczeniowe w otaczającym elemencie SELECT.
  • BULK INSERT używa zdania WITH dla BATCHSIZE, CHECK_CONSTRAINTS, FIRE_TRIGGERS, KEEPIDENTITY, KEEPNULLS, TABLOCK, , oraz innych podpowiedzi. OPENROWSET(BULK ...) obsługuje wskazówki dotyczące tabel za pomocą INSERT ... SELECT * FROM OPENROWSET(BULK ...) WITH (TABLOCK, IGNORE_CONSTRAINTS, ...).
  • BULK INSERT nie obsługuje importu pojedynczych wartości dużych obiektów. OPENROWSET(BULK ...) obsługuje SINGLE_BLOB, SINGLE_CLOB oraz SINGLE_NCLOB do zaimportowania całego pliku jako jednej wartości varbinary(max), varchar(max) lub nvarchar(max), odpowiednio.
  • Zarówno BULK INSERT, jak i OPENROWSET(BULK ...), obsługują pliki w formacie XML i inne niż XML.
  • W przypadku dostępu do plików w chmurze przy użyciu elementu BULK INSERT parametr DATA_SOURCE obsługuje usługę Azure Blob Storage w programie SQL Server 2017 (14.x) i nowszych wersjach, usłudze Azure SQL Database oraz usłudze Azure SQL Managed Instance. Aktualizacje SQL Server 2019 CU11 i późniejsze również wspierają ADLS Gen2, ale BULK INSERT nie obsługują pamięci kompatybilnej z S3. W przypadku OPENROWSET(BULK ...), DATA_SOURCE obsługuje usługę Azure Blob Storage w programie SQL Server 2017 (14.x) i nowszych wersjach, ADLS Gen2 w programie SQL Server 2019 CU11 i nowszych wersjach oraz magazyn obiektów zgodny z S3 w programie SQL Server 2022 (16.x) i nowszych wersjach. Azure SQL Database i Azure SQL Managed Instance obsługują Azure Blob Storage i ADLS Gen2. Baza danych SQL w Fabric obsługuje OneLake oraz zewnętrzną pamięć za pomocą skrótów OneLake.
  • BULK INSERT nie obsługuje plików Parquet ani Delta, a obsługuje jedynie CSV lub tekst delimitowany. OPENROWSET(BULK ...) obsługuje FORMAT = 'PARQUET' i FORMAT = 'DELTA' w programie SQL Server 2022 (16.x) i nowszych wersjach, Azure SQL Database i Azure SQL Managed Instance. Baza danych SQL w Fabric obsługuje FORMAT = 'DELTA', ale nie FORMAT = 'PARQUET'. Aby uzyskać więcej informacji, zobacz OPENROWSET BULK (Transact-SQL).
  • BULK INSERT wymaga ADMINISTER BULK OPERATIONS lub ADMINISTER DATABASE BULK OPERATIONS plus INSERT uprawnienia na tabeli docelowej, podczas gdy OPENROWSET(BULK ...) wymaga ADMINISTER BULK OPERATIONS lub ADMINISTER DATABASE BULK OPERATIONS.
  • BULK INSERT obsługuje minimalne rejestrowanie w modelu odzyskiwania prostego lub z logowaniem zbiorczym z użyciem TABLOCK. OPENROWSET(BULK ...) obsługuje minimalne logowanie, gdy jest używany z INSERT ... SELECT i TABLOCK.

Kiedy wybrać BULK INSERT

Użyj BULK INSERT, gdy masz proste załadowanie pliku do tabeli i nie trzeba przekształcać, filtrować ani łączyć danych przy imporcie. Używa prostszej składni dla plików CSV lub innych plików rozdzielonych:

To przykładowe zapytanie ładuje plik CSV z usługi Azure Blob Storage bezpośrednio do tabeli.

BULK INSERT Sales.Invoices
FROM 'invoices/inv-2025-01.csv'
WITH (
    DATA_SOURCE = 'MyAzureBlobStorage',
    FORMAT = 'CSV',
    FIRSTROW = 2,
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n'
);

To przykładowe zapytanie ładuje plik lokalny z plikiem formatu do mapowania kolumn.

BULK INSERT dbo.Products
FROM 'C:\Data\products.csv'
WITH (
    FORMATFILE = 'C:\Data\products.fmt',
    FIRSTROW = 2,
    TABLOCK
);

Kiedy wybrać opcję OPENROWSET(BULK)

Użyj OPENROWSET(BULK ...) , jeśli potrzebujesz co najmniej jednego z następujących warunków:

  • Użyj OPENROWSET(BULK ...), aby wykonywać zapytania dotyczące danych plików lub wyświetlać ich podgląd bez konieczności wcześniejszego tworzenia tabeli.
  • Użyj OPENROWSET(BULK ...) do transformacji, filtrowania lub łączenia danych podczas importu.
  • Użyj OPENROWSET(BULK ...) do ładowania plików Parquet lub Delta, ponieważ BULK INSERT nie obsługuje tych formatów.
  • Użyj OPENROWSET(BULK ...) do importu całego pliku jako jednej wartości LOB z SINGLE_BLOB, SINGLE_CLOB, lub SINGLE_NCLOB.

To przykładowe zapytanie wyświetla podgląd pliku CSV z usługi Azure Blob Storage bez wstawiania danych w dowolnym miejscu.

SELECT TOP 10 *
FROM OPENROWSET (
    BULK 'invoices/inv-2025-01.csv',
    DATA_SOURCE = 'MyAzureBlobStorage',
    FORMAT = 'CSV',
    FIRSTROW = 2,
    FIELDTERMINATOR = ','
) AS src;

To przykładowe zapytanie wstawia dane z przekształcaniem i filtrowaniem.

INSERT INTO Sales.Invoices (InvoiceDate, Amount, Customer)
SELECT CAST (InvoiceDate AS DATE),
       Amount * 1.1, -- Apply a 10% markup
       UPPER(Customer)
FROM OPENROWSET (
    BULK 'invoices/inv-2025-01.csv',
    DATA_SOURCE = 'MyAzureBlobStorage',
    FORMAT = 'CSV',
    FIRSTROW = 2
) WITH (
    InvoiceDate VARCHAR (10),
    Amount DECIMAL (18, 2),
    Customer VARCHAR (100)
) AS src
WHERE Amount IS NOT NULL;

To przykładowe zapytanie ładuje plik Parquet (jest to niemożliwe z BULK INSERT).

INSERT INTO Sales.Invoices
SELECT *
FROM OPENROWSET (
    BULK 'data/invoices/*.parquet',
    DATA_SOURCE = 'MyAzureStorage',
    FORMAT = 'PARQUET') AS src;

To przykładowe zapytanie importuje cały plik XML jako pojedynczą wartość varbinary(max).

INSERT INTO dbo.XmlDocuments (DocContent)
SELECT BulkColumn
FROM OPENROWSET (
    BULK 'C:\Data\catalog.xml',
    SINGLE_BLOB
) AS x;

Wskazówka

Jednym z podejść jest rozpoczęcie od OPENROWSET(BULK ...) w SELECT w celu eksploracji i weryfikacji danych plików, a następnie przełączenie się do BULK INSERT do końcowego obciążenia produkcyjnego, jeśli nie potrzebujesz przekształceń. Jeśli potrzebujesz obsługi Parquet lub Delta albo filtrowania wbudowanego, pozostań przy OPENROWSET.

Aby uzyskać więcej informacji, zobacz następujące powiązane przewodniki:

Przydatne funkcje metadanych

Gdy odpytujesz pliki zewnętrzne za pomocą OPENROWSET lub tabel zewnętrznych, używaj wbudowanych funkcji i procedur do sprawdzania metadanych plików, wykrywania schematów oraz tworzenia zapytań uwzględniających partycjonowanie.

filepath() i nazwa pliku()

Funkcje filepath() i filename() zwracają części ścieżki pliku lub nazwy pliku dla każdego wiersza w zestawie wyników. Są one szczególnie przydatne w następujących celach:

  • Eliminacja partycji: filtruj według segmentów folderów (na przykład partycji roku/miesiąca/dnia), aby aparat odczytywał tylko pasujące pliki zamiast skanować wszystko.

  • Uwidacznianie metadanych źródłowych: dołącz nazwę pliku źródłowego lub ścieżkę jako kolumnę w wynikach zapytania, co jest przydatne w przypadku inspekcji lub debugowania.

Function Zwroty Przykład
filename() Nazwa pliku źródłowego (w tym rozszerzenie) pliku źródłowego dla każdego wiersza sales_2025_01.parquet
filepath(N) N-ty segment folderu z symbolu wieloznacznego () w ścieżce *, gdzie BULK zaczyna się od 1 W przypadku ścieżki sales/2025/01/*.parquetfilepath(1) zwraca wartość 2025, filepath(2) zwraca wartość01

Dotyczy: Azure SQL Database, Azure SQL Managed Instance, SQL Server 2022 (16.x) i nowsze wersje, baza danych SQL w sieci szkieletowej.

To przykładowe zapytanie używa filepath() funkcji eliminacji partycji i filename() identyfikowania plików źródłowych. Odczytuje tylko pliki w folderze /2025/ i odczytuje tylko pliki w podfolderze /06/ .

SELECT result.filename() AS SourceFile,
       result.filepath(1) AS [Year],
       result.filepath(2) AS [Month],
       *
FROM OPENROWSET (
    BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*/*/*.parquet',
    FORMAT = 'PARQUET'
) AS result
WHERE result.filepath(1) = '2025' 
      AND result.filepath(2) = '06';

Wskazówka

Umieść filtry w klauzuli filepath(), a nie w podzapytaniu lub CTE WHERE. Gdy filtr znajduje się w klauzuli WHERE, silnik może przeprowadzić usunięcie partycji na poziomie skanowania plików, co znacznie zmniejsza operacje wejścia/wyjścia.

sp_describe_first_result_set — odnajdywanie typów kolumn OPENROWSET

Podczas używania OPENROWSET z plikami Parquet, silnik automatycznie wnioskuje typy danych kolumn (wnioskowanie schematu). Wnioskowane typy mogą być większe niż jest to konieczne. Na przykład kolumny znaków są często wnioskowane jako varchar(8000), ponieważ metadane Parquet nie zawierają maksymalnej długości. Ten wybór może obniżyć wydajność i zużywać więcej pamięci.

Użyj sp_describe_first_result_set polecenia , aby sprawdzić wywnioskowany schemat przed zakończeniem zapytania. Po wyświetleniu wywnioskowanych typów określ w klauzuli WITH węższe typy, aby zwiększyć wydajność.

  • Krok 1. Sprawdzanie wywnioskowanego schematu.

    EXECUTE sp_describe_first_result_set N'
    SELECT *
    FROM OPENROWSET(
        BULK ''abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet'',
        FORMAT = ''PARQUET''
    ) AS result';
    

    Dane wyjściowe zawierają nazwę każdej kolumny, wywnioskowany typ danych, maksymalną długość, precyzję i skalę. Jeśli zobaczysz varchar(8000) tam, gdzie varchar(100) w zupełności wystarczy, zastąp go.

  • Krok 2. Używanie typów jawnych w celu uzyskania lepszej wydajności.

    SELECT TOP 100 *
    FROM OPENROWSET (
        BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet',
        FORMAT = 'PARQUET'
    ) WITH (
        OrderId INT,
        OrderDate DATE,
        Amount DECIMAL (18, 2),
        Customer VARCHAR (100) -- much narrower than the inferred varchar(8000)
    ) AS result;
    

Wnioskowanie schematu działa tylko z plikami Parquet. W przypadku plików CSV zawsze określ definicje kolumn w klauzuli WITH (for OPENROWSET) lub w instrukcji CREATE EXTERNAL TABLE . sp_describe_first_result_set to ogólna procedura dla SQL Server, Azure SQL Database, Azure SQL Managed Instance oraz bazy danych SQL usługi Fabric, ale jest szczególnie przydatna w przypadku zapytań OPENROWSET. Więcej informacji można znaleźć w sp_describe_first_result_set.

Wydajność, rozwiązywanie problemów i najlepsze rozwiązania

Po zaimplementowaniu wirtualizacji danych skorzystaj z tych przewodników, aby zoptymalizować wydajność, zdiagnozować problemy i zapewnić gotowość produkcyjną:

Obszar Artykuł Szczegóły
Wydajność technologii PolyBase zagadnienia dotyczące wydajności w programie PolyBase dla programu SQL Server Statystyki, wypychanie, równoległość i zarządzanie pamięcią
Obliczenia wypychane Obliczenia przesuwne w PolyBase Określa, które działania są wypychane do zdalnego źródła
Jak sprawdzić, czy wystąpiło przesunięcie w dół Jak sprawdzić, czy wystąpiło zewnętrzne wypychanie Plany zapytań i dynamiczne widoki zarządzania
Troubleshooting Monitorowanie i rozwiązywanie problemów z technologią PolyBase Common errors and resolutions (Typowe błędy i rozwiązania)
Łączność protokołu Kerberos Rozwiązywanie problemów z łącznością Kerberos w PolyBase
Często zadawane pytania Często zadawane pytania dotyczące technologii PolyBase
Błędy i rozwiązania błędów technologii PolyBase i możliwych rozwiązań