Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Ora che hai un database, puoi creare una tabella Athena. La tabella che creerai si baserà su esempi di dati di CloudFront log Amazon nella posizione in cui s3://athena-examples-
si myregion
/cloudfront/plaintext/myregion
trova la tua posizione attuale Regione AWS.
I dati di log di esempio sono in formato valori separati da tabulazioni (TSV), il che significa che un carattere di tabulazione viene utilizzato come delimitatore per separare i campi. I dati vengono mostrati come nell'esempio seguente. Per la leggibilità, le tabulazioni nell'estratto sono state convertite in spazi e il campo finale è stato abbreviato.
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[...]
Per consentire ad Athena di leggere questi dati, puoi creare una CREATE
EXTERNAL TABLE
dichiarazione semplice come la seguente. L'istruzione che crea la tabella definisce le colonne che mappano i dati, specifica la modalità di delimitazione dei dati e specifica la posizione Amazon S3 che contiene i dati di esempio. Tieni presente che, poiché Athena prevede di scansionare tutti i file in una cartella, la LOCATION
clausola specifica una posizione della cartella Amazon S3, non un file specifico.
Non utilizzate ancora questo esempio in quanto presenta un'importante limitazione che verrà spiegata a breve.
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/';
L'esempio crea una tabella denominata cloudfront_logs
e specifica un nome e un tipo di dati per ogni campo. Questi campi diventano le colonne nella tabella. Poiché date
è una parola riservata, viene eliminata con caratteri backtick (`). ROW FORMAT DELIMITED
significa che Athena utilizzerà una libreria predefinita chiamata LazySimpleSerDeper eseguire l'effettivo lavoro di analisi dei dati. L'esempio specifica inoltre che i campi sono separati da tabulazioni (FIELDS TERMINATED BY '\t'
) e che ogni record nel file termina con un carattere di nuova riga (LINES TERMINATED BY '\n
). Infine, la clausola LOCATION
specifica il percorso in Amazon S3 in cui si trovano i dati effettivi da leggere.
Se disponi di dati personalizzati separati da tabulazioni o virgole, puoi utilizzare un'CREATE
TABLE
istruzione come nell'esempio appena presentato, purché i campi non contengano informazioni annidate. Tuttavia, se una colonna del genere contiene informazioni annidate ClientInfo
che utilizzano un delimitatore diverso, è necessario un approccio diverso.
Estrazione di dati dal campo ClientInfo
Guardando i dati di esempio, ecco un esempio completo del campo ClientInfo
finale:
Mozilla/5.0%20(Android;%20U;%20Windows%20NT%205.1;%20en-US;%20rv:1.9.0.9)%20Gecko/2009040821%20IE/3.0.9
Come puoi vedere, questo campo è multivalore. Poiché l'CREATE
TABLE
istruzione di esempio appena presentata specifica le tabulazioni come delimitatori di campo, non è possibile suddividere i componenti separati all'interno del ClientInfo
campo in colonne separate. Pertanto, è necessaria una nuova CREATE TABLE
dichiarazione.
Per creare colonne dai valori all'interno del ClientInfo
campo, puoi usare un'espressione regolareCREATE TABLE
, utilizzare la sintassi simile alla seguente. Questa sintassi indica ad Athena di utilizzare la libreria Regex SerDe e l'espressione regolare specificata.
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ("input.regex" = "
regular_expression
")
Le espressioni regolari possono essere utili per creare tabelle a partire da TSV dati complessi CSV o complessi, ma possono essere difficili da scrivere e gestire. Fortunatamente, ci sono altre librerie che puoi usare per formati come JSON Parquet eORC. Per ulteriori informazioni, consulta Scegli un file SerDe per i tuoi dati.
Ora è possibile creare la tabella nell'editor di query Athena. L'istruzione CREATE
TABLE
e la regex ti vengono forniti.
Per creare una tabella in Athena
-
Nel pannello di navigazione, in Database, assicurarsi che
mydatabase
sia selezionato. -
Per avere più spazio nell'editor di query, è possibile scegliere l'icona a forma di freccia e comprimere il pannello di navigazione.
-
Scegli il segno più (+) nell'editor delle query per creare una scheda per una nuova query. È possibile avere fino a dieci schede di query aperte contemporaneamente.
-
Per chiudere una o più schede di query, scegli la freccia accanto al segno più. Per chiudere tutte le schede contemporaneamente, scegliere la freccia, quindi scegli Close all tabs (Chiudi tutte le schede).
-
Nel riquadro delle query inserire la seguente istruzione
CREATE EXTERNAL TABLE
. La regex suddivide le informazioni sul sistema operativo, sul browser e sulla versione del browser dal campoClientInfo
nei dati di log.Nota
L'espressione regolare utilizzata nell'esempio seguente è progettata per funzionare con i dati di CloudFront log di esempio disponibili pubblicamente nella posizione
athena-examples
Amazon S3 ed è solo illustrativa. Per altre up-to-date espressioni regolari che interrogano file di log standard e in tempo reale CloudFront , consulta. Interroga i CloudFront log di AmazonCREATE 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/'; -
Nell'
LOCATION
istruzione, sostituitelamyregion
con quella Regione AWS che state utilizzando attualmente (ad esempio,us-west-1
). -
Seleziona Esegui.
Viene creata la tabella
cloudfront_logs
che appare nell'elenco Tables (Tabelle) del databasemydatabase
.