簡體   English   中英

AWS Athena如何分區數據並且必須采用Hive格式?

[英]How AWS Athena partition data and must be in Hive format?

我的情況是:

我有許多csv文件上傳到S3中,並且在Athena中定義了一組外部表來訪問S3 Bucket下的相應文件夾。 隨着數據量的增加,我的老板想對數據進行分區,以節省資金並提高性能。

我的問題是:

  1. 根據文檔,分區數據將為Hive格式。 因此,我所有的csv文件都會更改為Hive格式嗎?

  2. 當同時存儲csv和hive格式文件時,S3處的總數據量會增加嗎?

  3. 無需更改文件格式(從csv到hive),分區僅意味着根據特定的csv列將數據放置在不同的子文件夾或子db中? 但是如果是這種情況,當我基於2個不相關的csv列設置2個分區時,由於分區,數據將重復嗎?

  4. AWS的新手,不知道如何在Athena進行分區。 高度贊賞詳細的解釋。

要按順序回答您的問題:

  1. 您可以根據需要對數據進行分區,並保持csv文件格式。 雅典娜利用蜂巢進行分區 ,但是分區本身不會更改數據類型。 (您可以使用AWS Glue設置工作流,以在Parquet,CSV和其他受支持的格式之間轉換數據。)您可以使用gzip(或其他受支持的壓縮算法)壓縮csv文件,以達到減少掃描尺寸和提高性能的目標。

  2. 由於您沒有存儲數據的多個副本(除非您願意)。 存儲不會增加。 (您可以使用Amazon Glacier歸檔未分區的數據)。

  3. 在Athena中考慮分區的一種更好的方法是使用“標簽”,而不是使用“文件夾”。 當您獲得使用S3並開始進行API調用或使用CLI的經驗時 ,您會發現S3沒有文件夾的概念(盡管控制台上有一個表示創建文件夾的按鈕)。

  4. 這里可以找到詳細的解釋。 考慮以下csv文件cities.csv1,New York,8500000 2,Boston,673184 3,Philadelphia,1568000 4,Baltimore,621849 5,Washington DC,681170

使用AWK(或Powershell等效文件),我們可以將該文件分為5個文件。

$ awk -F "," '{OFS=","; print $2,$3>"cities_data_"$1".csv"}' cities.csv
$ ls
cities.csv  cities_data_1.csv  cities_data_2.csv  cities_data_3.csv  cities_data_4.csv  cities_data_5.csv

現在,我們可以將這些文件上載到S3,並用分區值標記它們(將它們放在分區標記的文件夾中)。

在此示例中,我們將ID為1的數據文件放置在適當標記的“文件夾”中

現在,我們可以從控制台(或CLI或API)運行DDL:

CREATE EXTERNAL TABLE cities (
  name string,
  population int
) PARTITIONED BY (
  id_partitioned int
) ROW FORMAT DELIMITED
 FIELDS TERMINATED BY ','
 LINES TERMINATED BY '\n'
LOCATION 's3://<YOURBUCKETNAME>/';

然后加載分區:

MSCK REPAIR TABLE cities;

現在我們可以基於這些分區進行查詢:

SELECT 
  name,
  population
FROM cities 
where id_partitioned = 1

您可以嘗試where子句,並查看對掃描大小的影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM