Share via


在 Azure 中搭配 Ubuntu 資料科學虛擬機器的資料科學

本逐步解說說明如何使用Ubuntu 資料科學虛擬機器 (DSVM) 完成數個常見的數據科學工作。 Ubuntu DSVM 是 Azure 中提供的虛擬機映射,具有預安裝的工具集合,通常用於數據分析和機器學習。 布建Ubuntu資料科學虛擬機器資源專案化主要軟體元件。 DSVM 映像可讓您在短短幾分鐘內輕鬆開始使用數據科學,避免需要個別安裝和設定每個工具。 您可以視需要輕鬆地相應增加 DSVM,而且可以在不使用 DSVM 時加以停止。 DSVM 既有彈性,又符合成本效益。

在本逐步解說中,我們會分析 spambase 資料集。 Spambase 是一組標示為垃圾郵件或非垃圾郵件的電子郵件。 Spambase 也包含有關電子郵件內容的一些統計數據。 我們稍後會在逐步解說中討論統計數據。

必要條件

您必須先涵蓋下列必要條件,才能使用 Linux DSVM:

下載 spambase 資料集

spambase 數據集是一組相當小的數據,其中包含 4,601 個範例。 此資源方便且可管理的大小,可讓您輕鬆地顯示 DSVM 的一些主要功能,因為資源需求適中。

注意

本逐步解說是使用 D2 v2 v2 大小的 Linux DSVM 所建立。 您可以使用 DSVM 這個大小來完成本逐步解說中顯示的程式。

如需更多儲存空間,您可以建立更多磁碟,並將其連結至 DSVM。 磁碟會使用永續性 Azure 記憶體,因此即使伺服器因為重設大小或關閉而重新佈建,也會保留其數據。 若要新增磁碟並將其連接到 DSVM,請完成新增磁碟至 Linux VM 中的步驟。 新增磁碟的步驟會使用已在 DSVM 上安裝的 Azure CLI。 您可以完全從 DSVM 本身完成步驟。 作為增加記憶體的另一個選項,您可以使用 Azure 檔案儲存體

若要下載資料,請開啟終端機視窗,然後執行下列命令:

wget --no-check-certificate https://archive.ics.uci.edu/ml/machine-learning-databases/spambase/spambase.data

下載的檔案沒有標頭列。 讓我們建立另一個具有標頭的檔案。 執行此命令來建立具有適當標題的檔案︰

echo 'word_freq_make, word_freq_address, word_freq_all, word_freq_3d,word_freq_our, word_freq_over, word_freq_remove, word_freq_internet,word_freq_order, word_freq_mail, word_freq_receive, word_freq_will,word_freq_people, word_freq_report, word_freq_addresses, word_freq_free,word_freq_business, word_freq_email, word_freq_you, word_freq_credit,word_freq_your, word_freq_font, word_freq_000, word_freq_money,word_freq_hp, word_freq_hpl, word_freq_george, word_freq_650, word_freq_lab,word_freq_labs, word_freq_telnet, word_freq_857, word_freq_data,word_freq_415, word_freq_85, word_freq_technology, word_freq_1999,word_freq_parts, word_freq_pm, word_freq_direct, word_freq_cs, word_freq_meeting,word_freq_original, word_freq_project, word_freq_re, word_freq_edu,word_freq_table, word_freq_conference, char_freq_semicolon, char_freq_leftParen,char_freq_leftBracket, char_freq_exclamation, char_freq_dollar, char_freq_pound, capital_run_length_average,capital_run_length_longest, capital_run_length_total, spam' > headers

然後,串連這兩個檔案:

cat spambase.data >> headers
mv headers spambaseHeaders.data

對於每一封電子郵件,資料集都有數種類型的統計資料:

  • word_freq_WORD數據行會指出電子郵件中符合 WORD 的字組百分比。 例如,如果 word_freq_make1,則 make 是電子郵件中所有單字的1%。
  • char_freq_CHAR數據行會指出電子郵件中所有字元的CHAR百分比。
  • capital_run_length_longest 是一連串大寫字母的最長長度。
  • capital_run_length_average 是所有連串大寫字母的平均長度。
  • capital_run_length_total 是所有連串大寫字母的總長度。
  • indicates whether the email was considered or not (1 = , 0 = not ).

使用 R Open 來探索資料集

讓我們檢查數據,並使用 R 來執行一些基本的機器學習。 DSVM 隨附預安裝CRAN R。

