다음을 통해 공유


자습서: Transact-SQL 사용하여 SQL Server 데이터 풀로 데이터 수집

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

Important

Microsoft SQL Server 2019 빅 데이터 클러스터는 사용 중지되었습니다. SQL Server 2019 빅 데이터 클러스터에 대한 지원은 2025년 2월 28일부터 종료되었습니다. 자세한 내용은 Microsoft SQL Server 플랫폼의 공지 블로그 게시물 및 빅 데이터 옵션을 참조하세요.

이 자습서에서는 Transact-SQL 사용하여 SQL Server 2019 빅 데이터 클러스터의 데이터 풀에 데이터를 로드하는 방법을 보여 줍니다. SQL Server 빅 데이터 클러스터를 사용하면 다양한 원본의 데이터를 수집하여 데이터 풀 인스턴스에 분산할 수 있습니다.

이 튜토리얼에서는 다음을 배우게 됩니다:

  • 데이터 풀에 외부 테이블을 만듭니다.
  • 데이터 풀 테이블에 샘플 웹 클릭 스트림 데이터를 삽입합니다.
  • 데이터 풀 테이블의 데이터를 로컬 테이블과 조인합니다.

Tip

원하는 경우 이 자습서의 명령에 대한 스크립트를 다운로드하고 실행할 수 있습니다. 자세한 내용은 GitHub의 데이터 풀 샘플을 참조하세요.

Prerequisites

데이터 풀에서 외부 테이블 만들기

다음 단계에서는 web_clickstream_clicks_data_pool 데이터 풀에 외부 테이블을 만듭니다. 그런 다음 이 테이블을 빅 데이터 클러스터로 데이터를 수집하기 위한 위치로 사용할 수 있습니다.

  1. Azure Data Studio에서 빅 데이터 클러스터의 SQL Server 마스터 인스턴스에 연결합니다. 자세한 내용은 SQL Server 마스터 인스턴스에 연결을 참조하세요.

  2. 서버 창에서 연결을 두 번 클릭하여 SQL Server 마스터 인스턴스에 대한 서버 대시보드를 표시합니다. 새 쿼리를 선택합니다.

    SQL Server 마스터 인스턴스 쿼리

  3. 다음 Transact-SQL 명령을 실행하여 마스터 인스턴스의 Sales 데이터베이스로 컨텍스트를 변경합니다.

    USE Sales
    GO
    
  4. 외부 데이터 원본이 없는 경우 데이터 풀에 대한 외부 데이터 원본을 만듭니다.

    IF NOT EXISTS(SELECT * FROM sys.external_data_sources WHERE name = 'SqlDataPool')
      CREATE EXTERNAL DATA SOURCE SqlDataPool
      WITH (LOCATION = 'sqldatapool://controller-svc/default');
    
  5. 데이터 풀에 web_clickstream_clicks_data_pool 이라는 외부 테이블을 만듭니다.

    IF NOT EXISTS(SELECT * FROM sys.external_tables WHERE name = 'web_clickstream_clicks_data_pool')
       CREATE EXTERNAL TABLE [web_clickstream_clicks_data_pool]
       ("wcs_user_sk" BIGINT , "i_category_id" BIGINT , "clicks" BIGINT)
       WITH
       (
          DATA_SOURCE = SqlDataPool,
          DISTRIBUTION = ROUND_ROBIN
       );
    

데이터 풀 외부 테이블의 생성은 차단 작업입니다. 컨트롤은 지정된 테이블이 모든 백 엔드 데이터 풀 노드에 만들어졌을 때 반환됩니다. 만들기 작업 중에 오류가 발생하면 호출자에게 오류 메시지가 반환됩니다.

Load data

다음 단계에서는 이전 단계에서 만든 외부 테이블을 사용하여 샘플 웹 클릭스트림 데이터를 데이터 풀에 수집합니다.

  1. INSERT INTO 문을 사용하여 쿼리 결과를 데이터 풀(web_clickstream_clicks_data_pool 외부 테이블)에 삽입합니다.

    INSERT INTO web_clickstream_clicks_data_pool
    SELECT wcs_user_sk, i_category_id, COUNT_BIG(*) as clicks
      FROM sales.dbo.web_clickstreams_hdfs
    INNER JOIN sales.dbo.item it ON (wcs_item_sk = i_item_sk
                            AND wcs_user_sk IS NOT NULL)
    GROUP BY wcs_user_sk, i_category_id
    HAVING COUNT_BIG(*) > 100;
    
  2. 두 개의 SELECT 쿼리를 사용하여 삽입된 데이터를 검사합니다.

    SELECT count(*) FROM [dbo].[web_clickstream_clicks_data_pool]
    SELECT TOP 10 * FROM [dbo].[web_clickstream_clicks_data_pool]  
    

데이터 쿼리

데이터 풀의 쿼리에서 저장된 결과를 Sales 테이블의 로컬 데이터와 조인합니다.

SELECT TOP (100)
   w.wcs_user_sk,
   SUM( CASE WHEN i.i_category = 'Books' THEN 1 ELSE 0 END) AS book_category_clicks,
   SUM( CASE WHEN w.i_category_id = 1 THEN 1 ELSE 0 END) AS [Home & Kitchen],
   SUM( CASE WHEN w.i_category_id = 2 THEN 1 ELSE 0 END) AS [Music],
   SUM( CASE WHEN w.i_category_id = 3 THEN 1 ELSE 0 END) AS [Books],
   SUM( CASE WHEN w.i_category_id = 4 THEN 1 ELSE 0 END) AS [Clothing & Accessories],
   SUM( CASE WHEN w.i_category_id = 5 THEN 1 ELSE 0 END) AS [Electronics],
   SUM( CASE WHEN w.i_category_id = 6 THEN 1 ELSE 0 END) AS [Tools & Home Improvement],
   SUM( CASE WHEN w.i_category_id = 7 THEN 1 ELSE 0 END) AS [Toys & Games],
   SUM( CASE WHEN w.i_category_id = 8 THEN 1 ELSE 0 END) AS [Movies & TV],
   SUM( CASE WHEN w.i_category_id = 9 THEN 1 ELSE 0 END) AS [Sports & Outdoors]
FROM [dbo].[web_clickstream_clicks_data_pool] as w
INNER JOIN (SELECT DISTINCT i_category_id, i_category FROM item) as i
   ON i.i_category_id = w.i_category_id
GROUP BY w.wcs_user_sk;

Clean up

다음 명령을 사용하여 이 자습서에서 만든 데이터베이스 개체를 제거합니다.

DROP EXTERNAL TABLE [dbo].[web_clickstream_clicks_data_pool];

Next steps

Spark 작업을 사용하여 데이터 풀에 데이터를 수집하는 방법에 대해 알아봅니다.