

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Buat tabel untuk CloudFront log di Athena menggunakan proyeksi partisi dengan JSON
<a name="create-cloudfront-table-partition-json"></a>

Anda dapat mengurangi runtime kueri dan mengotomatiskan manajemen partisi dengan fitur proyeksi partisi Athena. Proyeksi partisi secara otomatis menambahkan partisi baru saat data baru ditambahkan. Ini menghapus kebutuhan bagi Anda untuk menambahkan partisi secara manual dengan menggunakan`ALTER TABLE ADD PARTITION`.

Contoh berikut CREATE TABLE pernyataan otomatis menggunakan proyeksi partisi pada CloudFront log dari CloudFront distribusi tertentu sampai hadir untuk satu Wilayah AWS. Setelah Anda menjalankan kueri dengan sukses, Anda dapat meminta tabel.

```
CREATE EXTERNAL TABLE `cloudfront_logs_pp`(
  `date` string, 
  `time` string, 
  `x-edge-location` string, 
  `sc-bytes` string, 
  `c-ip` string, 
  `cs-method` string, 
  `cs(host)` string, 
  `cs-uri-stem` string, 
  `sc-status` string, 
  `cs(referer)` string, 
  `cs(user-agent)` string, 
  `cs-uri-query` string, 
  `cs(cookie)` string, 
  `x-edge-result-type` string, 
  `x-edge-request-id` string, 
  `x-host-header` string, 
  `cs-protocol` string, 
  `cs-bytes` string, 
  `time-taken` string, 
  `x-forwarded-for` string, 
  `ssl-protocol` string, 
  `ssl-cipher` string, 
  `x-edge-response-result-type` string, 
  `cs-protocol-version` string, 
  `fle-status` string, 
  `fle-encrypted-fields` string, 
  `c-port` string, 
  `time-to-first-byte` string, 
  `x-edge-detailed-result-type` string, 
  `sc-content-type` string, 
  `sc-content-len` string, 
  `sc-range-start` string, 
  `sc-range-end` string)
  PARTITIONED BY(
         distributionid string,
         year int,
         month int,
         day int,
         hour int )
ROW FORMAT SERDE 
  'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ( 
  'paths'='c-ip,c-port,cs(Cookie),cs(Host),cs(Referer),cs(User-Agent),cs-bytes,cs-method,cs-protocol,cs-protocol-version,cs-uri-query,cs-uri-stem,date,fle-encrypted-fields,fle-status,sc-bytes,sc-content-len,sc-content-type,sc-range-end,sc-range-start,sc-status,ssl-cipher,ssl-protocol,time,time-taken,time-to-first-byte,x-edge-detailed-result-type,x-edge-location,x-edge-request-id,x-edge-response-result-type,x-edge-result-type,x-forwarded-for,x-host-header') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_ID/CloudFront/'
TBLPROPERTIES (
  'projection.distributionid.type'='enum',
  'projection.distributionid.values'='E2Oxxxxxxxxxxx',
  'projection.day.range'='01,31', 
  'projection.day.type'='integer', 
  'projection.day.digits'='2', 
  'projection.enabled'='true', 
  'projection.month.range'='01,12', 
  'projection.month.type'='integer', 
  'projection.month.digits'='2', 
  'projection.year.range'='2025,2026', 
  'projection.year.type'='integer', 
  'projection.hour.range'='00,23',
  'projection.hour.type'='integer',
  'projection.hour.digits'='2',
  'storage.location.template'='s3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_ID/CloudFront/${distributionid}/${year}/${month}/${day}/${hour}/')
```

Berikut ini adalah beberapa pertimbangan untuk properti yang digunakan dalam contoh sebelumnya.
+ **Nama tabel** - Nama *`cloudfront_logs_pp`* tabel dapat diganti. Anda dapat mengubahnya menjadi nama apa pun yang Anda inginkan.
+ **Lokasi** - Ubah `s3://amzn-s3-demo-bucket/AWSLogs/AWS_ACCOUNT_ID/` untuk menunjuk ke bucket Amazon S3 Anda.
+ **Distribusi IDs** — Untuk`projection.distributionid.values`, Anda dapat menentukan beberapa distribusi IDs jika Anda memisahkannya dengan koma. Misalnya,*<distributionID1>*,*<distributionID2>*.
+ **Rentang tahun** — Dalam`projection.year.range`, Anda dapat menentukan rentang tahun berdasarkan data Anda. Misalnya, Anda dapat menyesuaikannya dengan periode apa pun, seperti *2025, *2026**.
**catatan**  
Menyertakan partisi kosong, seperti partisi untuk masa depan (contoh: 2025-2040), dapat memengaruhi kinerja kueri. Namun, proyeksi partisi dirancang untuk menangani tanggal masa depan secara efektif. Untuk mempertahankan kinerja optimal, pastikan partisi dikelola dengan cermat dan hindari partisi kosong yang berlebihan bila memungkinkan.
+ **Template lokasi penyimpanan** - Anda harus memastikan untuk memperbarui `storage.location.template` dengan benar berdasarkan struktur CloudFront partisi berikut dan jalur S3.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/athena/latest/ug/create-cloudfront-table-partition-json.html)

  Setelah Anda mengonfirmasi bahwa struktur CloudFront partisi dan struktur S3 cocok dengan pola yang diperlukan, perbarui sebagai berikut`storage.location.template`:

  ```
  'storage.location.template'='s3://amzn-s3-demo-bucket/AWSLogs/account_id/CloudFront/${distributionid}/folder2/${year}/${month}/${day}/${hour}/folder3/'
  ```
**catatan**  
Konfigurasi yang tepat `storage.location.template` sangat penting untuk memastikan penyimpanan dan pengambilan data yang benar.