若要取得本逐步解說中使用的程式碼範例複本,請使用 git 來複製 Azure-Machine-Learning-Data-Science 存放庫。 Git 會預先安裝在 DSVM 上。 在 git 命令列,執行:

git clone https://github.com/Azure/Azure-MachineLearning-DataScience.git

開啟終端機視窗,並在 R 互動式主控台中啟動新的 R 工作階段。 若要匯入資料並設定環境,請執行:

data <- read.csv("spambaseHeaders.data")
set.seed(123)

此程式代碼範例會顯示每個資料列的摘要統計資料:

summary(data)

針對資料的不同檢視︰

str(data)

此檢視會顯示每個變數的類型,以及數據集中的前幾個值。

「spam」 資料行已讀取為整數,但它實際上是類別變數 (或係數)。 若要設定其類型︰

data$spam <- as.factor(data$spam)

如需一些探勘分析,請使用 ggplot2 套件,這是 R 的熱門圖形連結庫。ggplot2 套件已預安裝於 DSVM 上。 根據稍早顯示的摘要資料,我們擁有關於驚嘆號字元出現頻率的摘要統計資料。 若要在這裡繪製這些頻率,請執行下列命令:

library(ggplot2)
ggplot(data) + geom_histogram(aes(x=char_freq_exclamation), binwidth=0.25)

因為零條形圖扭曲繪圖,所以讓我們排除它:

email_with_exclamation = data[data$char_freq_exclamation > 0, ]
ggplot(email_with_exclamation) + geom_histogram(aes(x=char_freq_exclamation), binwidth=0.25)

高於 1 的非平常密度,看起來很有趣。 讓我們只查看該資料:

ggplot(data[data$char_freq_exclamation > 1, ]) + geom_histogram(aes(x=char_freq_exclamation), binwidth=0.25)

然後,按照垃圾郵件與非垃圾郵件進行分割:

ggplot(data[data$char_freq_exclamation > 1, ], aes(x=char_freq_exclamation)) +
geom_density(lty=3) +
geom_density(aes(fill=spam, colour=spam), alpha=0.55) +
xlab("spam") +
ggtitle("Distribution of spam \nby frequency of !") +
labs(fill="spam", y="Density")

這些範例應協助您進行類似的繪圖,並探索其他資料行中的資料。

定型及測試機器學習模型

讓我們訓練一些機器學習模型,以識別數據集中包含垃圾郵件或火腿的電子郵件。 在本節中,我們會定型決策樹模型和隨機樹系模型。 然後,我們會測試預測的正確性。

注意

下列程式碼所使用的 RPART (Recursive Partitioning and Regression Trees,遞迴分割和迴歸樹狀結構) 套件已安裝在 DSVM 上。

首先,讓我們將資料集分割為定型集和測試集:

rnd <- runif(dim(data)[1])
trainSet = subset(data, rnd <= 0.7)
testSet = subset(data, rnd > 0.7)

然後,建立決策樹來分類電子郵件:

require(rpart)
model.rpart <- rpart(spam ~ ., method = "class", data = trainSet)
plot(model.rpart)
text(model.rpart)

結果如下︰

顯示已建立判定樹的圖表。

使用此程式代碼範例來判斷它在定型集上的表現:

trainSetPred <- predict(model.rpart, newdata = trainSet, type = "class")
t <- table(`Actual Class` = trainSet$spam, `Predicted Class` = trainSetPred)
accuracy <- sum(diag(t))/sum(t)
accuracy

若要判斷它在測試集上執行的方式,請執行下列程式代碼:

testSetPred <- predict(model.rpart, newdata = testSet, type = "class")
t <- table(`Actual Class` = testSet$spam, `Predicted Class` = testSetPred)
accuracy <- sum(diag(t))/sum(t)
accuracy

讓我們同時嘗試隨機樹系模型。 隨機樹系會訓練多個判定樹。 它會從所有個別判定樹輸出分類的模式值。 它們能提供更強大的機器學習方法,因為其會校正決策樹模型傾向以過度擬合定型資料集。

require(randomForest)
trainVars <- setdiff(colnames(data), 'spam')
model.rf <- randomForest(x=trainSet[, trainVars], y=trainSet$spam)

trainSetPred <- predict(model.rf, newdata = trainSet[, trainVars], type = "class")
table(`Actual Class` = trainSet$spam, `Predicted Class` = trainSetPred)

