연습 - 테이블, 대량 가져오기 및 쿼리 데이터 만들기

완료됨

이 대학은 현재 쉼표로 구분된 일련의 파일에 데이터를 저장합니다. 이 데이터를 Azure SQL Database로 마이그레이션해야 합니다.

이 연습에서는 SQL 데이터베이스 서비스를 사용하여 데이터베이스 서버와 단일 데이터베이스를 생성합니다. 다음으로 테이블을 만들고 데이터를 데이터베이스로 가져옵니다. 마지막으로 쿼리 편집기와 sqlcmd 유틸리티를 사용하여 데이터를 쿼리합니다.

쉼표로 구분된 기존 데이터 검사

  1. Azure Cloud Shell에서 다음 명령을 실행하여 대학 시스템의 데이터 파일과 애플리케이션 코드를 다운로드합니다.

    git clone https://github.com/MicrosoftDocs/mslearn-develop-app-that-queries-azure-sql education
    
  2. 다음 명령을 실행하여 샘플 데이터를 자체 폴더로 이동하고 폴더에서 파일을 나열합니다.

    mv ~/education/data ~/educationdata
    cd ~/educationdata
    ls
    

    이 폴더에는 courses.csv, modules.csv, studyplans.csv라는 세 개의 파일이 있습니다.

  3. courses.csv 파일의 내용을 살펴봅니다.

    cat courses.csv
    

    이 파일에는 쉼표로 구분된 다음 데이터가 포함되어 있습니다. 데이터는 대학에서 제공하는 각 과정의 과정 이름과 ID를 포함합니다.

    ID,Course
    1,Computer Science
    2,Maths with Computing
    3,Maths with Physics
    4,Computer Science with Physics
    5,Maths with Chemistry
    6,Physics with Chemistry
    7,Maths
    8,Physics
    9,Chemistry
    
  4. modules.csv 파일의 내용을 살펴봅니다.

    cat modules.csv
    

    이 파일에는 학생이 과정의 요구 사항을 충족하기 위해 수행할 수 있는 다양한 모듈이 나열되어 있습니다. 각 모듈에는 식별 코드와 이름이 있습니다.

    Module Code,Title
    CS101,Introduction to Computer Science
    CS102,Java Programming
    CS103,Distributed Applications
    CS104,Cloud-based systems
    MA101,Foundations of Applied Maths
    MA102,Advanced Calculus
    MA103,Number Theory
    MA104,String Theory
    PH101,Foundations of Physics
    PH102,Basic Experimental Phyics
    PH103,Basic Theoretical Physics
    PH104,Subatomic Physics
    CH101,Elements of Chemistry
    CH102,Basic Inorganic Chemistry
    CH103,Basic Organic Chemistry
    CH104,Chemical Engineering
    
  5. studyplans.csv 파일의 내용을 살펴봅니다.

    cat studyplans.csv
    

    이 파일에는 학생이 과정을 성공적으로 완료하기 위해 통과해야 하는 모듈을 지정하는 데이터가 포함되어 있습니다. Sequence 열에는 학생이 각 모듈을 수강해야 하는 순서가 표시됩니다. 예를 들어 과정 1(컴퓨터 공학)의 경우 학생이 CS101 모듈을 수강한 다음 MA101 모듈을 수강해야 합니다. 아래에는 일부 데이터가 나와 있습니다.

    Course ID,Module Code,Sequence
    1,CS101,1
    1,MA101,2
    1,CS102,3
    1,CS103,4
    1,CS104,5
    2,MA101,1
    2,MA102,2
    2,CS101,3
    2,CS102,4
    2,CS103,5
    3,MA101,1
    3,MA102,2
    3,PH101,3
    3,PH102,4
    3,PH103,5
    ...
    

SQL Database를 사용하여 데이터베이스 서버 및 데이터베이스 만들기

앱의 데이터를 저장할 데이터베이스와 서버를 만들어 보겠습니다.

  1. 샌드박스를 활성화하는 데 사용한 계정으로 Azure Portal에 로그인합니다.

  2. Azure Portal 메뉴의 Azure 서비스에서 리소스 만들기를 선택합니다.

    Screenshot of Azure portal menu and Create a resource option.

    리소스 만들기 창이 나타납니다.

  3. 왼쪽 메뉴 창에서 데이터베이스를 선택하고 인기 Azure 서비스에서 SQL Database를 선택합니다.

    Screenshot of the Databases and SQL Database options.

    SQL Database 만들기 창이 나타납니다.

  4. 기본 탭에서 각 설정에 다음 값을 입력합니다.

    설정
    프로젝트 세부 정보
    Subscription 컨시어지 구독
    리소스 그룹 [샌드박스 리소스 그룹]
    데이터베이스 세부 정보
    데이터베이스 이름 데이터베이스 이름은 고유해야 합니다. coursedatabaseNNN과 같은 이름을 사용하는 것이 좋습니다. 여기서 NNN은 난수입니다.
    서버 새로 만들기 링크를 선택하고 새 서버 패널에서 다음 표에 있는 세부 정보를 입력합니다.
    SQL 탄력적 풀을 사용하시겠습니까? 아니요
    컴퓨팅 + 스토리지 범용

    서버에 대해 각 설정에 다음 값을 입력합니다.

    설정
    서버 이름 NNN이 데이터베이스에 대해 선택한 것과 동일한 번호인 courseserverNNN
    서버 관리자 로그인 azuresql
    암호 요구 사항을 충족하는 암호를 입력합니다.
    암호 확인 암호를 확인합니다.
    위치 미국 중부
  5. 확인을 선택합니다.

  6. 다음: 네트워킹을 선택합니다.

  7. 네트워킹 탭에서 각 설정에 다음 값을 입력합니다.

    설정
    네트워크 연결
    연결 방법 공용 엔드포인트
    방화벽 규칙
    Azure 서비스 및 리소스에서 이 서버에 액세스할 수 있도록 허용
    현재 클라이언트 IP 주소를 추가합니다.
  8. 검토 + 만들기를 선택합니다.

  9. 만들기를 선택합니다. 계속하기 전에 서버 및 데이터베이스가 생성될 때까지 기다립니다.

테이블 만들기

이제 csv 파일의 데이터를 저장할 테이블을 만들 수 있습니다.

  1. 리소스로 이동을 선택합니다. coursedatabaseNNN에 대한 SQL 데이터베이스가 나타납니다.

  2. 왼쪽 메뉴 창에서 쿼리 편집기(미리 보기)를 선택합니다.

    The database page in the Azure portal with the query editor option highlighted.

    coursedatabaseNNN에 대한 쿼리 편집기 창이 나타납니다.

  3. 각 설정에 다음 값을 입력합니다.

    설정
    SQL Server 인증
    로그인 azuresql
    암호 이 사용자를 만들 때 사용한 암호를 지정합니다.

    참고

    데이터베이스에 로그인하는 동안 오류가 발생하는 경우 오류에 나열된 IP를 확인하고 해당 IP가 클라이언트 IP로 추가되었는지 확인합니다. 개요>서버 방화벽 설정을 선택하여 이 작업을 수행할 수 있습니다.

  4. 확인을 선택하여 데이터베이스 서비스에 연결합니다.

  5. Query 1 창에, 다음 Transact-SQL(T-SQL) 문을 입력한 다음, 실행을 선택합니다. 이 문은 과정 정보를 저장할 새 테이블을 만듭니다. 문이 오류 없이 실행되는지 확인합니다.

    CREATE TABLE Courses
    (
        CourseID INT NOT NULL PRIMARY KEY,
        CourseName VARCHAR(50) NOT NULL
    )
    

    The Query editor window in the Azure portal. The user has entered a statement to create the Courses table.

  6. 모듈을 저장할 테이블을 만드는 다음 문으로 기존 문을 덮어씁니다. 실행을 선택하고 문이 오류 없이 실행되는지 확인합니다.

    CREATE TABLE Modules
    (
        ModuleCode VARCHAR(5) NOT NULL PRIMARY KEY,
        ModuleTitle VARCHAR(50) NOT NULL
    )
    
  7. StudyPlans라는 테이블을 만들도록 문을 변경하고 실행을 선택합니다.

    CREATE TABLE StudyPlans
    (
        CourseID INT NOT NULL,
        ModuleCode VARCHAR(5) NOT NULL,
        ModuleSequence INT NOT NULL,
        PRIMARY KEY(CourseID, ModuleCode)
    )
    
  8. 데이터베이스 창에서 도구 모음의 새로 고침 아이콘을 선택합니다. 테이블을 펼친 다음, 각 테이블을 차례로 펼칩니다. dbo.Courses, dbo.Modules, dbo.StudyPlans라는 세 개의 테이블이 각 테이블의 열 및 기본 키와 함께 표시됩니다.

    참고

    dbo데이터베이스 소유자를 나타냅니다. 데이터베이스의 기본 스키마입니다. 세 개의 테이블은 모두 이 스키마에 생성되었습니다.

    The database window in the Azure portal, showing the tables and columns.

