sp_data_source_objects(Transact-SQL)
적용 대상: SQL Server 2019(15.x)
가상화할 수 있는 테이블 개체 목록을 반환합니다.
구문
sp_data_source_objects
[ @data_source = ] 'data_source'
[ , [ @object_root_name = ] 'object_root_name' ]
[ , [ @max_search_depth = ] max_search_depth ]
[ , [ @search_options = ] 'search_options' ]
[ ; ]
인수
[ @data_source = ] 'data_source'
메타데이터를 가져올 외부 데이터 원본의 이름입니다. @data_source .sysname
[ @object_root_name = ] 'object_root_name'
이 매개 변수는 검색할 개체 이름의 루트입니다. @object_root_name 기본값은 nvarchar(max)
.입니다NULL
.
이 호출은 @object_root_name 대해 설정된 값으로 시작하는 외부 개체만 반환합니다.
ODBC 데이터 원본이 세 부분으로 구성된 이름을 사용하는 RDBMS(관계형 데이터베이스 관리 시스템)에 연결하는 경우 @object_root_name 부분 데이터베이스 이름을 포함할 수 없습니다. 이러한 경우 매개 변수 @object_root_name 세 부분을 모두 포함해야 하며, 세 번째 부분은 검색할 개체 이름입니다.
주의
외부 데이터 플랫폼 간의 차이로 인해 기본값 NULL
이 제공된 경우 일부 플랫폼은 결과를 반환하지 않습니다. 일부는 필터의 부족으로 처리 NULL
합니다. 예를 들어 Oracle RDMBS는 @object_root_name 대해 제공된 경우 NULL
결과를 반환하지 않습니다.
[ @max_search_depth = ] max_search_depth
이 값은 검색하려는 @object_root_name 지나는 최대 깊이(부분)를 지정합니다. @max_search_depth 기본값1
인 int입니다.
예를 들어 SQL Server 데이터베이스의 이름인 @object_root_name 있는 1 의 @max_search_depth 데이터베이스 내에 포함된 schemata를 반환합니다.
@max_search_depth 카탈로그 또는 스키마의 NULL
경우 @object_root_name 정보가 존재하고 비어있지 않은 경우 정보를 반환합니다.
[ @search_options = ] 'search_options'
매개 변수는 search_options
기본값 NULL
인 nvarchar(max)입니다.
이 매개 변수는 사용되지 않지만 나중에 구현될 수 있습니다.
결과 집합
열 이름 | 데이터 형식 | 설명 |
---|---|---|
OBJECT_TYPE |
nvarchar(200) | 개체의 형식입니다(예: TABLE 또는 DATABASE). |
OBJECT_NAME |
nvarchar(max) | 개체의 정규화된 이름입니다. 백 엔드별 따옴표 문자를 사용하여 이스케이프됩니다. |
OBJECT_LEAF_NAME |
nvarchar(max) | 정규화되지 않은 개체 이름입니다. |
TABLE_LOCATION |
nvarchar(max) | CREATE EXTERNAL TABLE 문에 사용할 수 있는 유효한 테이블 위치 문자열입니다. 적용 NULL 할 수 없는 경우입니다. |
사용 권한
ALTER ANY EXTERNAL DATA SOURCE 권한이 필요합니다.
설명
SQL Server 인스턴스에는 PolyBase 기능이 설치되어 있어야 합니다. 이 절차는 SQL Server 2019 CU5에서 처음 도입되었습니다.
이 저장 프로시저는 다음을 위한 커넥터를 지원합니다.
- SQL Server
- Oracle
- Teradata
- MongoDB
- Azure Cosmos DB
저장 프로시저는 일반 ODBC 데이터 원본 또는 Hadoop 커넥터를 지원하지 않습니다.
비어 있거나 비어있지 않은 개념이 ODBC 드라이버 및 함수의 동작과 SQLTables
관련이 있습니다. 비어 있지 않음은 개체에 행이 아닌 테이블이 포함되어 있음을 나타냅니다. 예를 들어 빈 스키마에는 SQL Server에 테이블이 없습니다. 빈 데이터베이스에는 Teradata 내에 테이블이 없습니다.
개체 형식은 외부 데이터 원본의 ODBC 드라이버에 의해 결정됩니다. 각 외부 데이터 원본은 테이블로 한정되는 항목을 결정합니다. 여기에는 Teradata의 함수와 같은 데이터베이스 개체 또는 Oracle의 동의어가 포함될 수 있습니다. PolyBase는 일부 ODBC 개체를 외부 테이블로 연결할 수 없으므로 열에 값이 TABLE_LOCATION
없습니다. 값 TABLE_LOCATION
이 없더라도 이러한 ODBC 개체 중 하나가 있으면 데이터베이스 또는 스키마가 비어있지 않을 수 있습니다.
외부 개체를 검색하는 데 사용하고 sp_data_source_objects
sp_data_source_table_columns. 이러한 시스템 저장 프로시저는 가상화할 수 있는 테이블의 스키마를 반환합니다. Azure Data Studio는 이러한 두 저장 프로시저를 사용하여 데이터 가상화를 지원합니다. sp_data_source_table_columns 사용하여 SQL Server 데이터 형식에 표시되는 외부 테이블 스키마를 검색합니다.
배열을 포함하는 MongoDB 컬렉션 외부 테이블
배열이 포함된 MongoDB 컬렉션에 대한 외부 테이블을 만들려면 Azure Data Studio용 데이터 가상화 확장을 사용하여 PolyBase ODBC Driver for MongoDB에서 검색한 스키마에 따라 CREATE EXTERNAL TABLE 문을 생성해야 합니다. 평면화 작업은 드라이버에 의해 자동으로 수행됩니다. 또는 sp_data_source_objects(Transact-SQL)를 사용하여 컬렉션 스키마(열)를 감지하고 외부 테이블을 수동으로 만들 수도 있습니다. sp_data_source_table_columns
저장 프로시저도 MongoDB 드라이버용 PolyBase ODBC 드라이버를 통해 자동으로 평면화를 수행합니다. Azure Data Studio용 데이터 가상화 확장 및 sp_data_source_table_columns
는 동일한 내부 저장 프로시저를 사용하여 외부 스키마를 쿼리합니다.
데이터 원본 유형별 설명
Teradata
Teradata 시스템 뷰는 RLS(행 수준 보안)를 사용하지 않으므로 사용자는 쿼리할 수 없는 테이블의 존재를 볼 수 있습니다.
MongoDB
일부 이전 버전의 MongoDB는 모든 데이터베이스를 관리자와 유사한 사용자로 나열하는 기능을 제한합니다. 이 권한이 없는 사용자는 null @object_root_name 사용하여 이 절차를 실행하려고 시도하는 인증 오류가 발생할 수 있습니다.
Oracle
Oracle 동의어는 PolyBase 사용에서 지원되지 않습니다.
예제
SQL Server
다음 예제에서는 모든 데이터베이스, schemata 및 테이블/뷰를 반환합니다.
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] |
다음 예제에서는 모든 데이터베이스를 반환합니다.
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 |
다음 예제에서는 데이터베이스의 모든 schemata를 반환합니다.
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 |
다음 예제에서는 스키마의 모든 테이블을 반환합니다.
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
다음 예제에서는 전체 schemata 및 테이블, 함수, 뷰 등을 반환합니다.
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
다음 예제에서는 모든 데이터베이스와 테이블, 함수, 뷰 등을 반환합니다.
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] |
MongoDB
다음 예제에서는 모든 데이터베이스와 테이블을 반환합니다.
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] |
관련 콘텐츠
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기