testSetPred <- predict(model.rf, newdata = testSet[, trainVars], type = "class")
t <- table(`Actual Class` = testSet$spam, `Predicted Class` = testSetPred)
accuracy <- sum(diag(t))/sum(t)
accuracy

深度學習教學課程和逐步解說

除了以架構為基礎的範例,我們也提供一套完整的逐步解說。 這些逐步解說可協助您在影像、文字語言理解等領域開始開發深度學習應用程式。

  • 跨不同架構執行類神經網路:全面逐步解說,示範如何將程式代碼從一個架構移轉至另一個架構。 它也會示範如何比較架構之間的模型和運行時間效能。

  • 建置端對端解決方案以偵測影像內產品的作法指南:影像偵測技術可以在影像內找出並分類物件。 這項技術可以在許多真實商業領域提供巨大的獎勵。 例如,零售商可以使用這項技術來判斷客戶從貨架上挑選的產品。 這項資訊進而有助於商店管理產品庫存。

  • 音訊的深度學習:此教學課程說明如何針對都市音效資料集上的音訊事件偵測定型深度學習模型。 教學課程提供如何使用音訊資料的概觀。

  • 文字文件的分類:本逐步解說示範如何建置和定型兩個不同的類神經網路架構:階層式關注網路和長期記憶(LSTM)。 為了分類文字文件,這些神經網路會使用 Keras API 進行深度學習。 Keras 是三個最受歡迎深度學習架構的前端:Microsoft Cognitive Toolkit、TensorFlow 和 Theano。

其他工具

其餘各節說明如何使用Linux DSVM上預安裝的一些工具。 我們會檢查這些工具:

  • XGBoost
  • Python
  • JupyterHub
  • Rattle
  • PostgreSQL 和 SQuirreL SQL
  • Azure Synapse Analytics (先前稱為 SQL DW)

XGBoost

XGBoost 提供快速且正確的推進式決策樹實作。

require(xgboost)
data <- read.csv("spambaseHeaders.data")
set.seed(123)

rnd <- runif(dim(data)[1])
trainSet = subset(data, rnd <= 0.7)
testSet = subset(data, rnd > 0.7)

bst <- xgboost(data = data.matrix(trainSet[,0:57]), label = trainSet$spam, nthread = 2, nrounds = 2, objective = "binary:logistic")

pred <- predict(bst, data.matrix(testSet[, 0:57]))
accuracy <- 1.0 - mean(as.numeric(pred > 0.5) != testSet$spam)
print(paste("test accuracy = ", accuracy))

XGBoost 也可以從 Python 或命令列進行呼叫。

Python

針對 Python 開發,Anaconda Python 散發套件 3.5 和 2.7 會預安裝在 DSVM 上。

注意

Anaconda 散發套件包含 Conda。 您可以使用 Conda 來建立已安裝不同版本或套件的自定義 Python 環境。

讓我們在一些垃圾郵件基底數據集中閱讀,並在 Scikit-learn 中使用支援向量機器分類電子郵件:

import pandas
from sklearn import svm
data = pandas.read_csv("spambaseHeaders.data", sep = ',\s*')
X = data.ix[:, 0:57]
y = data.ix[:, 57]
clf = svm.SVC()
clf.fit(X, y)

若要進行預測︰

clf.predict(X.ix[0:20, :])

為了示範如何發佈 Azure Machine Learning 端點,讓我們建立更基本的模型。 我們使用我們稍早發佈 R 模型時所使用的三個變數:

X = data[["char_freq_dollar", "word_freq_remove", "word_freq_hp"]]
y = data.ix[:, 57]
clf = svm.SVC()
clf.fit(X, y)

JupyterHub

DSVM 中的 Anaconda 散發套件隨附 Jupyter Notebook。 此資源是共用 Python、R 或 Julia 程式代碼和分析的跨平台環境。 Jupyter Notebook 是透過 JupyterHub 來存取。 您可以在 https://<DSVM DNS 名稱或 IP 位址>:8000/ 使用本機 Linux 使用者名稱和密碼來登入。 您可以在 /etc/jupyterhub 中找到所有 JupyterHub 組態檔。

注意

若要從位於目前核心的 Jupyter Notebook 使用 Python 封裝管理員 (透過 pip 命令),請在程式代碼數據格中使用此命令:

 import sys
 ! {sys.executable} -m pip install numpy -y

