Uwaga
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:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Polecenie OPENROWSET
języka T-SQL zawiera wszystkie informacje o połączeniu wymagane do uzyskiwania dostępu do danych zdalnych z zewnętrznego źródła danych.
OPENROWSET
obsługuje również operacje zbiorcze za pośrednictwem wbudowanego dostawcy BULK
, który umożliwia odczytywanie i zwracanie danych z pliku jako zestawu wierszy.
OPENROWSET BULK
program jest przeznaczony do odczytu z zewnętrznych plików danych, OPENROWSET
bez zbiorczego odczytu z innego aparatu bazy danych.
Funkcję OPENROWSET
można odwołać w klauzuli FROM
zapytania tak, jakby była to nazwa tabeli. Funkcję OPENROWSET
można również odwołać jako element docelowy instrukcji INSERT
, UPDATE
lub DELETE
, z zastrzeżeniem możliwości dostawcy danych. Chociaż zapytanie może zwrócić wiele zestawów wyników, OPENROWSET
zwraca tylko pierwszy zestaw wyników.
OPENROWSET
BULK
bez operatora jest dostępny tylko w programie SQL Server, aby uzyskać więcej informacji, zobacz OPENROWSET (Transact-SQL).
Szczegóły i linki do podobnych przykładów na innych platformach:
- W obszarze Składnia magazynu danych usługi Microsoft Fabric wybierz pozycję Sieć szkieletowa na liście rozwijanej wersji.
- Aby uzyskać więcej informacji na temat
OPENROWSET
usługi Azure SQL Database, zobacz Wirtualizacja danych za pomocą usługi Azure SQL Database. - Aby uzyskać więcej informacji na temat
OPENROWSET
usługi Azure SQL Managed Instance, zobacz Wirtualizacja danych za pomocą usługi Azure SQL Managed Instance. - Aby uzyskać informacje i przykłady dotyczące bezserwerowych pul SQL w usłudze Azure Synapse, zobacz Jak używać zestawu OPENROWSET przy użyciu bezserwerowej puli SQL w usłudze Azure Synapse Analytics.
- Dedykowane pule SQL w usłudze Azure Synapse nie obsługują funkcji
OPENROWSET
.
Transact-SQL konwencje składni
Syntax
OPENROWSET(BULK)
składni służy do odczytywania plików zewnętrznych:
OPENROWSET( BULK 'data_file' ,
{ FORMATFILE = 'format_file_path' [ <bulk_options> ]
| SINGLE_BLOB | SINGLE_CLOB | SINGLE_NCLOB }
)
<bulk_options> ::=
[ , DATA_SOURCE = 'data_source_name' ]
-- bulk_options related to input file format
[ , CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]
[ , FORMAT = { 'CSV' | 'PARQUET' | 'DELTA' } ]
[ , FIELDQUOTE = 'quote_character' ]
[ , FORMATFILE = 'format_file_path' ]
[ , FORMATFILE_DATA_SOURCE = 'data_source_name' ]
[ , FIRSTROW = first_row ]
[ , LASTROW = last_row ]
[ , MAXERRORS = maximum_errors ]
[ , ERRORFILE = 'file_name' ]
[ , ERRORFILE_DATA_SOURCE = 'data_source_name' ]
[ , ROWS_PER_BATCH = rows_per_batch ]
[ , ORDER ( { column [ ASC | DESC ] } [ , ...n ] ) [ UNIQUE ] ]
Arguments
BULK arguments
Używa dostawcy zestawów wierszy BULK
dla OPENROWSET
do odczytywania danych z pliku. W programie SQL Server OPENROWSET
mogą odczytywać dane z pliku danych bez ładowania danych do tabeli docelowej. Dzięki temu można użyć OPENROWSET
z podstawową instrukcją SELECT
.
Argumenty opcji BULK
umożliwiają znaczącą kontrolę nad tym, gdzie rozpocząć i zakończyć odczytywanie danych, jak radzić sobie z błędami i jak dane są interpretowane. Można na przykład określić, że plik danych jest odczytywany jako pojedynczy wiersz, jednokolumny zestaw wierszy typu varbinary, varchar lub nvarchar. Domyślne zachowanie zostało opisane w poniższych opisach argumentów.
Aby uzyskać informacje o sposobie korzystania z BULK
opcji, zobacz sekcję Uwagi w dalszej części tego artykułu. Aby uzyskać informacje o uprawnieniach wymaganych przez BULK
tę opcję, zobacz sekcję Uprawnienia w dalszej części tego artykułu.
Note
W przypadku importowania danych z modelem pełnego odzyskiwania OPENROWSET (BULK ...)
nie optymalizuje rejestrowania.
Aby uzyskać informacje na temat przygotowywania danych do importowania zbiorczego, zobacz Prepare data for bulk export or import.
BULK 'data_file'
Pełna ścieżka pliku danych, którego dane mają zostać skopiowane do tabeli docelowej.
SELECT * FROM OPENROWSET(
BULK 'C:\DATA\inv-2017-01-19.csv',
SINGLE_CLOB
) AS DATA;
Począwszy od programu SQL Server 2017 (14.x), data_file może znajdować się w usłudze Azure Blob Storage. Aby zapoznać się z przykładami, zobacz Przykłady zbiorczego dostępu do danych w usłudze Azure Blob Storage.
Opcje obsługi błędów ZBIORCZYCH
ERRORFILE = 'file_name'
Określa plik używany do zbierania wierszy, które mają błędy formatowania i nie można przekonwertować na zestaw wierszy OLE DB. Te wiersze są kopiowane do tego pliku błędu z pliku danych "tak, jak to jest".
Plik błędu jest tworzony na początku wykonywania polecenia. Jeśli plik już istnieje, zostanie zgłoszony błąd. Ponadto tworzony jest plik kontrolny z rozszerzeniem .ERROR.txt. Ten plik odwołuje się do każdego wiersza w pliku błędu i zapewnia diagnostykę błędów. Po skorygowaniu błędów można załadować dane.
Począwszy od programu SQL Server 2017 (14.x), error_file_path
może znajdować się w usłudze Azure Blob Storage.
ERRORFILE_DATA_SOURCE_NAME
Począwszy od programu SQL Server 2017 (14.x), ten argument jest nazwanym zewnętrznym źródłem danych wskazującym lokalizację magazynu obiektów blob platformy Azure w pliku błędu, który będzie zawierać błędy znalezione podczas importowania. Zewnętrzne źródło danych musi zostać utworzone przy użyciu TYPE = BLOB_STORAGE
. Aby uzyskać więcej informacji, zobacz CREATE EXTERNAL DATA SOURCE (Transact-SQL).
MAXERRORS = maximum_errors
Określa maksymalną liczbę błędów składniowych lub niekonformujących wierszy, zgodnie z definicją w pliku formatu, które mogą wystąpić przed OPENROWSET
zgłasza wyjątek. Dopóki MAXERRORS
nie zostanie osiągnięty, OPENROWSET
ignoruje każdy zły wiersz, nie ładuje go i zlicza zły wiersz jako jeden błąd.
Wartość domyślna dla maximum_errors to 10.
Note
MAX_ERRORS
nie ma zastosowania do CHECK
ograniczeń ani do konwertowania typów danychbigint i pieniędzy.
Opcje przetwarzania danych ZBIORCZYCH
DATA_SOURCE
DATA_SOURCE
to lokalizacja zewnętrzna utworzona za pomocą polecenia CREATE EXTERNAL DATA SOURCE.
FIRSTROW = first_row
Określa liczbę pierwszego wiersza do załadowania. Wartość domyślna to 1. Wskazuje to pierwszy wiersz w określonym pliku danych. Liczby wierszy są określane przez zliczanie terminatorów wierszy.
FIRSTROW
jest oparty na 1.
LASTROW = last_row
Określa liczbę ostatniego wiersza do załadowania. Wartość domyślna to 0. Wskazuje to ostatni wiersz w określonym pliku danych.
ROWS_PER_BATCH = rows_per_batch
Określa przybliżoną liczbę wierszy danych w pliku danych. Ta wartość powinna być taka sama jak rzeczywista liczba wierszy.
OPENROWSET
zawsze importuje plik danych jako pojedynczą partię. Jeśli jednak określisz rows_per_batch z wartością > 0, procesor zapytań używa wartości rows_per_batch jako wskazówki dotyczącej przydzielania zasobów w planie zapytania.
Domyślnie ROWS_PER_BATCH
jest nieznany. Określanie ROWS_PER_BATCH = 0
jest takie samo jak pominięcie ROWS_PER_BATCH
.
ORDER ( { kolumna [ ASC | DESC ] } [ ,... n ] [ UNIQUE ] )
Opcjonalna wskazówka określająca sposób sortowania danych w pliku danych. Domyślnie operacja zbiorcza zakłada, że plik danych jest nieurządkowany. Wydajność może poprawić, jeśli optymalizator zapytań może wykorzystać zamówienie w celu wygenerowania bardziej wydajnego planu zapytań. Poniższa lista zawiera przykłady dotyczące określania sortowania może być korzystne:
- Wstawianie wierszy do tabeli zawierającej indeks klastrowany, w którym dane zestawu wierszy są sortowane w kluczu indeksu klastrowanego.
- Łączenie zestawu wierszy z inną tabelą, w której pasują kolumny sortowania i sprzężenia.
- Agregowanie danych zestawu wierszy według kolumn sortowania.
- Użycie zestawu wierszy jako tabeli źródłowej w klauzuli
FROM
zapytania, gdzie pasują kolumny sortowania i sprzężenia.
UNIQUE
Określa, że plik danych nie ma zduplikowanych wpisów.
Jeśli rzeczywiste wiersze w pliku danych nie są sortowane zgodnie z określoną kolejnością lub jeśli określono wskazówkę UNIQUE
, a klucze duplikatów są obecne, zwracany jest błąd.
Aliasy kolumn są wymagane w przypadku użycia ORDER
. Lista aliasów kolumn musi odwoływać się do tabeli pochodnej, która jest uzyskiwana przez klauzulę BULK
. Nazwy kolumn określone w klauzuli ORDER
odwołują się do tej listy aliasów kolumn. Nie można określić dużych typów wartości (varchar(max), nvarchar(max), varbinary(max)i xml) i dużych typów obiektów (tekst, ntext i obraz).
SINGLE_BLOB
Zwraca zawartość data_file jako jednokolumtowy zestaw wierszy typu varbinary(max).
Important
Zalecamy importowanie danych XML tylko przy użyciu opcji SINGLE_BLOB
, a nie SINGLE_CLOB
i SINGLE_NCLOB
, ponieważ tylko SINGLE_BLOB
obsługuje wszystkie konwersje kodowania systemu Windows.
SINGLE_CLOB
Odczytując data_file jako ASCII, zwraca zawartość jako pojedynczy wiersz, jednokolumny zestaw wierszy typu varchar(max), używając sortowania bieżącej bazy danych.
SINGLE_NCLOB
Odczytując data_file jako Unicode, zwraca zawartość jako pojedynczy wiersz, jednokolumny zestaw wierszy typu nvarchar(max), używając sortowania bieżącej bazy danych.
SELECT * FROM OPENROWSET(
BULK N'C:\Text1.txt',
SINGLE_NCLOB
) AS Document;
Opcje formatu pliku wejściowego BULK
CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | "code_page" }
Określa stronę kodów danych w pliku danych.
CODEPAGE
ma zastosowanie tylko wtedy, gdy dane zawierają znaki, varchar lub kolumny tekstowe z wartościami znaków większymi niż 127 lub mniejsze niż 32.
Important
CODEPAGE
nie jest obsługiwaną opcją w systemie Linux.
Note
Zalecamy określenie nazwy sortowania dla każdej kolumny w pliku formatu, z wyjątkiem sytuacji, gdy opcja 65001 ma mieć priorytet w specyfikacji sortowania/strony kodowej.
CODEPAGE value | Description |
---|---|
ACP |
Konwertuje kolumny typu danych char, varchar lub text ze strony kodowej ANSI/Microsoft Windows (ISO 1252) na stronę kodową programu SQL Server. |
OEM (ustawienie domyślne) |
Konwertuje kolumny typu danych char, varchar lub text ze strony kodowej systemu OEM na stronę kodów programu SQL Server. |
RAW |
Żadna konwersja nie występuje z jednej strony kodu do innej. Jest to najszybsza opcja. |
code_page |
Wskazuje stronę kodu źródłowego, na której są kodowane dane znaków w pliku danych; na przykład 850. Ważny Wersje przed programem SQL Server 2016 (13.x) nie obsługują strony kodowej 65001 (kodowanie UTF-8). |
FORMAT = { 'CSV' | "PARQUET" | "DELTA" }
Począwszy od programu SQL Server 2017 (14.x), ten argument określa plik wartości rozdzielonych przecinkami zgodny ze standardem RFC 4180 .
Począwszy od programu SQL Server 2022 (16.x), obsługiwane są zarówno formaty Parquet, jak i Delta.
SELECT *
FROM OPENROWSET(BULK N'D:\XChange\test-csv.csv',
FORMATFILE = N'D:\XChange\test-csv.fmt',
FIRSTROW=2,
FORMAT='CSV') AS cars;
FORMATFILE = 'format_file_path'
Określa pełną ścieżkę pliku formatu. Program SQL Server obsługuje dwa typy plików formatu: XML i inne niż XML.
Plik formatu jest wymagany do definiowania typów kolumn w zestawie wyników. Jedynym wyjątkiem jest określenie SINGLE_CLOB
, SINGLE_BLOB
lub SINGLE_NCLOB
; w tym przypadku plik formatu nie jest wymagany.
Aby uzyskać informacje o formatowaniu plików, zobacz Używanie pliku formatu do zbiorczego importowania danych (SQL Server).
Począwszy od programu SQL Server 2017 (14.x), format_file_path może znajdować się w usłudze Azure Blob Storage. Aby zapoznać się z przykładami, zobacz Przykłady zbiorczego dostępu do danych w usłudze Azure Blob Storage.
FIELDQUOTE = 'field_quote'
Począwszy od programu SQL Server 2017 (14.x), ten argument określa znak używany jako znak cudzysłowu w pliku CSV. Jeśli nie zostanie określony, znak cudzysłowu ("
) jest używany jako znak cudzysłowu zdefiniowany w standardzie RFC 4180 . Jako wartość tej opcji można określić tylko jeden znak.
Remarks
OPENROWSET
Może służyć do uzyskiwania dostępu do danych zdalnych ze źródeł danych OLE DB tylko wtedy, gdy opcja rejestru DisallowAdhocAccess jest jawnie ustawiona 0
dla określonego dostawcy, a opcja zaawansowana konfiguracji zapytań rozproszonych ad hoc jest włączona. Jeśli te opcje nie są ustawione, domyślne zachowanie nie zezwala na dostęp ad hoc.
Gdy uzyskujesz dostęp do zdalnych źródeł danych OLE DB, tożsamość logowania zaufanych połączeń nie jest automatycznie delegowana z serwera, na którym klient jest połączony z serwerem, do którego jest wykonywane zapytanie. Należy skonfigurować delegowanie uwierzytelniania.
Nazwy wykazu i schematu są wymagane, jeśli dostawca danych obsługuje wiele katalogów i schematów w określonym źródle danych. Wartości dla catalog
i schema
można pominąć, gdy dostawca danych ich nie obsługuje. Jeśli dostawca obsługuje tylko nazwy schematów, należy określić dwuczęściową nazwę formularza schema.object
. Jeśli dostawca obsługuje tylko nazwy wykazu, należy określić trzyczęściową nazwę formularza catalog.schema.object
. Aby uzyskać więcej informacji, zobacz Transact-SQL konwencje składni.
W przypadku zapytań przekazywanych korzystających z dostawcy OLE DB klienta natywnego programu SQL Server należy określić trzyczęściowe nazwy.
OPENROWSET
nie akceptuje zmiennych dla argumentów.
Każde wywołanie OPENDATASOURCE
, OPENQUERY
lub OPENROWSET
w klauzuli FROM
jest oceniane oddzielnie i niezależnie od dowolnego wywołania tych funkcji używanych jako element docelowy aktualizacji, nawet jeśli do dwóch wywołań są dostarczane identyczne argumenty. W szczególności warunki filtrowania lub sprzężenia zastosowane w wyniku jednego z tych wywołań nie mają wpływu na wyniki drugiego.
Użyj funkcji OPENROWSET z opcją BULK
Następujące ulepszenia Transact-SQL obsługują funkcję OPENROWSET(BULK...)
:
Klauzula
FROM
używana zSELECT
może wywoływaćOPENROWSET(BULK...)
zamiast nazwy tabeli z pełną funkcjonalnościąSELECT
.OPENROWSET
z opcjąBULK
wymaga nazwy korelacji, znanej również jako zmienna zakresu lub alias, w klauzuliFROM
. Można określić aliasy kolumn. Jeśli lista aliasów kolumn nie jest określona, plik formatu musi mieć nazwy kolumn. Określanie aliasów kolumn zastępuje nazwy kolumn w pliku formatu, na przykład:FROM OPENROWSET(BULK...) AS table_alias
FROM OPENROWSET(BULK...) AS table_alias(column_alias,...n)
Important
Nie można dodać
AS <table_alias>
spowoduje błąd: Msg 491, Level 16, State 1, Line 20 Nazwa korelacji musi być określona dla zbiorczego zestawu wierszy w klauzuli from.Instrukcja
SELECT...FROM OPENROWSET(BULK...)
wysyła zapytanie do danych w pliku bezpośrednio bez importowania danych do tabeli.SELECT...FROM OPENROWSET(BULK...)
instrukcje mogą również wyświetlać listę aliasów kolumn zbiorczych przy użyciu pliku formatu do określania nazw kolumn, a także typów danych.Używanie
OPENROWSET(BULK...)
jako tabeli źródłowej w instrukcjiINSERT
lubMERGE
zbiorczo importuje dane z pliku danych do tabeli programu SQL Server. Aby uzyskać więcej informacji, zobacz Use BULK INSERT or OPENROWSET(BULK...) to import data to SQL Server.Gdy opcja
OPENROWSET BULK
jest używana z instrukcjąINSERT
, klauzulaBULK
obsługuje wskazówki dotyczące tabeli. Oprócz zwykłych wskazówek tabeli, takich jakTABLOCK
, klauzulaBULK
może akceptować następujące wyspecjalizowane wskazówki tabeli:IGNORE_CONSTRAINTS
(ignoruje tylko ograniczeniaCHECK
iFOREIGN KEY
),IGNORE_TRIGGERS
,KEEPDEFAULTS
iKEEPIDENTITY
. Aby uzyskać więcej informacji, zobacz Wskazówki dotyczące tabel (Transact-SQL).Aby uzyskać informacje na temat używania instrukcji
INSERT...SELECT * FROM OPENROWSET(BULK...)
, zobacz zbiorcze importowanie i eksportowanie danych (SQL Server). Aby uzyskać informacje o tym, kiedy operacje wstawiania wierszy wykonywane przez importowanie zbiorcze są rejestrowane w dzienniku transakcji, zobacz Wymagania wstępne dotyczące minimalnego rejestrowania w importowaniu zbiorczym.
Note
W przypadku używania OPENROWSET
ważne jest, aby zrozumieć, jak program SQL Server obsługuje personifikację. Aby uzyskać informacje na temat zagadnień dotyczących zabezpieczeń, zobacz Use BULK INSERT or OPENROWSET(BULK...) to import data to SQL Server.
Zbiorcze importowanie danych SQLCHAR, SQLNCHAR lub SQLBINARY
OPENROWSET(BULK...)
zakłada, że jeśli nie określono, maksymalna długość SQLCHAR
, SQLNCHAR
lub SQLBINARY
danych nie przekracza 8000 bajtów. Jeśli importowane dane znajdują się w polu danych LOB zawierającym dowolną wartość varchar(max), nvarchar(max)lub obiekty varbinary(max ), które przekraczają 8000 bajtów, należy użyć pliku formatu XML, który definiuje maksymalną długość pola danych. Aby określić maksymalną długość, zmodyfikuj plik formatu i zadeklaruj atrybut MAX_LENGTH.
Note
Automatycznie wygenerowany plik formatu nie określa długości ani maksymalnej długości pola LOB. Można jednak edytować plik formatu i ręcznie określić długość lub maksymalną długość.
Zbiorcze eksportowanie lub importowanie dokumentów SQLXML
Aby zbiorczo wyeksportować lub zaimportować dane SQLXML, użyj jednego z następujących typów danych w pliku formatu.
Data type | Effect |
---|---|
SQLCHAR lub SQLVARYCHAR |
Dane są wysyłane na stronie kodu klienta lub na stronie kodowej implikowanej przez sortowanie. |
SQLNCHAR lub SQLNVARCHAR |
Dane są wysyłane jako Unicode. |
SQLBINARY lub SQLVARYBIN |
Dane są wysyłane bez żadnej konwersji. |
Permissions
OPENROWSET
w przypadku zewnętrznych źródeł danych wymagane są następujące uprawnienia:
ADMINISTER DATABASE BULK OPERATIONS
or
ADMINISTER BULK OPERATIONS
Poniższy przykład przyznaje ADMINISTEER DATABASE BULK OPERATIONS
podmiotowi zabezpieczeń.
GRANT ADMINISTER DATABASE BULK OPERATIONS TO [<principal_name>];
Jeśli docelowe konto magazynu jest prywatne, podmiot zabezpieczeń musi mieć również rolę Czytelnik danych obiektu blob usługi Storage (lub nowszą) przypisaną na poziomie kontenera lub konta magazynu.
Examples
Ta sekcja zawiera ogólne przykłady, aby zademonstrować sposób używania OPENROWSET BULK
składni.
A. Używanie funkcji OPENROWSET do zbiorczego wstawiania danych pliku do kolumny varbinary(max)
Dotyczy: Tylko program SQL Server.
Poniższy przykład tworzy małą tabelę do celów demonstracyjnych i wstawia dane plików z pliku o nazwie Text1.txt
znajdującej C:
się w katalogu głównym do kolumny varbinary(max).
CREATE TABLE myTable (
FileName NVARCHAR(60),
FileType NVARCHAR(60),
Document VARBINARY(MAX)
);
GO
INSERT INTO myTable (
FileName,
FileType,
Document
)
SELECT 'Text1.txt' AS FileName,
'.txt' AS FileType,
*
FROM OPENROWSET(
BULK N'C:\Text1.txt',
SINGLE_BLOB
) AS Document;
GO
B. Użyj dostawcy ZBIORCZEgo OPENROWSET z plikiem formatu, aby pobrać wiersze z pliku tekstowego
Dotyczy: Tylko program SQL Server.
W poniższym przykładzie użyto pliku formatu do pobrania wierszy z pliku tekstowego rozdzielanego tabulatorami, values.txt
zawierającego następujące dane:
1 Data Item 1
2 Data Item 2
3 Data Item 3
Plik formatu values.fmt
opisuje kolumny w values.txt
:
9.0
2
1 SQLCHAR 0 10 "\t" 1 ID SQL_Latin1_General_Cp437_BIN
2 SQLCHAR 0 40 "\r\n" 2 Description SQL_Latin1_General_Cp437_BIN
To zapytanie pobiera te dane:
SELECT a.* FROM OPENROWSET(
BULK 'C:\test\values.txt',
FORMATFILE = 'C:\test\values.fmt'
) AS a;
C. Określanie pliku formatu i strony kodowej
Dotyczy: Tylko program SQL Server.
W poniższym przykładzie pokazano, jak używać jednocześnie opcji formatowania pliku i strony kodu.
INSERT INTO MyTable
SELECT a.* FROM OPENROWSET (
BULK N'D:\data.csv',
FORMATFILE = 'D:\format_no_collation.txt',
CODEPAGE = '65001'
) AS a;
D. Uzyskiwanie dostępu do danych z pliku CSV przy użyciu pliku formatu
Dotyczy: SQL Server 2017 (14.x) i nowsze wersje.
SELECT * FROM OPENROWSET(
BULK N'D:\XChange\test-csv.csv',
FORMATFILE = N'D:\XChange\test-csv.fmt',
FIRSTROW = 2,
FORMAT = 'CSV'
) AS cars;
E. Uzyskiwanie dostępu do danych z pliku CSV bez pliku formatu
Dotyczy: Tylko program SQL Server.
SELECT * FROM OPENROWSET(
BULK 'C:\Program Files\Microsoft SQL Server\MSSQL14.CTP1_1\MSSQL\DATA\inv-2017-01-19.csv',
SINGLE_CLOB
) AS DATA;
SELECT *
FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Access Text Driver (*.txt, *.csv)}',
'SELECT * FROM E:\Tlog\TerritoryData.csv'
);
Important
Sterownik ODBC powinien być 64-bitowy. Otwórz kartę Sterowniki w aplikacji Połącz ze źródłem danych ODBC (Kreator importu i eksportu programu SQL Server) w systemie Windows, aby to sprawdzić. Istnieje 32-bitowa Microsoft Text Driver (*.txt, *.csv)
, która nie będzie działać z 64-bitową wersją sqlservr.exe
.
F. Uzyskiwanie dostępu do danych z pliku przechowywanego w usłudze Azure Blob Storage
Dotyczy: SQL Server 2017 (14.x) i nowsze wersje.
W programie SQL Server 2017 (14.x) i nowszych wersjach w poniższym przykładzie użyto zewnętrznego źródła danych wskazującego kontener na koncie usługi Azure Storage i poświadczenie o zakresie bazy danych utworzone na potrzeby sygnatury dostępu współdzielonego.
SELECT * FROM OPENROWSET(
BULK 'inv-2017-01-19.csv',
DATA_SOURCE = 'MyAzureInvoices',
SINGLE_CLOB
) AS DataFile;
Aby uzyskać pełne OPENROWSET
przykłady, w tym konfigurowanie poświadczeń i zewnętrznego źródła danych, zobacz Przykłady zbiorczego dostępu do danych w usłudze Azure Blob Storage.
G. Importowanie do tabeli z pliku przechowywanego w usłudze Azure Blob Storage
W poniższym przykładzie pokazano, jak za pomocą polecenia OPENROWSET
załadować dane z pliku CSV w lokalizacji magazynu obiektów blob platformy Azure, na której został utworzony klucz SYGNATURY dostępu współdzielonego. Lokalizacja usługi Azure Blob Storage jest skonfigurowana jako zewnętrzne źródło danych. Wymaga to poświadczenia o zakresie bazy danych przy użyciu sygnatury dostępu współdzielonego szyfrowanej przy użyciu klucza głównego w bazie danych użytkownika.
-- Optional: a MASTER KEY is not required if a DATABASE SCOPED CREDENTIAL is not required because the blob is configured for public (anonymous) access!
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO
-- Optional: a DATABASE SCOPED CREDENTIAL is not required because the blob is configured for public (anonymous) access!
CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=2016-12-29T16:55:34Z***************';
-- Make sure that you don't have a leading ? in the SAS token, and that you
-- have at least read permission on the object that should be loaded srt=o&sp=r,
-- and that expiration period is valid (all dates are in UTC time)
CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://****************.blob.core.windows.net/curriculum',
-- CREDENTIAL is not required if a blob is configured for public (anonymous) access!
CREDENTIAL = MyAzureBlobStorageCredential
);
INSERT INTO achievements
WITH (TABLOCK) (
id,
description
)
SELECT * FROM OPENROWSET(
BULK 'csv/achievements.csv',
DATA_SOURCE = 'MyAzureBlobStorage',
FORMAT = 'CSV',
FORMATFILE = 'csv/achievements-c.xml',
FORMATFILE_DATA_SOURCE = 'MyAzureBlobStorage'
) AS DataFile;
H. Używanie tożsamości zarządzanej dla źródła zewnętrznego
Dotyczy: Azure SQL Managed Instance i Azure SQL Database
Poniższy przykład tworzy poświadczenia przy użyciu tożsamości zarządzanej, tworzy źródło zewnętrzne, a następnie ładuje dane z woluminu CSV hostowanego w źródle zewnętrznym.
Najpierw utwórz poświadczenie i określ magazyn obiektów blob jako źródło zewnętrzne:
CREATE DATABASE SCOPED CREDENTIAL sampletestcred
WITH IDENTITY = 'MANAGED IDENTITY';
CREATE EXTERNAL DATA SOURCE SampleSource
WITH (
LOCATION = 'abs://****************.blob.core.windows.net/curriculum',
CREDENTIAL = sampletestcred
);
Następnie załaduj dane z pliku CSV hostowanego w magazynie obiektów blob:
SELECT * FROM OPENROWSET(
BULK 'Test - Copy.csv',
DATA_SOURCE = 'SampleSource',
SINGLE_CLOB
) as test;
I. Używanie zestawu OPENROWSET do uzyskiwania dostępu do kilku plików Parquet przy użyciu magazynu obiektów zgodnego z protokołem S3
Dotyczy: SQL Server 2022 (16.x) i nowszych wersjach.
W poniższym przykładzie użyto dostępu do kilku plików Parquet z innej lokalizacji, wszystkie przechowywane w magazynie obiektów zgodnym z usługą S3:
CREATE DATABASE SCOPED CREDENTIAL s3_dsc
WITH IDENTITY = 'S3 Access Key',
SECRET = 'contosoadmin:contosopwd';
GO
CREATE EXTERNAL DATA SOURCE s3_eds
WITH
(
LOCATION = 's3://10.199.40.235:9000/movies',
CREDENTIAL = s3_dsc
);
GO
SELECT * FROM OPENROWSET(
BULK (
'/decades/1950s/*.parquet',
'/decades/1960s/*.parquet',
'/decades/1970s/*.parquet'
),
FORMAT = 'PARQUET',
DATA_SOURCE = 's3_eds'
) AS data;
J. Uzyskiwanie dostępu do kilku tabel delty z usługi Azure Data Lake Gen2 przy użyciu zestawu OPENROWSET
Dotyczy: SQL Server 2022 (16.x) i nowszych wersjach.
W tym przykładzie kontener tabeli danych nosi nazwę Contoso
i znajduje się na koncie magazynu usługi Azure Data Lake Gen2.
CREATE DATABASE SCOPED CREDENTIAL delta_storage_dsc
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<SAS Token>';
CREATE EXTERNAL DATA SOURCE Delta_ED
WITH (
LOCATION = 'adls://<container>@<storage_account>.dfs.core.windows.net',
CREDENTIAL = delta_storage_dsc
);
SELECT *
FROM OPENROWSET(
BULK '/Contoso',
FORMAT = 'DELTA',
DATA_SOURCE = 'Delta_ED'
) AS result;
K. Używanie zestawu danych OPENROWSET do wykonywania zapytań dotyczących publicznego anonimowego zestawu danych
W poniższym przykładzie użyto publicznie dostępnej publicznie żółtej podróży taksówką rekordy otwierania zestawu danych.
Najpierw utwórz źródło danych:
CREATE EXTERNAL DATA SOURCE NYCTaxiExternalDataSource
WITH (LOCATION = 'abs://nyctlc@azureopendatastorage.blob.core.windows.net');
Wykonaj zapytanie o wszystkie pliki z rozszerzeniem parquet w folderach pasujących do wzorca nazwy:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet'
) AS filerows;
More examples
Aby uzyskać więcej przykładów pokazujących korzystanie z INSERT...SELECT * FROM OPENROWSET(BULK...)
, zobacz następujące artykuły:
- Przykłady zbiorczego importowania i eksportowania dokumentów XML (SQL Server)
- Zachowaj wartości tożsamości podczas zbiorczego importowania danych (SQL Server)
- Zachowaj wartości null lub wartości domyślne podczas importowania zbiorczego (SQL Server)
- Używanie pliku formatu do zbiorczego importowania danych (SQL Server)
- Importowanie lub eksportowanie danych (SQL Server) przy użyciu formatu znaków
- Użyj pliku formatu, aby pominąć kolumnę tabeli (SQL Server)
- Użyj pliku formatu, aby pominąć pole danych (SQL Server)
- Użyj pliku formatu do mapowania kolumn tabeli na pola pliku danych (SQL Server)
- Wykonywanie zapytań o źródła danych przy użyciu zestawu OPENROWSET w usłudze Azure SQL Managed Instances
Related content
- DELETE (Transact-SQL)
- Klauzula FROM oraz JOIN, APPLY, PIVOT (Transact-SQL)
- zbiorcze importowanie i eksportowanie danych (SQL Server)
- INSERT (Transact-SQL)
- OPENDATASOURCE (Transact-SQL)
- OPENQUERY (Transact-SQL)
- SELECT (Transact-SQL)
- sp_serveroption (Transact-SQL)
- UPDATE (Transact-SQL)
- WHERE (Transact-SQL)
Dotyczy:Punkt końcowy analizy SQL i magazyn w usłudze Microsoft Fabric
Funkcja OPENROWSET
języka T-SQL odczytuje zawartość pliku w usłudze Azure Data Lake Storage. Możesz odczytywać formaty plików tekstowych/CSV, Parquet lub JSON, które są przechowywane w usłudze Azure Data Lake lub Azure Blob Storage.
Funkcja OPENROWSET
odczytuje dane z pliku i zwraca je jako zestaw wierszy. Funkcję OPENROWSET
można odwołać w klauzuli FROM
zapytania tak, jakby była to nazwa tabeli.
Ten artykuł dotyczy tylko usługi Microsoft Fabric Warehouse. Istnieją różnice funkcjonalne między funkcją OPENROWSET w usłudze Fabric Warehouse i elementami punktu końcowego analizy SQL.
Szczegóły i linki do podobnych przykładów na innych platformach:
- W przypadku składni w innych usługach wybierz wersję na liście rozwijanej wersja.
Syntax
SELECT <columns>
FROM OPENROWSET(
BULK 'https://<storage>.blob.core.windows.net/path/folder1=*/folder2=*/<filename>'
[, FORMAT = ('PARQUET' | 'CSV' | 'JSONL') ]
-- execution options
[, ROWS_PER_BATCH=number_of_rows]
-- Text/CSV encoding options
[, DATAFILETYPE = {'char' | 'widechar' } ]
[, CODEPAGE = {'ACP' | 'OEM' | 'raw' | '<code_page>' } ]
-- Text/CSV formatting options
[, ROWTERMINATOR = 'row_terminator' ]
[, FIELDTERMINATOR = 'field_terminator' ]
[, FIELDQUOTE = 'string_delimiter' ]
[ , PARSER_VERSION = 'parser_version' ]
[, ESCAPECHAR = 'escape_char' ]
[, HEADER_ROW = [true|false] ]
[, FIRSTROW = first_row ]
[, LASTROW = last_row ]
-- execution options
[, ROWS_PER_BATCH=number_of_rows]
)
[
WITH ( ( <column_name> <sql_datatype> [ '<column_path>' | <column_ordinal> ] )+ )
]
[ AS <alias> ]
Arguments
BULK 'data_file'
Identyfikator URI plików danych, których dane mają być odczytywane i zwracane jako zestaw wierszy. Identyfikator URI może odwoływać się do usługi Azure Data Lake Storage lub Azure Blob Storage.
Identyfikator URI może zawierać *
znak zgodny z dowolną sekwencją znaków, co pozwala OPENROWSET
dopasować wzorzec do identyfikatora URI. Ponadto może kończyć /**
się w celu włączenia cyklicznego przechodzenia przez wszystkie podfoldery.
Dane można odczytywać OPENROWSET(BULK)
bezpośrednio z plików przechowywanych w usłudze Fabric OneLake, w szczególności z folderu Files w usłudze Fabric Lakehouse. Eliminuje to konieczność użycia zewnętrznych kont przejściowych (takich jak USŁUGA ADLS Gen2 lub Blob Storage) i umożliwia zarządzanie obszarem roboczym, natywne pozyskiwanie w modelu SaaS przy użyciu uprawnień sieci szkieletowej. Ta funkcja obsługuje:
- Odczytywanie z
Files
folderów w usłudze Lakehouse - Obciążenia między obszarami roboczymi w ramach tej samej dzierżawy
- Natywne wymuszanie tożsamości przy użyciu identyfikatora Entra firmy Microsoft
Note
Magazyn OneLake sieci szkieletowej jest w wersji zapoznawczej. Zapoznaj się z ograniczeniami , które mają zastosowanie zarówno do , jak COPY INTO
i OPENROWSET(BULK)
.
Obsługiwane formaty identyfikatora URI to:
https://{storage}.blob.core.windows.net/[container}/{file path}
https://{storage}.dfs.core.windows.net/[container}/{file path}
abfss://[container}@{storage}.dfs.core.windows.net/{file path}
-
https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/{file path}
— obecnie w wersji zapoznawczej
For example:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/*.parquet'
);
Opcje formatu pliku wejściowego BULK
FORMAT = { 'CSV' | "PARQUET" | "JSONL" }
Określa format przywoływnego pliku. Jeśli rozszerzenie pliku w ścieżce kończy się ciągiem .csv
, , .tsv
.parquet
.parq
.jsonl
.ldjson
lub .ndjson
, FORMAT
opcja nie musi być określona.
Note
Funkcja OPENROWSET
może odczytywać tylko nowy format JSON rozdzielany wierszami . Ta funkcja jest obecnie dostępna w wersji zapoznawczej.
Znak nowego wiersza musi być używany jako separator między dokumentami JSON i nie można go umieścić w środku dokumentu JSON.
For example:
SELECT *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet'
);
Jeśli ścieżka pliku nie kończy się jednym z tych rozszerzeń, musisz określić element FORMAT
, na przykład:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'abfss://nyctlc@azureopendatastorage.blob.core.windows.net/yellow/**',
FORMAT='PARQUET'
)
ROWS_PER_BATCH = rows_per_batch
Określa przybliżoną liczbę wierszy danych w pliku danych. Ta wartość jest oszacowaniem i powinna być przybliżeniem (w obrębie jednej wielkości) rzeczywistej liczby wierszy. Domyślnie ROWS_PER_BATCH
jest szacowana na podstawie właściwości pliku (liczba plików, rozmiary plików, rozmiar zwracanych typów danych). Określanie ROWS_PER_BATCH = 0
jest takie samo jak pominięcie ROWS_PER_BATCH
.
For example:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'abfss://public@pandemicdatalake.dfs.core.windows.net/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet',
ROWS_PER_BATCH = 100000
);
Opcje kodowania tekstu/CSV
DATAFILETYPE = { 'char' | "widechar" }
Określa, że OPENROWSET(BULK)
powinien odczytywać zawartość pliku z jednym bajtem (ASCII, UTF8) lub wiele bajtów (UTF16).
DATAFILETYPE value | Wszystkie dane reprezentowane w: |
---|---|
char (default) | Character format. Aby uzyskać więcej informacji, zobacz Używanie formatu znaków do importowania lub eksportowania danych. |
widechar | Unicode characters. Aby uzyskać więcej informacji, zobacz Używanie formatu znaków Unicode do importowania lub eksportowania danych. |
CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | "code_page" }
Określa stronę kodów danych w pliku danych.
CODEPAGE
ma zastosowanie tylko wtedy, gdy dane zawierają znaki, varchar lub kolumny tekstowe z wartościami znaków większymi niż 127 lub mniejsze niż 32.
CODEPAGE value | Description |
---|---|
ACP |
Konwertuje kolumny typu danych char, varchar lub text ze strony kodowej ANSI/Microsoft Windows (ISO 1252) na stronę kodową programu SQL Server. |
OEM (ustawienie domyślne) |
Konwertuje kolumny typu danych char, varchar lub text ze strony kodowej systemu OEM na stronę kodów programu SQL Server. |
RAW |
Żadna konwersja nie występuje z jednej strony kodu do innej. Jest to najszybsza opcja. |
code_page |
Wskazuje stronę kodu źródłowego, na której są kodowane dane znaków w pliku danych; na przykład 850. Ważny Wersje przed programem SQL Server 2016 (13.x) nie obsługują strony kodowej 65001 (kodowanie UTF-8). |
Opcje formatowania tekstu/CSV
ROWTERMINATOR = 'row_terminator'
Określa terminator wierszy, który ma być używany dla plików danych char i widechar . Domyślny terminator wierszy to \r\n
(znak nowego wiersza). Aby uzyskać więcej informacji, zobacz Określanie terminatorów pól i wierszy.
FIELDTERMINATOR = 'field_terminator'
Określa terminator pola, który ma być używany dla plików danych char i widechar . Domyślnym terminatorem pola jest ,
(przecinek). Aby uzyskać więcej informacji, zobacz Określanie pól i terminatorów wierszy.
Na przykład aby odczytać dane rozdzielane tabulatorami z pliku:
SELECT *
FROM OPENROWSET(
BULK '{file path}',
ROWTERMINATOR = '\t'
);
FIELDQUOTE = 'field_quote'
Określa znak, który jest używany jako znak cudzysłowu w pliku CSV. Jeśli nie zostanie określony, znak cudzysłowu ("
) jest używany jako znak cudzysłowu zdefiniowany w standardzie RFC 4180 . Znak FIELDTERMINATOR
(na przykład przecinek) można umieścić w cudzysłowie pól i będzie traktowany jako zwykły znak w komórce opakowanej znakami FIELDQUOTE
.
Na przykład użyj FIELDQUOTE = '"'
następującego zestawu danych wartości rozdzielanej przecinkami (CSV) z przecinkami w polu adresu. Wartości pola adresu będą zachowywane jako pojedyncza wartość, a nie podzielone na wiele wartości według przecinków w znakach "
(cudzysłowu).
SELECT *
FROM OPENROWSET(
BULK '{file path}',
FIELDQUOTE = '"',
FIELDTERMINATOR = ','
);
Empire State Building,40.748817,-73.985428,"20 W 34th St, New York, NY 10118","\icons\sol.png"
Statue of Liberty,40.689247,-74.044502,"Liberty Island, New York, NY 10004","\icons\sol.png"
PARSER_VERSION = 'parser_version'
Określa wersję analizatora, która ma być używana podczas odczytywania plików. Obecnie obsługiwane wersje analizatora CSV to 1.0 i 2.0:
- PARSER_VERSION = '1.0'
- PARSER_VERSION = '2.0'
Analizator CSV w wersji 1.0 jest domyślny i rozbudowany. Wersja 2.0 została utworzona pod kątem wydajności i nie obsługuje wszystkich opcji i kodowań.
Specyfikator analizatora CSV w wersji 1.0:
- Następujące opcje nie są obsługiwane: HEADER_ROW.
- Domyślne terminatory to
\r\n
,\n
i\r
. - Jeśli określisz
\n
(nowy wiersz) jako terminator wiersza, zostanie on automatycznie poprzedzony znakiem\r
(powrotu karetki), co powoduje zakończenie wiersza .\r\n
Specyfikator analizatora CSV w wersji 2.0:
- Nie wszystkie typy danych są obsługiwane.
- Maksymalna długość kolumny znaków wynosi 8000.
- Maksymalny limit rozmiaru wiersza wynosi 8 MB.
- Następujące opcje nie są obsługiwane:
DATA_COMPRESSION
. - Pusty ciąg zapisany jako ("") jest interpretowany jako pusty ciąg.
- Opcja DATEFORMAT SET nie jest honorowana.
- Obsługiwany format dla typu danych daty :
YYYY-MM-DD
- Obsługiwany format dla typu danych czasu :
HH:MM:SS[.fractional seconds]
- Obsługiwany format dla typu danych datetime2 :
YYYY-MM-DD HH:MM:SS[.fractional seconds]
- Domyślne terminatory to
\r\n
i\n
.
ESCAPE_CHAR = 'char'
Określa znak w pliku, który jest używany jako znak ucieczki dla siebie i wszystkich wartości ograniczników w pliku. Jeśli po znaku ucieczki występuje wartość inna niż sam znak ucieczki lub którykolwiek z wartości ograniczników, znak ucieczki jest pomijany podczas odczytywania wartości.
Parametr ESCAPECHAR
zostanie zastosowany niezależnie od tego, czy FIELDQUOTE
parametr jest włączony, czy nie jest włączony. Nie będzie używany do omijania znaku cudzysłowu. Znak cudzysłowu musi być zastąpiony innym znakiem cudzysłowu. Znak cudzysłów może pojawić się w wartości kolumny tylko wtedy, gdy wartość jest hermetyzowana znakami cudzysłów.
W poniższym przykładzie przecinek (,
) i ukośnik odwrotny (\
) są ucieczki i reprezentowane jako \,
i :\\
SELECT *
FROM OPENROWSET(
BULK '{file path}',
ESCAPECHAR = '\'
);
Place,Address,Icon
Empire State Building,20 W 34th St\, New York\, NY 10118,\\icons\\sol.png
Statue of Liberty,Liberty Island\, New York\, NY 10004,\\icons\\sol.png
HEADER_ROW = { TRUE | FALSE }
Określa, czy plik CSV zawiera wiersz nagłówka. Wartość domyślna to FALSE
. Obsługiwane w programie PARSER_VERSION='2.0'
. Jeśli TRUE
nazwy kolumn będą odczytywane z pierwszego wiersza zgodnie z argumentem FIRSTROW
. Jeśli TRUE
i schemat jest określony przy użyciu , WITH
powiązanie nazw kolumn będzie wykonywane według nazwy kolumny, a nie pozycji porządkowych.
Określa, czy plik CSV zawiera wiersz nagłówka, który nie powinien być zwracany z innymi wierszami danych. Wartość domyślna to FALSE
. Obsługiwane w programie PARSER_VERSION='2.0'
. Jeśli TRUE
nazwy kolumn będą odczytywane z pierwszego wiersza zgodnie z argumentem FIRSTROW
. Jeśli TRUE
i schemat jest określony przy użyciu , WITH
powiązanie nazw kolumn będzie wykonywane według nazwy kolumny, a nie pozycji porządkowych.
SELECT *
FROM OPENROWSET(
BULK '{file path}',
HEADER_ROW = TRUE
);
Place,Latitude,Longitude,Address,Area,State,Zipcode
Empire State Building,40.748817,-73.985428,20 W 34th St,New York,NY,10118
Statue of Liberty,40.689247,-74.044502,Liberty Island,New York,NY,10004
FIRSTROW = first_row
Określa liczbę pierwszego wiersza do załadowania. Wartość domyślna to 1. Wskazuje to pierwszy wiersz w określonym pliku danych. Liczby wierszy są określane przez zliczanie terminatorów wierszy.
FIRSTROW
jest oparty na 1.
LASTROW = last_row
Określa liczbę ostatniego wiersza do załadowania. Wartość domyślna to 0. Wskazuje to ostatni wiersz w określonym pliku danych.
Execution options
ROWS_PER_BATCH = rows_per_batch
Określa przybliżoną liczbę wierszy danych w pliku danych. Ta wartość powinna być taka sama jak rzeczywista liczba wierszy.
Domyślnie ROWS_PER_BATCH
jest szacowana na podstawie właściwości pliku (liczba plików, rozmiary plików, rozmiar zwracanych typów danych). Określanie ROWS_PER_BATCH = 0
jest takie samo jak pominięcie ROWS_PER_BATCH
.
WITH Schema
Schemat WITH
określa kolumny definiujące zestaw wyników funkcji OPENROWSET
. Zawiera definicje kolumn dla każdej kolumny, która zostanie zwrócona w wyniku i przedstawia reguły mapowania, które wiążą kolumny pliku bazowego z kolumnami w zestawie wyników.
W poniższym przykładzie:
- Kolumna
country_region
ma typ varchar(50) i odwołuje się do kolumny bazowej o tej samej nazwie - Kolumna
date
odwołuje się do kolumny CSV/Parquet lub właściwości JSONL o innej nazwie fizycznej - Kolumna
cases
odwołuje się do trzeciej kolumny w pliku - Kolumna
fatal_cases
odwołuje się do zagnieżdżonej właściwości Parquet lub obiektu podrzędnego JSONL
SELECT *
FROM OPENROWSET(<...>)
WITH (
country_region varchar(50), --> country_region column has varchar(50) type and referencing the underlying column with the same name
[date] DATE '$.updated', --> date is referencing a CSV/Parquet column or JSONL property with a different physical name
cases INT 3, --> cases is referencing third column in the file
fatal_cases INT '$.statistics.deaths' --> fatal_cases is referencing a nested Parquet property or JSONL sub-object
);
<column_name>
Nazwa kolumny, która zostanie zwrócona w zestawie wierszy wyników. Dane tej kolumny są odczytywane z podstawowej kolumny pliku o tej samej nazwie, chyba że zostaną zastąpione przez <column_path>
lub <column_ordinal>
. Nazwa kolumny musi być zgodna z regułami dotyczącymi identyfikatorów nazw kolumn.
<column_type>
Typ języka T-SQL kolumny w zestawie wyników. Wartości z pliku bazowego są konwertowane na ten typ, gdy OPENROWSET
zwraca wyniki. Aby uzyskać więcej informacji, zobacz Typy danych w magazynie sieci szkieletowej.
<column_path>
Ścieżka rozdzielona kropką (na przykład $.description.location.lat
) używana do odwołowania się do zagnieżdżonych pól w typach złożonych, takich jak Parquet.
<column_ordinal>
Liczba reprezentująca fizyczny indeks kolumny, która zostanie zamapowana na kolumnę w klauzuli WITH
.
Remarks
Obsługiwane funkcje zostały podsumowane w tabeli:
Feature | Supported | Not available |
---|---|---|
File formats | Parquet, CSV, JSONL (wersja zapoznawcza) | Delta, Azure Cosmos DB, JSON, relacyjne bazy danych |
Authentication | EntraID/SPN passthrough, public storage | Sygnatura dostępu współdzielonego/SAK, nazwa SPN, dostęp zarządzany |
Storage | Azure Blob Storage, Azure Data Lake Storage, Fabric OneLake (wersja zapoznawcza) | |
Options | Tylko pełny/bezwzględny identyfikator URI w OPENROWSET |
Ścieżka względnego identyfikatora URI w elemecie OPENROWSET , DATA_SOURCE |
Partitioning | Możesz użyć funkcji filepath() w zapytaniu. |
Examples
A. Odczytywanie pliku parquet z usługi Azure Blob Storage
W poniższym przykładzie przedstawiono sposób odczytywania 100 wierszy z pliku Parquet:
SELECT TOP 100 *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet'
);
B. Odczytywanie niestandardowego pliku CSV
W poniższym przykładzie widać, jak odczytywać wiersze z pliku CSV z wierszem nagłówka i jawnie określonymi znakami terminatora oddzielającym wiersze i pola:
SELECT *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv',
HEADER_ROW = TRUE,
ROW_TERMINATOR = '\n',
FIELD_TERMINATOR = ',');
C. Określanie schematu kolumny pliku podczas odczytywania pliku
W poniższym przykładzie pokazano, jak jawnie określić schemat wiersza, który zostanie zwrócony w wyniku OPENROWSET
funkcji:
SELECT *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet')
WITH (
updated DATE
,confirmed INT
,deaths INT
,iso2 VARCHAR(8000)
,iso3 VARCHAR(8000)
);
D. Odczytywanie partycjonowanych zestawów danych
W poniższym przykładzie można zobaczyć, jak używać funkcji filepath()
do odczytywania części identyfikatora URI ze dopasowanej ścieżki pliku:
SELECT TOP 10
files.filepath(2) AS area
, files.*
FROM OPENROWSET(
BULK 'https://synapseaisolutionsa.blob.core.windows.net/public/NYC_Property_Sales_Dataset/*_*.csv',
HEADER_ROW = TRUE)
AS files
WHERE files.filepath(1) = '2009';
E. Określanie schematu kolumny pliku podczas odczytywania pliku JSONL
W poniższym przykładzie można zobaczyć, jak jawnie określić schemat wiersza, który zostanie zwrócony w wyniku OPENROWSET
funkcji:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.dfs.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.jsonl')
WITH (
country_region varchar(50),
date DATE '$.updated',
cases INT '$.confirmed',
fatal_cases INT '$.deaths'
);
Jeśli nazwa kolumny nie jest zgodna z fizyczną nazwą kolumny we właściwościach, jeśli plik JSONL, możesz określić nazwę fizyczną w ścieżce JSON po definicji typu. Można użyć wielu właściwości. Aby na przykład $.location.latitude
odwołać się do zagnieżdżonych właściwości w typach złożonych parquet lub obiektach podrzędnych JSON.