本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
開始使用
此教學課程會逐步解說如何使用 Amazon Athena 來查詢資料。您將會根據在 Amazon Simple Storage Service 中存放的範例資料來建立資料表、查詢資料表,並檢查查詢結果。
此教學課程中使用線上資源,因此將向您就執行的查詢收費。您不需為本教學課程所使用的位置中的範例資料付費,但如果您上傳自己的資料檔案至 Amazon S3,則需付費。
必要條件
-
若您尚未註冊,請先註冊 AWS 帳戶。
-
使用您用於 Athena 的相同 AWS 區域 帳戶 (例如美國西部 (奧勒岡)) 和帳戶,請依照下列步驟在 Amazon S3 中建立儲存貯體來保存您的 Athena 查詢結果。您可將此儲存貯體設定為您的查詢輸出位置。
步驟 1:建立資料庫
首先,您需要在 Athena 中建立資料庫。
建立 Athena 資料庫
前往 https://console.aws.amazon.com/athena/
開啟 Athena 主控台。 -
如果這是您第一次造訪您目前 AWS 區域中的 Athena 主控台,請選擇 Explore the query editor (探索查詢編輯器) 以開啟查詢編輯器。此外,Athena 會於查詢編輯器中開啟。
-
選擇 Edit Settings (編輯設定) 以在 Amazon S3 中設定查詢結果位置。
-
對於 Manage settings (管理設定),請執行下列其中一項動作:
-
在 Location of query result (查詢結果的位置) 方塊中,輸入您在 Amazon S3 中為查詢結果建立的儲存貯體路徑。在路徑中加上
s3://
作為字首。 -
選擇 Browse S3 (瀏覽 S3),選擇您在目前區域建立的 Amazon S3 儲存貯體,然後選擇 Choose (選擇)。
-
-
選擇儲存。
-
選擇 Editor (編輯器) 以切換至查詢編輯器。
-
在導覽窗格的右側,您可以使用 Athena 查詢編輯器來輸入和執行查詢和陳述式。
-
若要建立名為
mydatabase
的資料庫,請輸入以下 CREATE DATABASE 陳述式。CREATE DATABASE mydatabase
-
選擇 Run (執行) 或按
Ctrl+ENTER
。 -
從左側的 Database (資料庫) 清單中,選擇
mydatabase
設為您目前的資料庫。
步驟 2:建立資料表
現在您有一個資料庫,您可以為其建立 Athena 資料表。您建立的表格將根據位置中的範例 Amazon CloudFront 日誌資料s3://athena-examples-
,myregion
/cloudfront/plaintext/myregion
是您目前 AWS 區域的位置。
日誌資料範例採用製表符分隔值 (TSV) 格式,這表示製表符字元會用作分隔符號來分隔欄位。資料看起來會如以下範例:出於可讀性考量,摘錄中的製表符已轉換為空格並縮短了最終欄位。
2014-07-05 20:00:09 DFW3 4260 10.0.0.15 GET eabcd12345678.cloudfront.net /test-image-1.jpeg 200 - Mozilla/5.0[...]
2014-07-05 20:00:09 DFW3 4252 10.0.0.15 GET eabcd12345678.cloudfront.net /test-image-2.jpeg 200 - Mozilla/5.0[...]
2014-07-05 20:00:10 AMS1 4261 10.0.0.15 GET eabcd12345678.cloudfront.net /test-image-3.jpeg 200 - Mozilla/5.0[...]
若要讓 Athena 能夠讀取此資料,您可以建立如下所示的簡單CREATE
EXTERNAL TABLE
陳述式。建立資料表的陳述式會定義與資料對應的資料欄、指定資料的分隔方式,並指定 Amazon S3 中包含資料範例的位置。請注意,由於 Athena 希望掃描資料夾中的所有檔案,因此LOCATION
子句指定了 Amazon S3 資料夾位置,而不是特定檔案。
不要使用這個例子,因為它有一個重要的限制,將很快解釋。
CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_logs (
`Date` DATE,
Time STRING,
Location STRING,
Bytes INT,
RequestIP STRING,
Method STRING,
Host STRING,
Uri STRING,
Status INT,
Referrer STRING,
ClientInfo STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
LOCATION 's3://athena-examples-my-region
/cloudfront/plaintext/';
此範例會建立名為 cloudfront_logs
的資料表,並為每個欄位指定名稱和資料類型。這些欄位會成為資料表中的資料欄。因為date
是保留字,所以會使用反引號 (`) 字元逸出。 ROW FORMAT DELIMITED
意味著 Athena 將使用調用的默認庫LazySimpleSerDe來完成解析數據的實際工作。此範例也會指定欄位以製表符分隔 (FIELDS TERMINATED BY '\t'
),且檔案中的每個記錄以新行字元(LINES TERMINATED BY '\n
) 結尾。最後,LOCATION
子句會指定要讀取的實際資料所在的 Amazon S3 中的路徑。
如果您有自己的定位鍵或以逗號分隔的資料,只要欄位不包含巢狀資訊,就可以使用如剛顯示的範例之類的CREATE
TABLE
陳述式。但是,如果您有類似的欄,其中包ClientInfo
含使用不同分隔符號的巢狀資訊,則需要使用不同的方法。
從 ClientInfo 欄位中擷取資料
查看示例數據,以下是最終字段的完整示例ClientInfo
:
Mozilla/5.0%20(Android;%20U;%20Windows%20NT%205.1;%20en-US;%20rv:1.9.0.9)%20Gecko/2009040821%20IE/3.0.9
如您所見,此欄位為多重值。因為剛剛顯示的範例CREATE
TABLE
陳述式會將定位字元指定為欄位分隔符號,因此無法將欄ClientInfo
位內的個別元件分解為不同的資料行。所以,一個新的CREATE TABLE
聲明是必需的。
要從ClientInfo
字段內的值創建列,可以使用包含正則表達式組的正則表達式CREATE TABLE
陳述式中使用 regex,則請使用如下所示的語法。此語法指示 Athena 使用 正則表 SerDe 程式庫和您指定的規則表達式。
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ("input.regex" = "
regular_expression
")
規則表達式對於根據複雜的 CSV 或 TSV 資料建立資料表非常有用,但是很難寫入和維護。幸運的是,還有其他程式庫可用於 JSON、Parquet 和 ORC 等格式。如需詳細資訊,請參閱支援的 SerDes 和資料格式。
現在您已準備好要開始在 Athena 查詢編輯器中建立資料表。所以該 CREATE
TABLE
陳述式和 regex 正好提供給您。
如何在 Athena 中建立資料表
-
在導覽窗格中,針對 Database (資料庫),請確認
mydatabase
已選取。 -
若要在查詢編輯器中給自己更多空間,您可以選擇箭頭圖示來收合導覽窗格。
-
如需建立新查詢的索引標籤,請選擇加號 (+) 以登入查詢編輯器。一次最多可以開啟十個查詢標籤。
-
如需關閉一個或多個查詢索引標籤,請選擇加號旁邊的箭頭。如需一次關閉所有索引標籤,請選擇箭頭,然後選擇 Close all tabs (關閉所有索引標籤)。
-
在查詢窗格中,輸入下列
CREATE EXTERNAL TABLE
陳述式。Regex 會細分來自日誌資料中ClientInfo
欄位的作業系統、瀏覽器和瀏覽器版本資訊。注意
以下範例中使用的正則表達式旨在與
athena-examples
Amazon S3 位置中公開可用的範例 CloudFront 日誌資料搭配使用,僅供說明。如需查詢標準記錄檔和即時 CloudFront 記錄檔的更多 up-to-date 正則運算式,請參閱。查詢 Amazon CloudFront 日誌CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_logs ( `Date` DATE, Time STRING, Location STRING, Bytes INT, RequestIP STRING, Method STRING, Host STRING, Uri STRING, Status INT, Referrer STRING, os STRING, Browser STRING, BrowserVersion STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "^(?!#)([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+[^\(]+[\(]([^\;]+).*\%20([^\/]+)[\/](.*)$" ) LOCATION 's3://athena-examples-
myregion
/cloudfront/plaintext/'; -
在
LOCATION
陳述式中,將myregion
取代 AWS 區域 為您目前使用的 (例如us-west-1
)。 -
選擇執行。
系統會建立資料表
cloudfront_logs
,且資料表顯示在mydatabase
資料庫的 Tables (資料表) 清單下。
步驟 3:查詢資料
現在您已在 Athena 中根據 Amazon S3 的資料建立 cloudfront_logs
資料表,您可以對資料表執行 SQL 查詢,並在 Athena 中查看結果。如需有關在 Athena 中使用 SQL 的詳細資訊,請參閱 Athena 的 SQL 參考。
若要執行查詢
-
選擇加號 (+) 打開一個新的查詢索引標籤,並在查詢窗格中輸入以下 SQL 陳述式。
SELECT os, COUNT(*) count FROM cloudfront_logs WHERE date BETWEEN date '2014-07-05' AND date '2014-08-05' GROUP BY os
-
選擇執行。
結果類似如下:
-
若要儲存查詢結果到
.csv
檔案,請選擇 Download resutls (下載結果)。 -
若要檢視或執行先前的查詢,請選擇 Recent queries (近期查詢) 索引標籤。
-
若要從 Recent queries (近期查詢) 索引標籤下載先前查詢的結果,請選取查詢,然後選擇 Download results (下載結果)。查詢會保留 45 天。
-
若要將一個或多個最近使用的 SQL 查詢字串下載至 CSV 檔案,請選擇 Download CSV (下載 CSV)。
如需詳細資訊,請參閱 使用查詢結果、近期查詢和輸出檔案。
儲存查詢
您可以使用名稱儲存您在查詢編輯器中建立或編輯的查詢。Athena 會將這些查詢儲存在 Saved queries (已儲存的查詢) 索引標籤。您可以使用 Saved queries (已儲存的查詢) 索引標籤重新呼叫、執行、重新命名或刪除已儲存的查詢。如需詳細資訊,請參閱 使用已儲存的查詢。
鍵盤快速鍵和預先輸入的建議
Athena 查詢編輯器為各種動作提供了不同的鍵盤快速鍵,例如執行查詢、格式化查詢、列操作以及尋找及取代。如需詳細資訊和快速鍵的完整清單,請參閱 AWS 大數據部落格中的使用 Amazon Athena 查詢編輯器中的鍵盤快速鍵提高生產力
Athena 查詢編輯器支援預先輸入的程式碼建議,以獲得更快的查詢編寫體驗。為協助您更準確且更有效率地編寫 SQL 查詢,其提供了以下功能:
-
當您輸入時,將會即時顯示關鍵字、本機變數、程式碼片段和目錄項目。
-
當您輸入資料庫名稱或資料表名稱,並在其後加上一個點時,編輯器會輕鬆顯示可供選擇的資料表和資料欄清單。
-
將滑鼠游標移至程式碼片段建議上時,該概要會顯示程式碼片段語法和用法的簡要概觀。
-
為提高程式碼可讀性,關鍵字及其醒目提示規則也已更新,符合 Trino 和 Hive 的最新語法。
此功能預設為啟用。若要啟用或停用此功能,請使用查詢編輯器視窗右下角的程式碼編輯器偏好設定 (齒輪圖示)。
連接至其他資料來源
本教學課程使用 Amazon S3 中 CSV 格式的資料來源。如需搭配使用 Athena 的詳細資訊 AWS Glue,請參閱用於連接 AWS Glue 到 Amazon S3 中的資料來源。您也可以使用 ODBC 和 JDBC 驅動程式、外部 Hive 中繼存放區和 Athena 資料來源連接器,將 Athena 連接到各種資料來源。如需詳細資訊,請參閱連線至資料來源。