데이터 가져오기

  1. Cloud Shell로 돌아가서 educationdata 폴더에 있는지 확인합니다.

    cd ~/educationdata
    
  2. 이후 단계에서 사용할 변수를 만듭니다. NNN을 데이터베이스 및 서버에 사용한 번호로 바꿉니다.

    export DATABASE_NAME=coursedatabaseNNN
    export DATABASE_SERVER=courseserverNNN
    export AZURE_USER=azuresql
    export AZURE_PASSWORD=[enter your password]
    
  3. bcp 유틸리티를 실행하여 데이터베이스의 dbo.Courses 테이블 스키마에서 서식 파일을 만듭니다. 형식 파일은 데이터가 문자 형식(-c)이고 쉼표(-t,)로 구분되도록 지정합니다.

    bcp "[$DATABASE_NAME].[dbo].[courses]" format nul -c -f courses.fmt -t, -S "$DATABASE_SERVER.database.windows.net" -U $AZURE_USER -P $AZURE_PASSWORD
    
  4. 코드 편집기에서 courses.fmt를 엽니다. 이전 명령으로 생성된 형식 파일입니다.

    code courses.fmt
    

    파일은 다음과 같습니다.

    14.0
    2
    1       SQLCHAR             0       12      ","    1     CourseID                                     ""
    2       SQLCHAR             0       50      "\n"   2     CourseName                                   SQL_Latin1_General_CP1_CI_AS
    
  5. 파일을 검토합니다. 쉼표로 구분된 파일의 첫 번째 열에 있는 데이터는 dbo.Courses 테이블의 CourseID 열로 들어갑니다. 두 번째 필드는 CourseName 열로 이동합니다. 두 번째 열은 문자 기반이며 연결된 데이터 정렬이 있습니다. 파일의 필드 구분 기호는 쉼표여야 합니다. 두 번째 필드 뒤의 행 종결자는 줄 바꿈 문자여야 합니다. 실제 시나리오에서는 데이터가 깔끔하게 구성되지 않을 수 있습니다. 여러 필드 구분 기호와 필드가 열과는 다른 순서로 포함될 수 있습니다. 이런 경우, 서식 파일을 편집하여 필드별로 이러한 항목을 변경할 수 있습니다. Ctrl+Q를 눌러 편집기를 닫습니다.

  6. 다음 명령을 실행하여 수정된 courses.fmt 파일에서 지정한 형식으로 courses.csv 파일의 데이터를 가져옵니다. -F 2 플래그를 사용하면 bcp 유틸리티가 데이터 파일의 두 번째 줄부터 데이터를 가져오기 시작합니다. 첫 번째 줄에는 헤더가 포함되어 있습니다.

    bcp "[$DATABASE_NAME].[dbo].[courses]" in courses.csv -f courses.fmt -S "$DATABASE_SERVER.database.windows.net" -U $AZURE_USER -P $AZURE_PASSWORD -F 2
    

    bcp 유틸리티가 9개 행을 가져오고 오류를 보고하지 않는지 확인합니다.

  7. 다음 작업을 순서대로 실행하여 modules.csv 파일에서 dbo.Modules 테이블의 데이터를 가져옵니다.

    1. 서식 파일을 생성합니다.

      bcp "[$DATABASE_NAME].[dbo].[modules]" format nul -c -f modules.fmt -t, -S "$DATABASE_SERVER.database.windows.net" -U $AZURE_USER -P $AZURE_PASSWORD
      
    2. modules.csv 파일의 데이터를 데이터베이스의 dbo.Modules 테이블로 가져옵니다.

      bcp "[$DATABASE_NAME].[dbo].[modules]" in modules.csv -f modules.fmt -S "$DATABASE_SERVER.database.windows.net" -U $AZURE_USER -P $AZURE_PASSWORD -F 2
      

      이 명령이 16개 행을 가져오는지 확인합니다.

  8. 다음 순서의 작업을 수행하여 studyplans.csv 파일에서 dbo.StudyPlans 테이블의 데이터를 가져옵니다.

    1. 서식 파일을 생성합니다.

      bcp "[$DATABASE_NAME].[dbo].[studyplans]" format nul -c -f studyplans.fmt -t, -S "$DATABASE_SERVER.database.windows.net" -U $AZURE_USER -P $AZURE_PASSWORD
      
    2. studyplans.csv 파일의 데이터를 데이터베이스의 dbo.StudyPlans 테이블로 가져옵니다.

      bcp "[$DATABASE_NAME].[dbo].[studyplans]" in studyplans.csv -f studyplans.fmt -S "$DATABASE_SERVER.database.windows.net" -U $AZURE_USER -P $AZURE_PASSWORD -F 2
      

      이 명령이 45개 행을 가져오는지 확인합니다.

데이터베이스의 데이터 쿼리

  1. Azure Portal로 돌아갑니다.

  2. Azure Portal 메뉴에서 SQL 데이터베이스를 선택합니다.

  3. SQL 데이터베이스 창에서 coursedatabaseNNN을 선택합니다. coursedatabaseNNN 창이 나타납니다.

  4. 왼쪽 메뉴 창에서 쿼리 편집기를 선택합니다. coursedatabaseNNN에 대한 쿼리 편집기 창이 나타납니다.

  5. 각 설정에 다음 값을 입력합니다.

    설정
    SQL Server 인증
    로그인 azuresql
    암호 이 사용자의 암호를 입력합니다.
  6. 확인을 선택하여 데이터베이스 서비스에 연결합니다.

  7. Query 1 창에, 다음 T-SQL 문을 입력한 다음, 실행을 선택합니다.

    SELECT * FROM dbo.Courses
    

    이 문은 dbo.Courses 테이블에서 데이터를 검색합니다. 결과 창에 9개 행이 표시됩니다.

    Screenshot of the query editor in the Azure portal, showing the data retrieved from the Courses table.

  8. 쿼리를 다음과 같이 변경하고 실행을 선택합니다.

    SELECT * FROM dbo.Modules
    

    이번에는 결과 창에 모듈이 표시됩니다. 16개 행이 있습니다.

  9. Cloud Shell로 돌아가 다음 명령을 실행하여 데이터베이스에 연결합니다.

    sqlcmd -S "$DATABASE_SERVER.database.windows.net" -d "$DATABASE_NAME" -U $AZURE_USER -P $AZURE_PASSWORD
    
  10. 1> 프롬프트에서 다음 T-SQL 명령을 실행하여 dbo.StudyPlans 테이블에서 데이터를 가져옵니다.

    SELECT * FROM StudyPlans;  
    GO
    

    이 쿼리는 45개 행을 반환합니다.

  11. 1> 프롬프트에서 exit를 입력하여 sqlcmd 유틸리티를 닫습니다.

SQL Database를 사용하여 단일 데이터베이스를 만들었습니다. 그런 다음, Azure Portal의 쿼리 편집기를 사용하여 테이블을 만들었습니다. bcp 유틸리티를 사용하여 쉼표로 구분된 일련의 데이터 파일에서 데이터를 업로드했습니다. 마지막으로, Azure Portal의 쿼리 편집기와 Cloud Shell의 sqlcmd 유틸리티에서 데이터베이스의 테이블에 대해 쿼리를 실행했습니다.