Azure Databricks에서 Azure Synapse에 연결하는 방법

배경



Azure Databricks를 사용하면 대용량 데이터를 병렬로 쉽게 변환하고 변환된 데이터를 다른 Azure 서비스에 저장할 수 있습니다. 그 중 하나는 Azure Synapse(이전의 SQL DW)입니다. Azure Databricks에는 Azure Synapse에서 쉽게 데이터를 읽고 쓸 수 있는 기본 제공 커넥터가 있습니다.

전제 조건


  • Azure Databricks 작업 영역
  • Azure Blob Storage 또는 Azure Data Lake Gen 2
  • Azure Synapse 인스턴스
  • Azure Synapse 사용자 자격 증명

  • 단계



    노트북 세션에서 스토리지 키 구성



    이렇게 하면 노트북 세션에서 스토리지 자격 증명이 구성되며 이를 사용하여 해당 스토리지에 연결합니다. 이 스토리지는 Azure Synapse에서 데이터를 읽고 쓸 때 스테이징 스토리지 역할을 합니다. 현재 Azure Blob Storage 및 Azure Data Lake Gen 2만 지원되며 구성이 약간 다릅니다. 다음은 두 스토리지 유형에 대한 세션 구성입니다.

    스테이징 스토리지로서의 Azure Blob Storage




    # Python
    
    spark.conf.set(fs.azure.account.key.<<your-storage-account-name>>.blob.core.windows.net, <<your-storage-account-access-key>>)
    


    스테이징 저장소로서의 Azure Data Lake Gen 2




    # Python
    
    spark.conf.set(fs.azure.account.key.<<your-storage-account-name>>. dfs.core.windows.net, <<your-storage-account-access-key>>)
    




    Azure Synapse 연결 구성



    다음으로 아래 변수를 정의합니다.
  • Azure Synapse 연결 문자열
  • 준비 저장소 폴더(예: Azure Synapse에서 데이터를 읽고 쓸 때 일부 임시 데이터가 기록되는 위치)
  • Azure Synapse에서 데이터를 읽고 쓸 Azure Synapse 테이블

  • # Python
    
    # Azure Synapse Connection Configuration
    dwDatabase = <<your-database-name>>
    dwServer = <<your-sql-sever-name>>
    dwUser = <<your-database-account>>
    dwPass = <<your-database-account-password>>
    dwJdbcPort =  "1433"
    dwJdbcExtraOptions = "encrypt=true;trustServerCertificate=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"
    sqlDwUrl = f"jdbc:sqlserver://{dwServer}:{dwJdbcPort};database={dwDatabase};user={dwUser};password={dwPass};${dwJdbcExtraOptions}"
    
    # Staging Storage Configuration
    # Azure Blob Storage
    # tempDir = "wasbs://<<container>>@<<your-storage-account-name>>.blob.core.windows.net/<<folder-for-temporary-data>>"
    
    # Azure Data Lake Gen 2
    tempDir = "abfss://<<container >>@<<your-storage-account-name>>.dfs.core.windows.net/<<folder-for-temporary-data>>"
    
    # Azure Synapse Table
    tableName = <<your-azure-synapse-table-to-read-or-write>>
    




    Azure Synapse에서 데이터 읽기



    그런 다음 Azure Synapse에서 데이터 읽기를 시도합니다.

    # Python
    df = spark.read \
      .format("com.databricks.spark.sqldw") \
      .option("url", sqlDwUrl) \
      .option("tempDir", tempDir) \
      .option("forwardSparkAzureStorageCredentials", "true") \
      .option("dbTable", tableName) \
      .load()
    




    Azure Synapse에 데이터 쓰기



    마지막으로 Azure Synapse에 데이터 쓰기를 시도합니다.

    # Python
    df.write \
      .mode('append') \ # Append Data
      .format("com.databricks.spark.sqldw") \
      .option("url", sqlDwUrl) \
      .option("tempDir", tempDir) \
      .option("forwardSparkAzureStorageCredentials", "true") \
      .option("dbTable", tableName) \
      .save()
    




    보너스: 스테이징 스토리지가 필요한 이유



    위에서 언급했듯이 Azure Synapse에서 데이터를 읽고 쓸 때마다 일부 임시 데이터를 저장하기 위해 staging 폴더가 필요합니다. 데이터를 읽고 쓸 때마다 실제로 활용PolyBase하여 데이터를 이동하며, 스테이징 스토리지는 고성능을 달성하는 데 사용됩니다.



    또 다른 보너스: Azure Databricks의 비밀 관리



    위의 코드는 우리의 비밀을 담고 있습니다. 사용자 자격 증명, 통증 텍스트의 스토리지 키. 사실, 우리는 그것들을 공책에 숨겨야 합니다. 자세한 내용은 이것을 참조할 수 있습니다.



    원본 게시물: https://joeho.xyz/blog-posts/how-to-connect-to-azure-synapse-in-azure-databricks/

    좋은 웹페이지 즐겨찾기