若要從位於目前核心的 Jupyter Notebook 使用 Conda 安裝程式 (透過 conda 命令),請在程式代碼數據格中使用此命令:

 import sys
 ! {sys.prefix}/bin/conda install --yes --prefix {sys.prefix} numpy

DSVM 上已安裝數個範例筆記本:

注意

Julia 語言也可從 Linux DSVM 上的命令列來使用。

Rattle

您可以使用 RattleRAnalytical T ool To Lasly) 圖形 R 工具進行數據採礦。 Rattle 具有直覺式介面,可讓您輕鬆地載入、瀏覽和轉換資料,以及建置和評估模型。 Rattle:適用於 R 的資料採礦 GUI 提供了示範其功能的逐步解說。

執行下列命令以安裝和啟動 Rattle:

if(!require("rattle")) install.packages("rattle")
require(rattle)
rattle()

注意

您不需要在 DSVM 上安裝 Rattle。 不過,當 Rattle 開啟時,系統可能會提示您安裝其他套件。

Rattle 使用索引標籤式介面。 大部分索引標籤會對應至 Team Data Science Process 中的步驟,例如載入資料或探索資料。 資料科學程序會由左到右經歷所有索引標籤。 最後一個索引標籤包含Rattle執行之 R 命令的記錄。

若要載入和設定資料集︰

  1. 若要載入檔案,請選取 [ 數據] 索引 標籤
  2. 選擇 [檔名] 旁的選取器,然後選取 [spambaseHeaders.data]
  3. 若要載入檔案。 選取 [執行]。 您應該會看到每個數據行的摘要,包括其識別的數據類型、其輸入、目標或其他類型的變數,以及唯一值的數目
  4. Rattle 正確地將垃圾郵件數據行識別為目標。 選擇垃圾郵件資料列,然後將 [目標資料類型] 設定[分類]

若要瀏覽資料︰

  1. 選取 [探索] 索引標籤
  2. 若要檢視變數類型和某些摘要統計數據的相關信息,請選取 [摘要>執行]。
  3. 若要檢視關於每個變數的其他類型的統計資料,請選取其他選項,例如 [描述] 或 [基本資訊]

您也可以使用 [探索] 索引標籤來產生更具見解的繪圖。 若要繪製資料的長條圖︰

  1. 選取 散發套件
  2. 針對 [word_freq_remove ] 和 [word_freq_you],選取 [直方圖]
  3. 選取 [執行]。 您應該會在單一圖表視窗中看到這兩個密度繪圖,相較於移除,您在電子郵件中清楚地顯示單字

相互關聯圖也很有趣。 若要建立繪圖:

  1. 針對 [ 類型],選取 [ 相互關聯]
  2. 選取 [執行]
  3. Rattle 會警告您,它建議的上限為 40 個變數。 選取 [ ] 以檢視繪圖

有一些有趣的相互關聯。 例如,技術與 HP實驗室有很強的關聯性。 它也與 650 緊密相互關聯,因為數據集捐贈者的分區代碼是 650。

文字間相互關聯性的數值可在 [探索] 視窗中取得。 舉例來說,值得注意的是 technologyyourmoney 負面相關。

Rattle 可以轉換資料集來處理一些常見的問題。 例如,其可調整功能大小、插補遺漏值、處理離群值,以及移除具有遺漏資料的變數或觀察值。 Rattle 也可以識別觀察值和變數之間的關聯規則。 本簡介逐步解說未涵蓋這些索引標籤。

Rattle 也可以處理叢集分析。 讓我們排除部分功能以讓輸出更方便閱讀。 在 [ 數據] 索引標籤上,選取 每個變數旁邊的 [忽略 ],但下列 10 個專案除外:

  • word_freq_hp
  • word_freq_technology
  • word_freq_george
  • word_freq_remove
  • word_freq_your
  • word_freq_dollar
  • word_freq_money
  • capital_run_length_longest
  • word_freq_business
  • 垃圾郵件

返回 [叢集] 索引標籤。選取 [Kmeans],然後將 [叢集數目] 設定為 [4]。 選取 [執行]。 輸出視窗會顯示結果。 一個叢集有高頻率的 georgehp,而且可能是合法的商務電子郵件。

若要建置基本的決策樹機器學習模型:

  1. 選取 [模型] 索引標籤
  2. 針對 [類型],選取 [樹狀結構]
  3. 選取 [ 執行] 以在輸出視窗中以文字形式顯示樹狀結構
  4. 選取 [繪製] 按鈕以檢視圖形化版本。 判定樹看起來類似於我們稍早使用 rpart 取得的樹狀結構。

