選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

步驟 2:建立資料表

焦點模式
步驟 2:建立資料表 - Amazon Athena

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

現在您有一個資料庫,您可以為其建立 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 欄位內的值建立資料欄,您可以使用包含 regex 群組的規則運算式 (regex)。您指定的 regex 群組會成為單獨的資料表資料欄。若要在 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。如需詳細資訊,請參閱 SerDe 為您的資料選擇

現在您已準備好要開始在 Athena 查詢編輯器中建立資料表。所以該 CREATE TABLE 陳述式和 regex 正好提供給您。

如何在 Athena 中建立資料表
  1. 在導覽窗格中,針對 Database (資料庫),請確認 mydatabase 已選取。

  2. 若要在查詢編輯器中給自己更多空間,您可以選擇箭頭圖示來收合導覽窗格。

    選擇箭頭以收合導覽窗格。
  3. 如需建立新查詢的索引標籤,請選擇加號 (+) 以登入查詢編輯器。一次最多可以開啟十個查詢標籤。

    選擇加號圖示以建立新查詢。
  4. 如需關閉一個或多個查詢索引標籤,請選擇加號旁邊的箭頭。如需一次關閉所有索引標籤,請選擇箭頭,然後選擇 Close all tabs (關閉所有索引標籤)。

    選擇箭頭圖示,便可關閉一個或多個查詢索引標籤。
  5. 在查詢窗格中,輸入下列 CREATE EXTERNAL TABLE 陳述式。Regex 會細分來自日誌資料中 ClientInfo 欄位的作業系統、瀏覽器和瀏覽器版本資訊。

    注意

    下列範例中使用的 regex 旨在使用 Amazon S3 athena-examples 位置中公開的範例 CloudFront 日誌資料,且僅供說明之用。如需查詢標準和即時 CloudFront 日誌檔案的更多 up-to-date regexe,請參閱 查詢 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/';
  6. LOCATION陳述式中,myregion將 取代 AWS 區域 為您目前正在使用的 (例如 us-west-1)。

  7. 選擇執行

    系統會建立資料表 cloudfront_logs,且資料表顯示在 mydatabase 資料庫的 Tables (資料表) 清單下。

隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。