05 Data Warehouse

2023-09-14  本文已影响0人  山猪打不过家猪

1. 创建dedicated sql pool 08

2. 创建 synapse 服务 012

2.1 在synapse的Mange页面创建sql pool

image.png

2.2 在synapse的Mange页面创建Apache spark pool 014

image.png

2.3 使用sql pool 015

2.4 使用Aparche Spark NoteBook 016

  1. 在spark里创建一个新的表,将sql pool里的trip表迁移过来
%%spark
spark.sql("CREATE DATABASE IF NOT EXISTS nyctaxi")
val df = spark.read.sqlanalytics("SQLPOOL1.dbo.Trip") 
df.write.mode("overwrite").saveAsTable("nyctaxi.trip")
  1. 使用pyspark,清洗数据,将无行程,但是有距离的乘客修改,并存为新表
%%pyspark
df = spark.sql("""
   SELECT PassengerCount,
       SUM(TripDistanceMiles) as SumTripDistance,
       AVG(TripDistanceMiles) as AvgTripDistance
   FROM nyctaxi.trip
   WHERE TripDistanceMiles > 0 AND PassengerCount > 0
   GROUP BY PassengerCount
   ORDER BY PassengerCount
""") 
display(df)
df.write.saveAsTable("nyctaxi.passengercountstats")
  1. 将上面的表,重新写回sql pool里
%%spark
val df = spark.sql("SELECT * FROM nyctaxi.passengercountstats")
df.write.sqlanalytics("SQLPOOL1.dbo.PassengerCountStats", Constants.INTERNAL )

2.5 使用Serverless Sql pool 017

我们分析不同资源的数据可以使用Serverless,类似于草稿
例如:马上想去分析以下spark pool里的taxi里的passengercounts表
在serverless pool里,我们可以看到没有table这个栏目,只有External tables用来关联外部表和文件

CREATE DATABASE mydbname

-- Create data source
-- create master key that will protect the credentials:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'sknfd#isfnasdkf!bsk1'

-- create credentials for containers in our demo storage account
CREATE DATABASE SCOPED CREDENTIAL sqlondemand
WITH IDENTITY='SHARED ACCESS SIGNATURE',  
SECRET = 'sv=2018-03-28&ss=bf&srt=sco&sp=rl&st=2019-10-14T12%3A10%3A25Z&se=2061-12-31T12%3A10%3A00Z&sig=KlSU2ullCscyTS0An0nozEpo4tO5JAgGBvw%2FJX2lguw%3D'
GO
CREATE EXTERNAL DATA SOURCE SqlOnDemandDemo WITH (
    LOCATION = 'https://sqlondemandstorage.blob.core.windows.net',
    CREDENTIAL = sqlondemand
);

2.5 使用Synapse里的Copy Data tool 018

3.Synapse MMP Architechture

控制节点,计算节点,储存节点 ,总共60个节点


image.png

3.1 Sharding Patterns 027

  1. Hash:大型表性能高,使用Hash分布各个表的资源,创建时需要给出指定的KEY,KEY最好是固定的,不能更新的,且大于60个,这样可以避免数据倾斜


    image.png

2.Round-Robin:将表的资源均匀分配到各个节点中,平均分类。


image.png

3.Replicated:为小表提供最快的查询性能,每个节点上都有表的完整副本,由于是小表,节省了节点之间的传输和斜调的时间,所以很快


image.png

3.2 创建合适的表 028

image.png

3.3 Table types 029

3.4 Partitioning 分区030

不能创建太多分区,分区的数据尽可能100w,

3.5 练习 032

假设我们已有一张3700w条数据的表,在我们的本地数据库

  1. 首先,我们查看,如果使用robin平均分配数据,数据情况
select cp.distribution,count(*) distributionRecords from (
select row_number() over(order by (select null)) rowNum from FactTransactionHistory) subq 
cross apply(select rowNum%60 distribution) cp 
group by distribution
order by distribution 
  1. 首先,确定Productkey是大于60的,避免数据倾斜,3700w数据,有30300个key,大于60可以


    image.png
  2. 查看如果加载到azure的60个分区中的情况如何


    image.png
  3. 查看哪些列是unicode,就是英语文本


    image.png

3.6 数据迁移

pass

4

033-057 略看,后期补充

上一篇 下一篇

猜你喜欢

热点阅读