取消
顯示的結果
而不是尋找
你的意思是:

三角洲表存儲最佳實踐

Gim
貢獻者

這就跟你問聲好!

我們有一個項目,我們為客戶做一些數據工程。我實現了一個將批處理數據磚的自動裝卸機(流w / availableNow)因為他們出口從幾個來源主要有大量的文件。我們想按照圖案架構和英語教學。

待建的端點的數據倉庫,將主要是一個MySQL數據庫駐留在Azure。到目前為止,我的自動裝卸機輸出增量表而不是默認的蜂巢metastore。相反,我將它們保存到一個容器在ADLS存儲賬戶按來源。

從這裏,我打算建立剩下的金銀層表在單獨的容器。

  1. 根據我目前的方法和用途的情況下,我將麵臨什麼障礙/挑戰?什麼是好的選擇嗎?
  2. 實際的最佳實踐來處理三角洲表和它們存儲的位置嗎?

欣賞任何輸入提供!

1接受解決方案

接受的解決方案

Ryan_Chynoweth
尊敬的貢獻者三世

嗨Gim,請伸出你的團隊或客戶的磚帳戶。他們應該能夠幫助更多。我也會考慮統一目錄因為它會使你的數據管理更加容易。

讓你青銅、白銀和黃金容器在單獨的容器很好。它們可以在同一容器如果你想。的差異並不大。但總體上多個容器由區是好的。

(1)我不建議使用DW的MySQL數據庫。你已經將你所有的數據存儲在三角洲和ADLS。你應該使用磚SQL SQL計算。如果您使用一個MySQL然後你會複製數據,添加不必要的複雜性。你可以做ETL、數據倉庫、BI,流媒體,毫升磚。

(2)使用磚時你應該將你所有的業務數據存儲在ADLS存儲賬戶就像你正在做的事情。然而,你也可以創建數據庫在磚使用位置這將允許您注冊表在蜂房裏metastore ADLS在寫數據。然而,如果你使用統一目錄(與上圖)這將自動為您處理!

這裏是如何創建一個數據庫位置和保存dataframe表:

% python #創建數據庫火花。sql(“創建數據庫如果不存在my_db位置”abfss: / /(電子郵件保護)/道路/ / db) #設置默認數據庫火花。sql(“使用my_db”) #數據讀入df df = spark.read.json(“/道路/ /文件”)#寫δ表——注意,它將被保存到數據庫的默認位置df.write.saveAsTable (“my_table”)

如果你已經寫了一個表來三角洲ADLS蜂巢metastore但想注冊:

#數據寫入位置df.write.format(“δ”).save(“/道路/ /表”)#數據庫中的注冊表火花。sql(“”“創建表my_table SELECT *從三角洲。/道路/ /表”“”)#讀取數據使用sql火花。sql (“SELECT * FROM my_table”)

在原帖子查看解決方案

7回複7

Ryan_Chynoweth
尊敬的貢獻者三世

嗨Gim,請伸出你的團隊或客戶的磚帳戶。他們應該能夠幫助更多。我也會考慮統一目錄因為它會使你的數據管理更加容易。

讓你青銅、白銀和黃金容器在單獨的容器很好。它們可以在同一容器如果你想。的差異並不大。但總體上多個容器由區是好的。

(1)我不建議使用DW的MySQL數據庫。你已經將你所有的數據存儲在三角洲和ADLS。你應該使用磚SQL SQL計算。如果您使用一個MySQL然後你會複製數據,添加不必要的複雜性。你可以做ETL、數據倉庫、BI,流媒體,毫升磚。

(2)使用磚時你應該將你所有的業務數據存儲在ADLS存儲賬戶就像你正在做的事情。然而,你也可以創建數據庫在磚使用位置這將允許您注冊表在蜂房裏metastore ADLS在寫數據。然而,如果你使用統一目錄(與上圖)這將自動為您處理!

這裏是如何創建一個數據庫位置和保存dataframe表:

% python #創建數據庫火花。sql(“創建數據庫如果不存在my_db位置”abfss: / /(電子郵件保護)/道路/ / db) #設置默認數據庫火花。sql(“使用my_db”) #數據讀入df df = spark.read.json(“/道路/ /文件”)#寫δ表——注意,它將被保存到數據庫的默認位置df.write.saveAsTable (“my_table”)

如果你已經寫了一個表來三角洲ADLS蜂巢metastore但想注冊:

#數據寫入位置df.write.format(“δ”).save(“/道路/ /表”)#數據庫中的注冊表火花。sql(“”“創建表my_table SELECT *從三角洲。/道路/ /表”“”)#讀取數據使用sql火花。sql (“SELECT * FROM my_table”)

@Ryan Chynoweth(磚)

道歉不是我希望盡快恢複。欣賞的輸入!

(1)後進一步討論和明確項目的需求,我認為不再需要存儲DW MySQL。唯一原因可能是認為首先是因為它是唯一RDBMS客戶端解決方案。現在他們有磚,不妨利用架構和平台。Beplay体育安卓版本我個人也不想處理的額外層複雜性隻是保持管道保持表更新本地MySQL和磚。

(2)我從來沒有意識到我可以做兩個注冊表在蜂巢metastore和儲存ADLS三角洲表中。我總是認為這是一個。我一定會看在統一目錄,看看我很快就可以實現的。這可以在單個readStream完成和writeStream電話嗎?這就是我目前:

火花.readStream .format .option (“cloudFiles (“cloudFiles”)。形式at", source_format) .option('header', 'true') .option("cloudFiles.schemaLocation", schema_path) .load(adls_raw_file_path) .writeStream .format('delta') .outputMode('append') .queryName(query_name) .option('checkpointLocation', checkpoint_path) .option("mergeSchema", "true") .trigger(availableNow=True) .start(adls_delta_table_path)

Ryan_Chynoweth
尊敬的貢獻者三世

嗨@Gimwell年輕,

它幫助快樂!統一目錄你指定一個默認位置在ADLS所有數據,所以應當為你處理。請伸出你的磚賬戶團隊學習更多。

創建和編寫管理表看起來像下麵這樣。請注意,有許多方法可以做到這一點。代碼的唯一的區別是“toTable”寫流。

df =(火花.readStream .format .option (“cloudFiles (“cloudFiles”)。形式at", source_format) .option('header', 'true') .option("cloudFiles.schemaLocation", schema_path) .load(adls_raw_file_path) ) (df.writeStream .format('delta') .outputMode('append') .queryName(query_name) .option('checkpointLocation', checkpoint_path) .option("mergeSchema", "true") .trigger(availableNow=True) .toTable("") )

Gim
貢獻者

嗨@Ryan Chynoweth

哦,好吧。我確實有toTable最初對這個流調用之前設置一個ADLS路徑作為目標。

澄清,所以為它工作,我把它帶回toTable保存默認metastore然後ADLS部分將由我們的要求統一目錄。是嗎?耦合表和文件會如何?

預覽 退出預覽
你必須在添加附件簽署
附加選項
你沒有權限刪除這個產品協會。
歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu