sp_data_source_objects (T-SQL)
Berlaku untuk: SQL Server 2019 (15.x)
Mengembalikan daftar objek tabel yang tersedia untuk divirtualisasi.
Sintaks
sp_data_source_objects
[ @data_source = ] 'data_source'
[ , [ @object_root_name = ] 'object_root_name' ]
[ , [ @max_search_depth = ] max_search_depth ]
[ , [ @search_options = ] 'search_options' ]
[ ; ]
Argumen
[ @data_source = ] 'data_source'
Nama sumber data eksternal untuk mendapatkan metadata. @data_source adalah sysname
.
[ @object_root_name = ] 'object_root_name'
Parameter ini adalah akar nama objek yang akan dicari. @object_root_name adalah nvarchar(max)
, dengan default .NULL
Panggilan ini hanya mengembalikan objek eksternal yang dimulai dengan nilai yang ditetapkan untuk @object_root_name.
Jika sumber data ODBC tersambung ke sistem manajemen database relasional (RDBMS) yang menggunakan nama tiga bagian, @object_root_name tidak dapat berisi nama database parsial. Dalam kasus ini, parameter @object_root_name harus berisi ketiga bagian, dengan bagian ketiga menjadi nama objek untuk dicari.
Perhatian
Karena perbedaan antara platform data eksternal, beberapa platform tidak mengembalikan hasil apa pun jika nilai NULL
default disediakan. Beberapa memperlakukan NULL
sebagai kurangnya filter. Misalnya, Oracle RDMBS tidak akan mengembalikan hasil jika NULL
disediakan untuk @object_root_name.
[ @max_search_depth = ] max_search_depth
Nilai ini menentukan kedalaman maksimum (dalam bagian) melewati @object_root_name yang ingin kami cari. @max_search_depth adalah int dengan default 1
.
Misalnya, @max_search_depth 1, dengan @object_root_name yang merupakan nama database SQL Server, akan mengembalikan skema yang terkandung di dalam database.
@max_search_depth NULL
mengembalikan informasi tentang @object_root_name jika ada dan tidak kosong, dalam kasus katalog atau skema.
[ @search_options = ] 'search_options'
Parameternya search_options
adalah nvarchar(max) dengan default NULL
.
Parameter ini tidak digunakan tetapi mungkin diimplementasikan di masa mendatang.
Tataan hasil
Nama kolom | Jenis data | Deskripsi |
---|---|---|
OBJECT_TYPE |
nvarchar(200) | Jenis objek (Contoh: TABEL atau DATABASE). |
OBJECT_NAME |
nvarchar(maks) | Nama objek yang sepenuhnya memenuhi syarat. Lolos menggunakan karakter kutipan khusus backend. |
OBJECT_LEAF_NAME |
nvarchar(maks) | Nama objek yang tidak memenuhi syarat. |
TABLE_LOCATION |
nvarchar(maks) | String lokasi tabel valid yang dapat digunakan untuk pernyataan CREATE EXTERNAL TABLE. Apakah NULL jika tidak berlaku. |
Izin
Memerlukan izin UBAH SUMBER DATA EKSTERNAL APA PUN.
Keterangan
Instans SQL Server harus menginstal fitur PolyBase . Prosedur ini pertama kali diperkenalkan di SQL Server 2019 CU5.
Prosedur tersimpan ini mendukung konektor untuk:
- SQL Server
- Oracle
- Teradata
- MongoDB
- Azure Cosmos DB
Prosedur tersimpan tidak mendukung sumber data ODBC generik atau konektor Hadoop.
Gagasan kosong vs. tidak kosong berkaitan dengan perilaku driver ODBC dan fungsi SQLTables . Tidak kosong menunjukkan objek berisi tabel, bukan baris. Misalnya, skema kosong tidak berisi tabel di SQL Server. Database kosong berisi tanpa tabel di dalam Teradata.
Jenis objek ditentukan oleh driver ODBC sumber data eksternal. Setiap sumber data eksternal menentukan apa yang memenuhi syarat sebagai tabel. Ini dapat mencakup objek database seperti fungsi di Teradata, atau sinonim di Oracle. PolyBase tidak dapat tersambung ke beberapa objek ODBC sebagai tabel eksternal dan karenanya tidak akan memiliki nilai dalam TABLE_LOCATION
kolom. Meskipun tidak adanya nilai dalam TABLE_LOCATION
, kehadiran salah satu objek ODBC ini mungkin membuat database atau skema tidak kosong.
Gunakan sp_data_source_objects
dan sp_data_source_table_columns untuk menemukan objek eksternal. Prosedur tersimpan sistem ini mengembalikan skema tabel yang tersedia untuk divirtualisasi. Azure Data Studio menggunakan dua prosedur tersimpan ini untuk mendukung virtualisasi data. Gunakan sp_data_source_table_columns untuk menemukan skema tabel eksternal yang diwakili dalam jenis data SQL Server.
Tabel eksternal ke koleksi MongoDB yang berisi array
Untuk membuat tabel eksternal ke koleksi MongoDB yang berisi array, Anda harus menggunakan ekstensi Virtualisasi Data untuk Azure Data Studio untuk menghasilkan pernyataan CREATE EXTERNAL TABLE, berdasarkan skema yang terdeteksi oleh PolyBase ODBC Driver for MongoDB. Tindakan meratakan secara otomatis dilakukan oleh driver. Atau, Anda dapat menggunakan sp_data_source_objects untuk mendeteksi skema koleksi (kolom) dan membuat tabel eksternal secara manual. Prosedur sp_data_source_table_columns
tersimpan juga secara otomatis melakukan meratakan melalui Driver ODBC PolyBase untuk driver MongoDB. Ekstensi Virtualisasi Data untuk Azure Data Studio dan sp_data_source_table_columns
gunakan prosedur tersimpan internal yang sama untuk mengkueri skema eksternal.
Keterangan khusus jenis sumber data
Teradata
Tampilan sistem Teradata tidak menggunakan keamanan tingkat baris (RLS), sehingga pengguna dapat melihat keberadaan tabel yang tidak dapat mereka kueri.
MongoDB
Beberapa versi MongoDB sebelumnya membatasi kemampuan untuk mencantumkan semua database ke pengguna seperti admin. Pengguna tanpa izin ini mungkin mendapatkan kesalahan autentikasi yang mencoba menjalankan prosedur ini dengan @object_root_name null.
Oracle
Sinonim Oracle tidak didukung untuk penggunaan dengan PolyBase.
Contoh
SQL Server
Contoh berikut mengembalikan semua database, skemata, dan tabel/tampilan
DECLARE @data_source SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name NVARCHAR(MAX) = NULL;
DECLARE @max_search_depth INT = 3;
EXEC sp_data_source_objects @data_source,
@object_root_name,
@max_search_depth;
OBJECT_TYPE | OBJECT_NAME | OBJECT_LEAF_NAME | TABLE_LOCATION |
---|---|---|---|
DATABASE |
"database" |
database |
NULL |
SCHEMA |
"database"."dbo" |
dbo |
NULL |
TABLE |
"database"."dbo"."customer" |
customer |
[database].[dbo].[customer] |
TABLE |
"database"."dbo"."item" |
item |
[database].[dbo].[item] |
TABLE |
"database"."dbo"."nation" |
nation |
[database].[dbo].[nation] |
Contoh berikut mengembalikan semua database
DECLARE @data_source SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name NVARCHAR(MAX) = NULL;
EXEC sp_data_source_objects @data_source, @object_root_name;
OBJECT_TYPE | OBJECT_NAME | OBJECT_LEAF_NAME | TABLE_LOCATION |
---|---|---|---|
DATABASE |
UserDatabase |
UserDatabase |
NULL |
DATABASE |
master |
master |
NULL |
DATABASE |
msdb |
msdb |
NULL |
DATABASE |
tempdb |
tempdb |
NULL |
DATABASE |
database |
database |
NULL |
Contoh berikut mengembalikan semua skema dalam database
DECLARE @data_source SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name NVARCHAR(MAX) = N'[database]';
EXEC sp_data_source_objects @data_source, @object_root_name;
OBJECT_TYPE | OBJECT_NAME | OBJECT_LEAF_NAME | TABLE_LOCATION |
---|---|---|---|
SCHEMA |
"database"."dbo" |
dbo |
NULL |
SCHEMA |
"database"."INFORMATION_SCHEMA" |
INFORMATION_SCHEMA |
NULL |
SCHEMA |
"database"."sys" |
sys |
NULL |
Contoh berikut mengembalikan semua tabel dalam skema
DECLARE @data_source SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name NVARCHAR(MAX) = N'[database].[dbo]';
EXEC sp_data_source_objects @data_source, @object_root_name;
OBJECT_TYPE | OBJECT_NAME | OBJECT_LEAF_NAME | TABLE_LOCATION |
---|---|---|---|
TABLE |
"database"."dbo"."customer" |
customer |
[database].[dbo].[customer] |
TABLE |
"database"."dbo"."item" |
item |
[database].[dbo].[item] |
TABLE |
"database"."dbo"."nation" |
nation |
[database].[dbo].[nation] |
TABLE |
"database"."dbo"."orders" |
orders |
[database].[dbo].[orders] |
TABLE |
"database"."dbo"."part" |
part |
[database].[dbo].[part] |
Oracle
Contoh berikut mengembalikan skema dan tabel lengkap, fungsi, tampilan, dan lain-lain.
DECLARE @data_source SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name NVARCHAR(MAX) = N'[OracleObjectRoot]';
DECLARE @max_search_depth INT = 2;
EXEC sp_data_source_objects @data_source, @object_root_name, @max_search_depth;
OBJECT_TYPE | OBJECT_NAME | OBJECT_LEAF_NAME | TABLE_LOCATION |
---|---|---|---|
VIEW |
"SYS"."ALL_SQLSET_STATEMENTS" |
ALL_SQLSET_STATEMENTS |
[ORACLEOBJECTROOT].[SYS].[ALL_SQLSET_STATEMENTS] |
SYSTEM TABLE |
"SYS"."BOOTSTRAP$" |
BOOTSTRAP$ |
[ORACLEOBJECTROOT].[SYS].[BOOTSTRAP$] |
SYNONYM |
"PUBLIC"."ALL_ALL_TABLES" |
ALL_ALL_TABLES |
NULL |
SCHEMA |
"database" |
database |
NULL |
TABLE |
"database"."customer" |
customer |
[ORACLEOBJECTROOT].[database].[customer] |
Teradata
Contoh berikut mengembalikan semua database dan tabel, fungsi, tampilan, dan lain-lain.
DECLARE @data_source SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name NVARCHAR(MAX) = NULL;
DECLARE @max_search_depth INT = 2;
EXEC sp_data_source_objects @data_source, @object_root_name, @max_search_depth;
OBJECT_TYPE | OBJECT_NAME | OBJECT_LEAF_NAME | TABLE_LOCATION |
---|---|---|---|
FUNCTION |
"SYSLIB"."ExtractRoles" |
ExtractRoles |
NULL |
SYSTEM TABLE |
"DBC"."UDTCast" |
UDTCast |
[DBC].[UDTCast] |
TYPE |
"SYSUDTLIB"."XML" |
XML |
NULL |
DATABASE |
"database" |
database |
NULL |
TABLE |
"database"."customer" |
customer |
[database].[customer] |
Mongo DB
Contoh berikut mengembalikan semua database dan tabel.
DECLARE @data_source SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name NVARCHAR(MAX) = NULL;
DECLARE @max_search_depth INT = 2;
EXEC sp_data_source_objects @data_source, @object_root_name, @max_search_depth;
OBJECT_TYPE | OBJECT_NAME | OBJECT_LEAF_NAME | TABLE_LOCATION |
---|---|---|---|
DATABASE |
"database" |
database |
NULL |
TABLE |
"database"."customer" |
customer |
[database].[customer] |
TABLE |
"database"."item" |
item |
[database].[item] |
TABLE |
"database"."nation" |
nation |
[database].[nation] |
TABLE |
"database"."orders" |
orders |
[database].[orders] |