Azure Lei Zhang的博客

weibo: LeiZhang的微博/QQ: 185165016/QQ群:319036205/邮箱:leizhang1984@outlook.com/TeL:139-161-22926

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

  《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数据。

  10.最后需要强调一下,通过Polybase的方式,访问数据其实还是在Azure Blob Storage中,需要需要加快访问速度,还是希望通过CTAS (Create Table as Select),把数据从SQL External Table加载到SQL DW里。

  

  

posted on 2020-08-05 22:09  Lei Zhang的博客  阅读(726)  评论(0编辑  收藏  举报