Azure SQL Synapse (5) 通過Polybase把Parquet數據導入到SQL Synapse Windows Azure Platform 系列文章目錄

  《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 中的數據。 

  通過Polybase,SQL Synapse支持數據源保存在Azure Storage中的數據。

 

  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數據。

  

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章