我用“databricks-sql-connector”python3.8連接到一個SQL Azure Wharehouse在Azure機器學習計算實例。
我有這個大型結果查詢,查看“查詢曆史”我檢查所花費的時間進行查詢,並將數據發送給客戶端。結果是27 gb大。超過2小時才得到這個數據我蔚藍的計算實例。
在這裏你可以看到它實際上花了1.88“製造”數據,和2.27小時發送數據。
當我重做這個查詢,而是在磚SQL編輯器(和消除1000年限製),“抓取結果由客戶”是方法更快。因為它是在當地的我猜,這是正常的。
所以我認為網絡是在這裏的原因。但由於磚和我計算的實例在同一子網/網絡,我不明白為什麼下載太慢。
我有一個其他的假設,那就是python代碼凍結,因為運行了一個小時後,在linux中使用“自由- m”顯示了數據在內存中,我,但當我做CTRL + C python代碼,它不會停止流程,什麼也不會發生。我要做CTRL + Z停止這個過程,但是這將創建內存泄漏檢查因為“自由- m”內存沒有可行性。
知道如果databricks-sql-connector問題時取“大”的結果嗎?
所以我做了一些測試。既然你說磚SQL的司機不進行檢索的數據量。我繼續火花。
我解雇了一個小火花集群,以最快的速度在SQL查詢倉庫,然後我做了一個df.write.parquet (“/ my_path /”)這個花了10分鍾(2鑲條鑲花的文件)
然後我使用Azure存儲API下載所有鋪在Azure存儲文件從文件夾。用熊貓和加載它。
最初的電子我用黑斑羚,在30分鍾。SQL倉庫是4小時。火花+一些火花。寫+文件下載到本地/ VM /艙+負載大熊貓20分鍾。
是的,我是使用fetchall ()
這就是我當我使用fetchmany(100000)(而不是10.000,100.000)有太多其他印刷:
< databricks.sql.client。遊標對象在100000 0 x7fddfd233be0 >抓取塊大小,1 1.2840301990509033取塊的大小100000,2 1.7594795227050781取塊的大小100000,3 1.4387767314910889取塊的大小100000,4 1.9465265274047852取塊的大小100000,5 1.284682273864746取塊的大小100000,6 1.8754642009735107取100000塊的大小,7
所以需要1.5 2秒鍾左右每100.000塊的大小。據我所知在文檔中,塊大小是獲取的行數。
因為我有1008342364行,它將帶我10084 fetchmany (100000)
10084 * 1.5(秒/ fetchmany) = 15125秒的所有數據。所以大約4小時。
如果做一個fetchmany(1000000),我得到一個獲取14秒。
1008342364行/ 1008342364 = 1009獲取
10084 * 14 = 14126秒鍾fetch = > 3.9小時
所以我做了一些測試。既然你說磚SQL的司機不進行檢索的數據量。我繼續火花。
我解雇了一個小火花集群,以最快的速度在SQL查詢倉庫,然後我做了一個df.write.parquet (“/ my_path /”)這個花了10分鍾(2鑲條鑲花的文件)
然後我使用Azure存儲API下載所有鋪在Azure存儲文件從文件夾。用熊貓和加載它。
最初的電子我用黑斑羚,在30分鍾。SQL倉庫是4小時。火花+一些火花。寫+文件下載到本地/ VM /艙+負載大熊貓20分鍾。