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 }); varschema = 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資料。