Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Setelah kini memiliki basis data, Anda dapat membuat tabel Athena untuk itu. Tabel yang Anda buat akan didasarkan pada sampel data CloudFront log Amazon di lokasis3://athena-examples-
, di mana myregion
/cloudfront/plaintext/myregion
Anda saat ini Wilayah AWS.
Data log sampel dalam format nilai (TSV) yang dipisahkan tab, yang berarti bahwa karakter tab digunakan sebagai pembatas untuk memisahkan bidang. Data akan terlihat seperti berikut contoh berikut. Untuk keterbacaan, tab dalam kutipan telah dikonversi ke spasi dan bidang akhir dipersingkat.
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[...]
Untuk mengaktifkan Athena membaca data ini, Anda dapat membuat CREATE
EXTERNAL TABLE
pernyataan langsung seperti berikut ini. Pernyataan yang membuat tabel mendefinisikan kolom yang memetakan ke data, menentukan bagaimana data dibatasi, dan menentukan lokasi Amazon S3 yang berisi data sampel. Perhatikan bahwa karena Athena mengharapkan untuk memindai semua file dalam folder, LOCATION
klausa menentukan lokasi folder Amazon S3, bukan file tertentu.
Jangan gunakan contoh ini dulu karena memiliki batasan penting yang akan segera dijelaskan.
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/';
Contoh membuat tabel yang disebut cloudfront_logs
dan menentukan nama dan tipe data untuk setiap bidang. Bidang ini menjadi kolom dalam tabel. Karena date
merupakan kata yang dicadangkan, itu lolos dengan karakter backtick (`). ROW FORMAT DELIMITED
berarti Athena akan menggunakan pustaka default yang dipanggil LazySimpleSerDeuntuk melakukan pekerjaan sebenarnya dari parsing data. Contoh ini juga menetapkan bahwa bidang dipisahkan tab (FIELDS TERMINATED BY '\t'
) dan bahwa setiap catatan dalam file berakhir dalam karakter baris baru (LINES TERMINATED BY '\n
). Terakhir, klausa LOCATION
menentukan jalur di Amazon S3, tempat data aktual yang akan dibaca berada.
Jika Anda memiliki tab sendiri atau data yang dipisahkan koma, Anda dapat menggunakan CREATE
TABLE
pernyataan seperti contoh yang baru saja disajikan—selama bidang Anda tidak berisi informasi bersarang. Namun, jika Anda memiliki kolom seperti ClientInfo
itu berisi informasi bersarang yang menggunakan pembatas berbeda, diperlukan pendekatan yang berbeda.
Mengekstrak data dari lapangan ClientInfo
Melihat data sampel, berikut adalah contoh lengkap dari bidang akhirClientInfo
:
Mozilla/5.0%20(Android;%20U;%20Windows%20NT%205.1;%20en-US;%20rv:1.9.0.9)%20Gecko/2009040821%20IE/3.0.9
Seperti yang bisa Anda lihat, bidang ini memiliki beberapa nilai. Karena CREATE
TABLE
pernyataan contoh yang baru saja disajikan menentukan tab sebagai pembatas bidang, itu tidak dapat memecah komponen terpisah di dalam ClientInfo
bidang menjadi kolom terpisah. Jadi, diperlukan CREATE TABLE
pernyataan baru.
Untuk membuat kolom dari nilai di dalam ClientInfo
bidang, Anda dapat menggunakan ekspresi regulerCREATE TABLE
, gunakan sintaks seperti berikut. Sintaks ini menginstruksikan Athena untuk menggunakan Regex SerDe dan ekspresi reguler yang Anda tentukan.
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ("input.regex" = "
regular_expression
")
Ekspresi reguler dapat berguna untuk membuat tabel dari kompleks CSV atau TSV data tetapi bisa sulit untuk ditulis dan dipelihara. Untungnya, ada perpustakaan lain yang dapat Anda gunakan untuk format sepertiJSON, Parket, dan. ORC Untuk informasi selengkapnya, lihat Pilih SerDe untuk data Anda.
Sekarang Anda siap untuk membuat tabel di editor kueri Athena. Pernyataan dan regex CREATE
TABLE
disediakan untuk Anda.
Untuk membuat tabel di Athena
-
Di panel navigasi, untuk Database, pastikan yang
mydatabase
dipilih. -
Untuk memberi diri Anda lebih banyak ruang di editor kueri, Anda dapat memilih ikon panah untuk menutup panel navigasi.
-
Untuk membuat tab untuk kueri baru, pilih tanda plus (+) di editor kueri. Anda dapat membuka hingga sepuluh tab kueri sekaligus.
-
Untuk menutup satu atau beberapa tab kueri, pilih panah di sebelah tanda plus. Untuk menutup semua tab sekaligus, pilih panah, lalu pilih Tutup semua tab.
-
Dalam panel kueri, masukkan persyaratan
CREATE EXTERNAL TABLE
berikut. Regex memecahkan sistem operasi, browser, dan informasi versi browser dari bidangClientInfo
di data log.catatan
Regex yang digunakan dalam contoh berikut dirancang untuk bekerja dengan data CloudFront log sampel yang tersedia untuk umum di lokasi
athena-examples
Amazon S3 dan hanya ilustratif. Untuk up-to-date regex lainnya yang menanyakan file CloudFront log standar dan real-time, lihat. Kueri CloudFront log 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/'; -
Dalam
LOCATION
pernyataan tersebut, gantimyregion
dengan Wilayah AWS yang sedang Anda gunakan (misalnya,us-west-1
). -
Pilih Jalankan.
Tabel
cloudfront_logs
dibuat dan muncul di bawah daftar Tabel untuk basis datamydatabase
.