1. 程式人生 > 實用技巧 >Azure SQL Synapse (5) 通過Polybase把Parquet資料匯入到SQL Synapse

Azure SQL Synapse (5) 通過Polybase把Parquet資料匯入到SQL Synapse

  《Windows Azure Platform 系列文章目錄

  Azure SQL Data Warehouse已經改名為Azure SQL Synapse,這裡繼續挖個坑。

  本章我們介紹如何通過Polybase,把Parquet資料匯入到SQL Synapse。

  什麼是Polybase?

  藉助 PolyBase,SQL Synapse 例項可處理從 Hadoop 中讀取資料的 Transact-SQL 查詢。 同一查詢還可以訪問 SQL Synapse中的關係表。 藉助 PolyBase,同一查詢還可以聯接 Hadoop 和 SQL Server 中的資料。

  1.我們首先準備一個Parquet資料。可以在這裡下載:

  我是通過.NET Core來實現的。具體可以參考:Apache Parquet for .Net Platform,https://github.com/elastacloud/parquet-dotnet

  具體的sample:

 static void WriteParquetFile()
        {
          
            var idColumn = new DataColumn(
            new DataField<Int64>("id"),
            new Int64[] { 111111111111, 222222222222
}); var nameColumn = new DataColumn( new DataField<string>("name"), new string[] { "Zhang SAn", "Wang Er" }); var ageColumn = new DataColumn( new DataField<int>("age"), new int[] { 30, 36 }); var
schema = new Schema(idColumn.Field, nameColumn.Field, ageColumn.Field); using (Stream fileStream = System.IO.File.OpenWrite(@"D:\sample.parquet")) { using (var parquetWriter = new ParquetWriter(schema, fileStream)) { // create a new row group in the file using (ParquetRowGroupWriter groupWriter = parquetWriter.CreateRowGroup()) { groupWriter.WriteColumn(idColumn); groupWriter.WriteColumn(nameColumn); groupWriter.WriteColumn(ageColumn); } } } }

  

  2.使用工具PARQ檢視其schema中欄位型別。如下圖:

  

  3.在Azure China建立1個儲存賬戶,建立1個container,把上面的sample.parquet檔案,上傳到Azure Storage。步驟略

  4.在Azure China建立SQL Synapse

  5.通過SQL Server Management Studio,連結到Azure SQL Synapse

  6.在SSMS中,執行下面的指令碼:

--建立External PARQUET檔案格式
CREATE EXTERNAL FILE FORMAT [ParquetFileSnappy] WITH (
    FORMAT_TYPE = PARQUET, 
    DATA_COMPRESSION = N'org.apache.hadoop.io.compress.SnappyCodec'
)
GO

--下面的password的祕鑰內容,可以根據需要修改PASSWORD值
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '23987hxJ#KL95234nl0zBe';  

--identity是儲存賬號名稱
--Secret是儲存賬戶的祕鑰
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential01 
WITH IDENTITY = '[你的儲存賬戶名稱]'
,SECRET = '[你的儲存賬戶祕鑰]' ;

--下面的wasbs後面是containername@storage account name
CREATE EXTERNAL DATA SOURCE [AzureBlobStorageHadoop] WITH (
    TYPE = HADOOP, 
    LOCATION = N'wasbs://[Blob container名稱]@[你的儲存賬戶名稱].blob.core.chinacloudapi.cn', 
    CREDENTIAL = AzureStorageCredential01 -- created earlier
)
GO

--建立新的TABLE,匯入的檔名是Azure Blob的檔名,記住Location後面一定要有斜槓(/)
--欄位名根據Parquet的欄位型別決定
CREATE EXTERNAL TABLE dbo.employee(
    id BIGINT NULL,
    name nvarchar(50) NULL,
    age int NULL
) WITH (
    LOCATION='/sample.parquet', 
    DATA_SOURCE=AzureBlobStorageHadoop, 
    FILE_FORMAT=ParquetFileSnappy 
);

  

  7.執行成功後,我們可以檢視到建立成功的外部表。

  

  8.最後,我們可以通過T-SQL語句,檢視到該外部表中的內容。

  

  9.可以看到,通過Polybase方式,可以非常方便的檢視到Azure Storage中的Parquet資料。