使用 athena alter table 语句创建分区

Create partitions using athena alter table statement

此 "create table" 语句工作正常。

CREATE EXTERNAL TABLE default.no_details_2018_csv (
  `id` string,
  `client_id` string,
  `client_id2` string,
  `id_1` string,
  `id_2` string,
  `client_id3` string,
  `code_1` string,
  `code_2` string,
  `code_3` string
)
STORED AS PARQUET
LOCATION 's3://some_bucket/athena-parquet/no_details/2018/'
tblproperties ("parquet.compress"="SNAPPY");

可以在该存储桶/文件夹中找到 2018 年的镶木地板格式数据。

1) 如何向 table 添加分区?我需要通过引用 s3 的新位置将 2019 年的数据添加到相同的 table://some_bucket/athena-parquet/no_details/2019/ 这两年的数据都以 parquet (snappy) 格式提供。

2) 是否可以按月而不是年进行分区?换句话说,有 24 个分区而不是 2 个分区可以吗?新目标 table 是否也会像源数据一样具有镶木地板格式?上面提到的 code_2 列看起来像这样“20181013133839”。我需要将前 4 个字符用于每年(或 6 个用于每月)分区。

首先 table 需要创建为 EXTERNAL TABLE Check this

样本 -

CREATE EXTERNAL TABLE default.no_details_table (
  `id` string,
  `client_id` string,
  `client_id2` string,
  `id_1` string,
  `id_2` string,
  `client_id3` string,
  `code_1` string,
  `code_2` string,
  `code_3` string
)
PARTITIONED BY (year string)
STORED AS PARQUET
LOCATION 's3://some_bucket/athena-parquet/no_details/'
tblproperties ("parquet.compress"="SNAPPY");

您可以将分区添加为

ALTER TABLE default.no_details_table ADD PARTITION (year='2018') LOCATION 's3://some_bucket/athena-parquet/no_details/2018/';

如果您希望每个月或每天有更多分区,请使用

创建 table
PARTITIONED BY (day string)

但是你需要把一天的数据放到路径-

s3://some_bucket/athena-parquet/no_details/20181013/