다음을 통해 공유


sp_data_source_objects(Transact-SQL)

적용 대상: SQL Server 2019(15.x)

가상화할 수 있는 테이블 개체 목록을 반환합니다.

구문

Transact-SQL 구문 표기 규칙

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_sourcesysname입니다.

[ @object_root_name = ] 'object_root_name'

이 매개 변수는 검색할 개체 이름의 루트입니다. @object_root_namenvarchar(max)이며, 기본값은 NULL입니다.

이 호출은 @object_root_name에 설정된 값으로 시작하는 외부 개체만 반환합니다.

ODBC 데이터 원본이 세 부분으로 구성된 이름을 사용하는 RDBMS(관계형 데이터베이스 관리 시스템)에 연결하는 경우 @object_root_name에는 부분 데이터베이스 이름이 포함될 수 없습니다. 이러한 경우 매개 변수 @object_root_name에는 세 부분이 모두 포함되어야 하며, 세 번째 부분은 검색할 개체 이름이어야 합니다.

주의

외부 데이터 플랫폼 간의 차이로 인해 일부 플랫폼에서는 NULL의 기본값을 제공해도 결과가 반환되지 않습니다. 일부는 NULL을 필터가 없는 것으로 취급합니다. 예를 들어, @object_root_name에 대해 NULL을 제공한 경우 Oracle RDMBS는 결과를 반환하지 않습니다.

[ @max_search_depth = ] max_search_depth

이 값은 검색할 @object_root_name을 지나 최대 깊이(파트)를 지정합니다. @max_search_depth는 기본값이 1int입니다.

예를 들어, @max_search_depth가 1이고 @object_root_name이 SQL Server 데이터베이스의 이름인 경우 데이터베이스에 포함된 스키마가 반환됩니다.

@max_search_depth는 카탈로그 또는 스키마의 경우 비어 있지 않은 경우 @object_root_name에 대한 NULL 정보를 반환합니다.

[ @search_options = ] 'search_options'

search_options 매개 변수는 nvarchar(max)이며 기본값은 NULL입니다.

이 매개 변수는 사용되지 않지만 향후 구현될 수 있습니다.

결과 집합

열 이름 데이터 형식 설명
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_objectssp_data_source_table_columns를 사용합니다. 이러한 시스템 저장 프로시저는 가상화할 수 있는 테이블의 스키마를 반환합니다. Azure Data Studio는 이 두 저장 프로시저를 사용하여 데이터 가상화를 지원합니다. SQL Server 데이터 형식으로 표현되는 외부 테이블 스키마를 검색하려면 sp_data_source_table_columns를 사용합니다.

배열을 포함하는 MongoDB 컬렉션 외부 테이블

배열을 포함하는 MongoDB 컬렉션 외부 테이블을 만들려면 Azure Data Studio용 데이터 가상화 확장을 사용하여 MongoDB용 PolyBase ODBC 드라이버에 의해 감지된 스키마를 기준으로 CREATE EXTERNAL TABLE 문을 생성해야 합니다. 평면화 작업은 드라이버에 의해 자동으로 수행됩니다. 또는 sp_data_source_objects를 사용하여 컬렉션 스키마(열)를 감지하고 외부 테이블을 수동으로 만들 수도 있습니다. 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

다음 예에서는 모든 데이터베이스, 스키마 및 테이블/뷰를 반환합니다.

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

다음 예시는 데이터베이스의 모든 스키마를 반환합니다.

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

다음 예시는 전체 스키마와 테이블, 함수, 뷰 등을 반환합니다.

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]