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_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 기본값1int입니다.

예를 들어 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]