Rattle 可以執行數個機器學習方法,並快速評估它們。 這是一項實用的功能。 以下說明做法:

  1. 針對 [ 類型],選取 [ 全部]
  2. 選取 [執行]
  3. 當Rattle完成執行時,您可以選取任何 Type 值,例如 SVM,並檢視結果
  4. 您也可以比較驗證集上的模型效能與 [ 評估 ] 索引標籤。例如,[ 錯誤矩陣 ] 選取項目會顯示驗證集上每個模型的混淆矩陣、整體錯誤和平均類別錯誤。 您也可以繪製 ROC 曲線、執行敏感度分析,以及執行其他類型的模型評估

當您完成模型建置時,請選取 [ 記錄] 索引標籤,以檢視 Rattle 在會話期間執行的 R 程式代碼。 您可以選取 [匯出] 按鈕來加以儲存。

注意

最新版 Rattle 包含一個錯誤 (bug)。 若要修改指令碼或在稍後使用該指令碼重複執行步驟,您必須在記錄文字 Export this log ... 的前方插入 # 字元。

PostgreSQL 和 SQuirreL SQL

DSVM 隨附安裝 PostgreSQL。 PostgreSQL 是一個複雜的關係資料庫,開放原始碼 關係資料庫。 本節說明如何將 spambase 數據集載入 PostgreSQL,然後加以查詢。

在載入資料之前,您必須先允許從 localhost 進行密碼驗證。 在命令提示字元中執行︰

sudo gedit /var/lib/pgsql/data/pg_hba.conf

在組態檔底部附近,數行會詳細說明允許的連接:

# "local" is only for Unix domain socket connections:
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident

IPv4 本機連線 行變更為使用 md5 而非 ident,因此我們可以使用使用者名稱和密碼登入:

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5

然後,重新啟動 PostgreSQL 服務:

sudo systemctl restart postgresql

若要以內建 postgres 使用者身分啟動 psql (PostgreSQL 的互動終端機),請執行下列命令:

sudo -u postgres psql

使用您用來登入的 Linux 帳戶用戶名稱,建立新的用戶帳戶。 建立密碼:

CREATE USER <username> WITH CREATEDB;
CREATE DATABASE <username>;
ALTER USER <username> password '<password>';
\quit

登入 psql:

psql

將資料匯入到新資料庫:

CREATE DATABASE spam;
\c spam
CREATE TABLE data (word_freq_make real, word_freq_address real, word_freq_all real, word_freq_3d real,word_freq_our real, word_freq_over real, word_freq_remove real, word_freq_internet real,word_freq_order real, word_freq_mail real, word_freq_receive real, word_freq_will real,word_freq_people real, word_freq_report real, word_freq_addresses real, word_freq_free real,word_freq_business real, word_freq_email real, word_freq_you real, word_freq_credit real,word_freq_your real, word_freq_font real, word_freq_000 real, word_freq_money real,word_freq_hp real, word_freq_hpl real, word_freq_george real, word_freq_650 real, word_freq_lab real,word_freq_labs real, word_freq_telnet real, word_freq_857 real, word_freq_data real,word_freq_415 real, word_freq_85 real, word_freq_technology real, word_freq_1999 real,word_freq_parts real, word_freq_pm real, word_freq_direct real, word_freq_cs real, word_freq_meeting real,word_freq_original real, word_freq_project real, word_freq_re real, word_freq_edu real,word_freq_table real, word_freq_conference real, char_freq_semicolon real, char_freq_leftParen real,char_freq_leftBracket real, char_freq_exclamation real, char_freq_dollar real, char_freq_pound real, capital_run_length_average real, capital_run_length_longest real, capital_run_length_total real, spam integer);
\copy data FROM /home/<username>/spambase.data DELIMITER ',' CSV;
\quit

現在,讓我們使用 SQuirreL SQL 探索數據並執行一些查詢,這是一種圖形化工具,可透過 JDBC 驅動程式與資料庫互動。

首先,在 [ 應用程式] 功能表上,開啟 SQuirreL SQL。 若要設定驅動程式︰

  1. 選取 Windows>檢視驅動程式
  2. 以滑鼠右鍵按兩下 PostgreSQL ,然後選取 [ 修改驅動程式]
  3. 選擇 [額外類別路徑>新增]
  4. 針對 [檔名],輸入 /usr/share/java/jdbcdrivers/postgresql-9.4.1208.jre6.jar
  5. 選取 [ 開啟]
  6. 選取 [列出驅動程式]。 針對 [類別名稱],選取 org.postgresql.Driver,然後選取 [ 確定]

