Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Nachdem Sie nun eine Datenbank haben, können Sie eine Athena-Tabelle dafür erstellen. Die Tabelle, die Sie erstellen, basiert auf CloudFront Amazon-Beispielprotokolldaten an dem Standorts3://athena-examples-
, an dem myregion
/cloudfront/plaintext/myregion
sich Ihre aktuellen Daten befinden AWS-Region.
Die Beispielprotokolldaten liegen im Format mit tabulatorgetrennten Werten (TSV) vor, was bedeutet, dass ein Tabulatorzeichen als Trennzeichen zur Trennung der Felder verwendet wird. Die Daten sollten wie das folgende Beispiel aussehen. Zur besseren Lesbarkeit wurden die Tabulatoren im Auszug in Leerzeichen umgewandelt und das letzte Feld gekürzt.
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[...]
Damit Athena diese Daten lesen kann, könnten Sie eine einfache CREATE
EXTERNAL TABLE
Anweisung wie die folgende erstellen. Die Anweisung, mit der die Tabelle erstellt wird, definiert Spalten, die den Daten zugeordnet werden, legt fest, wie die Daten getrennt werden, und gibt den Amazon-S3-Speicherort an, an dem die Beispieldaten enthalten sind. Beachten Sie, dass Athena erwartet, alle Dateien in einem Ordner zu scannen, weshalb die LOCATION
Klausel einen Amazon S3 S3-Ordnerspeicherort und keine bestimmte Datei angibt.
Verwenden Sie dieses Beispiel noch nicht, da es eine wichtige Einschränkung hat, die in Kürze erläutert wird.
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/';
Im Beispiel wird eine Tabelle mit dem Namen cloudfront_logs
erstellt und für jedes Feld ein Name und ein Datentyp angegeben. Diese Felder werden zu den Spalten in der Tabelle. Da es date
sich um ein reserviertes Wort handelt, wird es mit Backtick-Zeichen (`) maskiert. ROW FORMAT DELIMITED
bedeutet, dass Athena eine Standardbibliothek verwendet, die aufgerufen wird LazySimpleSerDe, um die eigentliche Arbeit des Parsens der Daten zu erledigen. Das Beispiel gibt auch an, dass die Felder durch Tabulatoren getrennt sind (FIELDS TERMINATED BY '\t'
) und dass jeder Datensatz in der Datei mit einem Zeilenumbruchzeichen (LINES TERMINATED BY '\n
) endet. Schließlich gibt die LOCATION
-Klausel den Pfad in Amazon S3 an, in dem sich die tatsächlich zu lesenden Daten befinden.
Wenn Sie über eigene Tabulatoren oder durch Kommas getrennte Daten verfügen, können Sie eine CREATE
TABLE
Anweisung wie das gerade vorgestellte Beispiel verwenden, sofern Ihre Felder keine verschachtelten Informationen enthalten. Wenn Sie jedoch eine solche Spalte haben, die verschachtelte Informationen enthältClientInfo
, die ein anderes Trennzeichen verwenden, ist ein anderer Ansatz erforderlich.
Extrahieren von Daten aus dem Feld ClientInfo
Wenn wir uns die Beispieldaten ansehen, sehen Sie hier ein vollständiges Beispiel für das endgültige FeldClientInfo
:
Mozilla/5.0%20(Android;%20U;%20Windows%20NT%205.1;%20en-US;%20rv:1.9.0.9)%20Gecko/2009040821%20IE/3.0.9
Wie Sie sehen können, ist dieses Feld mehrwertig. Da in der gerade vorgestellten CREATE
TABLE
Beispielanweisung Tabulatoren als Feldtrennzeichen angegeben sind, können die einzelnen Komponenten innerhalb des ClientInfo
Felds nicht in separate Spalten aufgeteilt werden. Daher ist eine neue CREATE TABLE
Anweisung erforderlich.
Um Spalten aus den Werten innerhalb des ClientInfo
Felds zu erstellen, können Sie einen regulären AusdruckCREATE TABLE
-Anweisung zu verwenden, verwenden Sie eine Syntax wie die folgende. Diese Syntax weist Athena an, die Regex SerDe-Bibliothek und den von Ihnen angegebenen regulären Ausdruck zu verwenden.
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ("input.regex" = "
regular_expression
")
Reguläre Ausdrücke können nützlich sein, um Tabellen aus komplexen CSV TSV Daten zu erstellen, können jedoch schwierig zu schreiben und zu verwalten sein. Zum Glück gibt es andere Bibliotheken, die Sie für Formate wie JSON Parquet und verwenden könnenORC. Weitere Informationen finden Sie unter Wählen Sie eine SerDe für Ihre Daten.
Jetzt können Sie die Tabelle im Athena-Abfrage-Editor erstellen. Die CREATE
TABLE
-Anweisung und Regex werden für Sie bereitgestellt.
So erstellen Sie eine Tabelle in Athena
-
Stellen Sie im Navigationsbereich für Database (Datenbank) sicher, dass
mydatabase
ausgewählt ist. -
Um mehr Platz im Abfrageeditor zu schaffen, können Sie das Pfeilsymbol auswählen, um den Navigationsbereich zu reduzieren.
-
Um eine Registerkarte für eine neue Abfrage zu erstellen, wählen Sie im Abfrageeditor das Pluszeichen (+). Sie können bis zu zehn Abfrageregisterkarten gleichzeitig öffnen.
-
Um eine oder mehrere Abfrage-Registerkarten zu schließen, wählen Sie den Pfeil neben dem Pluszeichen aus. Um alle Registerkarten gleichzeitig zu schließen, wählen Sie den Pfeil und wählen Sie dann Close all tabs (Schließen aller Tabs) aus.
-
Geben Sie im Abfragebereich die folgende
CREATE EXTERNAL TABLE
-Anweisung ein. Die Regex bricht die Informationen zu Betriebssystem, Browser und Browserversion aus demClientInfo
-Feld in den Protokolldaten aus.Anmerkung
Die im folgenden Beispiel verwendete Regex ist so konzipiert, dass sie mit den öffentlich verfügbaren CloudFront Beispielprotokolldaten am
athena-examples
Amazon S3 S3-Speicherort funktioniert und dient nur der Veranschaulichung. Weitere reguläre Ausdrücke up-to-date, die sowohl Standard- als auch CloudFront Echtzeit-Protokolldateien abfragen, finden Sie unter. CloudFront Amazon-Logs abfragenCREATE 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/'; -
Ersetzen Sie die
LOCATION
Anweisungmyregion
durch AWS-Region das, was Sie gerade verwenden (z. B.us-west-1
). -
Wählen Sie Ausführen aus.
Die Tabelle „
cloudfront_logs
“ wird erstellt und unter der Liste Tables (Tabellen) für diemydatabase
-Datenbank angezeigt.