若要設定與本機伺服器的連線︰

  1. 選取 [Windows]>[檢視別名]
  2. 選取 + 按鈕以建立新的別名。 針對新的別名名稱,輸入 垃圾郵件資料庫
  3. 針對 [ 驅動程式],選取 [PostgreSQL]
  4. 將 URL 設定為 jdbc:postgresql://localhost/spam
  5. 輸入您的使用者名稱和密碼
  6. 選取確定
  7. 若要開啟 [連線 ion] 視窗,請按兩下 [垃圾郵件] 資料庫別名
  8. 選取連線

若要執行一些查詢︰

  1. 選取 [SQL] 索引標籤
  2. 在 [SQL] 索引標籤端的查詢方塊中,輸入基本查詢:例如,SELECT * from data;
  3. 按 Ctrl+Enter 執行查詢。 根據預設,SQuirreL SQL 會從查詢傳回前 100 個數據列

您可以執行更多查詢來探索此資料。 例如,「make」 一字在垃圾郵件和非垃圾郵件之間的出現頻率有何差異?

SELECT avg(word_freq_make), spam from data group by spam;

經常包含 3d 的電子郵件特性為何?

SELECT * from data order by word_freq_3d desc;

大部分出現 3d 的電子郵件都是明顯的垃圾郵件。 此資訊可能有助於建置預測性模型來分類電子郵件。

針對使用儲存在 PostgreSQL 資料庫中的數據進行機器學習, MADlib 運作良好。

Azure Synapse Analytics (先前稱為 SQL DW)

Azure Synapse Analytics 是以雲端為基礎的向外延展資料庫,可處理大量關係型和非關係型數據。 如需詳細資訊,請瀏覽 什麼是 Azure Synapse Analytics?

若要連線到數據倉儲並建立資料表,請從命令提示字元執行此命令:

sqlcmd -S <server-name>.database.windows.net -d <database-name> -U <username> -P <password> -I

在 sqlcmd 提示字元中,執行下列命令:

CREATE TABLE spam (word_freq_make real, word_freq_address real, word_freq_all real, word_freq_3d real,word_freq_our real, word_freq_over real, word_freq_remove real, word_freq_internet real,word_freq_order real, word_freq_mail real, word_freq_receive real, word_freq_will real,word_freq_people real, word_freq_report real, word_freq_addresses real, word_freq_free real,word_freq_business real, word_freq_email real, word_freq_you real, word_freq_credit real,word_freq_your real, word_freq_font real, word_freq_000 real, word_freq_money real,word_freq_hp real, word_freq_hpl real, word_freq_george real, word_freq_650 real, word_freq_lab real,word_freq_labs real, word_freq_telnet real, word_freq_857 real, word_freq_data real,word_freq_415 real, word_freq_85 real, word_freq_technology real, word_freq_1999 real,word_freq_parts real, word_freq_pm real, word_freq_direct real, word_freq_cs real, word_freq_meeting real,word_freq_original real, word_freq_project real, word_freq_re real, word_freq_edu real,word_freq_table real, word_freq_conference real, char_freq_semicolon real, char_freq_leftParen real,char_freq_leftBracket real, char_freq_exclamation real, char_freq_dollar real, char_freq_pound real, capital_run_length_average real, capital_run_length_longest real, capital_run_length_total real, spam integer) WITH (CLUSTERED COLUMNSTORE INDEX, DISTRIBUTION = ROUND_ROBIN);
GO

使用 bcp 複製資料:

bcp spam in spambaseHeaders.data -q -c -t  ',' -S <server-name>.database.windows.net -d <database-name> -U <username> -P <password> -F 1 -r "\r\n"

注意

下載的檔案包含 Windows 樣式行尾結束符號。 Bcp 工具需要 Unix 樣式行尾結束符號。 使用 -r 旗標來告訴 bcp 關於這一點。

然後,使用 sqlcmd 進行查詢:

select top 10 spam, char_freq_dollar from spam;
GO

您也可以使用 SQuirreL SQL 進行查詢。 使用 SQL Server JDBC 驅動程式,遵循類似於 PostgreSQL 的步驟。 JDBC 驅動程式位於 /usr/share/java/jdbcdrivers/sqljdbc42.jar 資料夾中。